Mi solución sería tratar cada entidad física en el mapa del juego como un nodo de árbol , y el mapa en sí como el nodo raíz . Los nodos pueden contener otros nodos. Cada nodo está contenido (directa o indirectamente) dentro del nodo del mapa.
Por ejemplo, digamos que tu personaje está parado en una plataforma. El nodo de la plataforma contiene el nodo del personaje. Entonces, cada vez que la plataforma se mueve, los nodos que contiene (en este caso el personaje) también se moverán.
Para que esto suceda, cada nodo debe tener una posición (x, y) relativa al nodo padre . Por ejemplo, tu personaje podría estar ubicado en (1,0) en relación con la plataforma, que a su vez podría estar ubicado en (10,10) en relación con el mapa del juego. De esa manera, si la plataforma se mueve, tu personaje se moverá implícitamente.
En este árbol jerárquico, la posición de cada nodo es igual a la suma de su posición más las posiciones de cada uno de sus nodos principales. Digamos que queremos obtener la posición del personaje en el mapa. Calculamos:
(posición del personaje) + (posición del nodo principal) + (posición del nodo raíz) = (1,0) + (10,10) + (0,0) = (11,0)
OK, todo este tiempo tu personaje ha estado parado en la plataforma. ¿Qué hay de saltar? Bueno, en el momento en que salta, lo separas de la plataforma y lo unes al nodo que contiene la plataforma ; en este caso, el mapa (nodo raíz).
Cuando aterrice de nuevo, conéctelo al nodo en el que aterrizó.
Sugeriría tratar esto como un problema de pseudo-física y resolverlo usando la fricción del suelo.
Ya estás usando la gravedad para mantener al personaje en el suelo, esto maneja las situaciones donde las plataformas se mueven hacia arriba y hacia abajo. Para manejar el movimiento hacia la izquierda y hacia la derecha, el suelo debe ejercer una gran fricción sobre el personaje. Típicamente este nivel de fricción sería 1.0, o 100%.
Si el personaje está parado, entonces su velocidad es 0, y en su lugar heredan el 100% de la velocidad de la plataforma debido a la fricción. Algo como lo siguiente:
El beneficio de este enfoque es que se presta fácilmente a mecánicas de plataformas adicionales, como ser capaz de superar la fricción en pendientes pronunciadas, permitiendo que su personaje se deslice. También te permite reducir fácilmente la fricción para crear hielo sobre el que se deslizará el personaje.
También es más fácil lidiar con problemas como paredes bajas que pueden derribar a su jugador de una plataforma en movimiento. Si simplemente trata al personaje como hijo de una plataforma principal, existe una buena posibilidad de que no interactúe muy fácilmente con el resto de su detección de colisión sin mucho trabajo.
fuente
Puede arreglar la posición del jugador no "absoluto en el nivel" sino "relativo a la plataforma", y luego tener una función que le dé su posición real. Aunque no me gusta esto.
Probablemente sería mejor (y más simple) unir al jugador a la plataforma para que cuando la plataforma se mueva + x / + y, el jugador se mueva tanto.
fuente