Minha solução seria tratar todas as entidades físicas no mapa do jogo como um nó de árvore e o próprio mapa como o nó raiz . Nós podem conter outros nós. Cada nó está contido (direta ou indiretamente) dentro do nó do mapa.
Por exemplo, digamos que seu personagem esteja em uma plataforma. O nó da plataforma contém o nó do personagem. Portanto, sempre que a plataforma se mover, os nós que ela contém (nesse caso, o personagem) também se moverão.
Para que isso aconteça, todo nó deve ter uma posição (x, y) em relação ao nó pai . Por exemplo, seu personagem pode estar localizado em (1,0) em relação à plataforma, que em si pode estar em (10,10) em relação ao mapa do jogo. Dessa forma, se a plataforma se mover, seu personagem se moverá implicitamente.
Nesta árvore hierárquica, a posição de cada nó é igual à soma de sua posição mais as posições de cada nó pai. Digamos que queremos obter a posição do personagem no mapa. Calculamos:
(posição do personagem) + (posição do nó pai) + (posição do nó raiz) = (1,0) + (10,10) + (0,0) = (11,0)
OK, então todo esse tempo seu personagem esteve na plataforma. Que tal pular? Bem, no momento em que ele pula, você o desconecta da plataforma e o anexa ao nó que contém a plataforma ; nesse caso, o mapa (nó raiz).
Quando ele pousar novamente, conecte-o a qualquer nó em que ele pousar.
Eu sugeriria tratar isso como um problema de pseudo-física e resolvê-lo usando o atrito com o solo.
Você já está usando a gravidade para segurar o personagem no chão, isso lida com as situações em que as plataformas se movem para cima e para baixo. Para lidar com o movimento esquerdo e direito, o chão deve exercer uma grande fricção no personagem. Normalmente, esse nível de atrito seria 1,0 ou 100%.
Se o personagem estiver parado, sua velocidade será 0 e, em vez disso, herdará 100% da velocidade da plataforma por causa do atrito. Algo como o seguinte:
O benefício dessa abordagem é que ela se presta facilmente a mecânicas adicionais de plataformas, como ser capaz de superar o atrito em ladeiras íngremes, permitindo que seu personagem deslize. Também permite reduzir facilmente o atrito para criar gelo no qual o personagem deslizará.
Também é mais fácil lidar com questões como paredes baixas suspensas que podem derrubar o seu jogador de uma plataforma móvel. Se você simplesmente trata o personagem como filho de uma plataforma pai, há uma boa chance de ele não interagir com muita facilidade com o resto da sua detecção de colisão sem muito trabalho.
fonte
Você pode fixar a posição do jogador não "absoluta no nível", mas "relativa à plataforma" e, em seguida, ter uma função que forneça sua posição real. Eu não gosto disso.
Provavelmente seria melhor (e mais simples) vincular o player à plataforma para que, quando a plataforma se mova + x / + y, o jogador se mova o mesmo.
fonte