Hola @hokuto, ¡Qué desafío más interesante!, la verdad que nunca hice algo así, pero me puse a investigar y efectivamente hay varios nombres y tutoriales que nos pueden orientar a hacer movimientos de ese tipo (vi que lo llaman de varias formas: motion path, interpolation, waypoints etc…).
Así que me puse a tratar de hacer algo similar en pilas 2 y algo salió… creo que es algo rudimentario por ahora, pero como primer prueba por lo menos la nave pude hacer que la nave se mueva siguiendo los puntos !!!
Arranqué mirando este tutorial Phaser Coding Tips 8: Sprite Motion Paths Tutorial - Learn - Phaser pero está diseñado para la versión anterior de phaser2, así que tuve que tomar de ahí algunos conceptos y trasladarlos a phaser3 (que es lo que usa pilas).
En el tutorial mencionan que la forma de hacer un movimiento entre esos puntos consiste en usar una función que calcule todos los puntos intermedios de esa lista, por ejemplo si tenes estos valores:
posicion_y = [32, 100, 150];
una lista con los valores intermedios podría ser una lista mucho más extensa:
[32, 32.58, 35.93, 43.08, 53.58, 66, 78.41 ... etc]
y en ese punto, con todos los valores intermedios calculados, podrías tomar al actor e ir asignándole esos valores a cada una de las propiedades.
Conceptualmente no es muy complicado, pero cuando me puse a codificarlo noté que hay varias cosas a considerar, entre transformaciones y llamadas directas a phaser…
Te paso el ejemplo para que lo revises a ver si te sirve. Dejé varios comentarios para orientarte:
https://app.pilas-engine.com.ar/#/proyecto/dcda3945-5fae-44af-b6b6-a8dd683756fa
La función más interesante es generar_valores_intermedios
(que está al final del archivo), porque desde ahí vas a poder controlar el tipo de movimiento que deberá hacer la nave. Por ejemplo, este movimiento se logra usando una interpolación de tipo SmootherStep
, donde la nave llega a los puntos que le marqué de forma gradual, como si estuviera “desacelerando”.
El otro tipo de interpolación que dejé en esa función es la interpolación Lineal
, que parece ir siempre a la misma velocidad:
Obviamente esto mismo se podría hacer en pilas 1 también, pero no encontré funciones de python para hacer las interpolaciones de manera muy sencilla. Ví que hay algunos artículos que explican el concepto matemático detrás de las interpolaciones (con varios ejemplos y todo, como este Introducción a la interpolación unidimensional con Python | by Miguel Ángel Flores | Medium), pero no vi mucho orientado a juegos y en español. Además, mucho de lo que encontré usa bibliotecas externas, como numpy, así que ni probé por ese lado.
Ahora bien, pensando en pilas 2, creo que podríamos hacer algo para que sea más sencillo hacer ese tipo de movimientos de actores. No quiero implementar algo muy complejo, me gustó la idea de pasarle a un actor una lista de números y listo, desde el código… pero voy a investigar por el lado de phaser3 a ver si podemos tomar algo de ahí teniendo cuidado de no hacer muy complejo el uso del editor.
Te paso los ejemplos de phaser que estuve investigando:
¡Abrazo!