Hacer que un actor recorra un camino establecido

Hola.

Me gustaria hacer distintos caminos para que las naves enemigas lo recorran,estaba pensando en ir añadiendo las posiciones x e y en una lista para que luego esa nave enemiga la vaya recorriendo.

Tambien se me ocurrio que podria ser en angulos,y ir añadiendo los distintos angulos en una lista y que luego la nave enemiga la recorra con la funcion avanzar(),pero la verdad es que no se muy bien como hacer esto.

Pongo un ejemplo.
posicionX = [32,96,200,320,500]
posicionY = [32,100,150,300,450]
angulos = [35,95,120,215,300]

Ahora como hago para recorrer esas listas y darle movimento a la nave enemiga.

Eso se llama sistema de waypoint,busca tutoriales de unity y fijate como resuelven ese problema

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”.

animacion-smooterStep

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:

animacion-linear

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!

1 Like

Hola.

Descargate este juego y usalo en el mame,y fijate en los movimientos de las naves enemigas y tambien en los disparos.

Crees que se podria conseguir algo parecido.

Hola @hokuto!, sí, creo que se puede conseguir algo así pero lleva su trabajo :sweat_smile: 19xx es tal vez uno de los mejores juegos de su género…

Pero bueno, salvando las diferencias, hice una versión muy humilde tratando de replicar el tema de los disparos y los actores que aparecen en secuencia:

screencast%202020-04-02%2021-55-333

Te comento cómo lo encaré, si queres abrí la versión online en el editor de pilas para ir siguiendo mis comentarios:

Lo primero que hice fue crear 3 tipos de naves distintas, con movimientos propios de cada una:

Después, hice unos métodos para facilitar la creación de los actores, por ejemplo hay unas naves que aparecen de a 5 a la vez, en forma de V. Así que las agrego en la escena usando el mismo actor prefabricado:

image

Luego, hice que la escena tenga una especie de guión con un temporizador, es decir, cada un segundo que transcurre intentará ejecutar uno de estos métodos para crear grupos de actores:

Con respecto a los disparos, usé una estrategia muy similar al ejemplo “laser-y-misil” que viene en pilas, PilasEngine, hice que los disparos avancen en el ángulo hacia el protagonista.

La prueba que hice tiene muchos comentarios, seguramente te vas a guiar bien. Sino avisame y trataré de resolver tus dudas.

¡Abrazo!

1 Like

Se ve muy bueno,gracias.:heart_eyes:

Añade estos ejemplos a la proxima version de pilas.

Hola @hugoruscitti.

Estube buscando sobre la programacion de rutas y encontre un engine que las tiene implementadas,es un engine creado por un español pero es para hacer juegos para amstrad cpc,te paso el enlace por si te interesa mirarlo y tambien te paso su canal donde hay videos de juegos hechos con el y algunos videotutoriales.

Pagina:

Canal de youtbe,este video que te pongo es un tutorial sobre colisiones y rutas: