Hola @hugoruscitti quería preguntarte de como se haría para hacer el efecto de cuando un cañón dispara, no importa sin no se ve el proyectil y si se ve bien, pero eso no es lo que quiero quiero es ver cuándo cae el proyectil en el piso y por ejemplo un enemigo muestra más SERCA muera y si está más lejos le cause daño como se haría para lograrlo, y te lo agradezco por tu tiempo.
Hola @VictorRico!!, se me ocurre una forma de hacerlo, te comento cómo sería.
Primero, tendrías que tener un actor que represente el misil y que pueda colisionar con algún objeto para explotar, algo así:
Luego, podrías crear los actores que te gustaría poder impactar con el misil. Por ejemplo yo hice unos actores muy simples con la etiqueta “rana”:
Ahora bien, en la función que genera la explosión, podrías escribir un código que haga estas cosas:
- Cuando se produce la explosión:
- Obtener una lista de todas las ranas.
- Llamar a la función “golpe” de cada rana enviando la distancia entre la bomba y la rana.
- Que la rana evalúe, en base a la distancia, cuando energía tiene que perder.
Pilas viene con varias funciones para escribir este código; así que te doy ejemplo de cómo lo escribí yo. Este código iría en el actor “misil”, la función cuando_comienza_una_colisión
es la que se ejecuta sola, y dañar_a_los_actores_cercanos
es la que se encarga de obtener todas las ranas y avisarles que tienen que bajar su energía:
cuando_comienza_una_colision(otro: Actor) {
if (otro.tiene_etiqueta("plataforma")) {
this.eliminar();
this.pilas.clonar_en("explosion", this.x, this.y);
this.dañar_a_los_actores_cercanos();
}
}
dañar_a_los_actores_cercanos() {
// obtiene todos los actores de tipo 'rana' de la escena
let actores = this.pilas.obtener_todos_los_actores_con_la_etiqueta("rana");
// por cada uno de estos actores, intenta obtener su distancia y les
// envía el mensaje de "golpe".
//
// El mensaje "golpe" automáticamente intentará llamar a la función
// "cuando_llega_el_mensaje_golpe" del actor rana.
actores.map(actor => {
let distancia = this.obtener_distancia_al_actor(actor);
actor.enviar_mensaje("golpe", distancia);
})
}
La función enviar_mensaje
que aparece al final de código sirve para poder hacer que los actores se comuniquen entre sí. En este caso es como si la bomba “le avisara a las ranas” a qué distancia explotó de ellas para que reduzcan su energía.
Luego, siempre que llames a una función como enviar_mensaje
te tienes que asegurar de implementar una función para “atender ese mensaje”.
Por cierto, estas funciones de mensajes están documentadas acá: PilasEngine
Siguiendo con este ejemplo, imaginá quiero hacer una primer prueba: me gustaría que la rana se “de cuenta” de que cayó una bomba y diga al usuario a qué distancia cayó de ella. Para eso puedo escribir la función que recibe el mensaje así (en el actor rana):
cuando_llega_el_mensaje_golpe(distancia) {
this.decir(`${distancia} px de mí`);
}
y así quedaría en pantalla:
(te paso el código de este mini ejemplo: PilasEngine
Ahora, para que la rana se haga daño, se puede modificar ese código y añadir una barra de energía para cada una de las ranas y mejorar la función cuando_llega_el_mensaje_golpe
.
Te paso el código de esta última versión, lo único que cambié respecto a la anterior es el código de la rana:
ojalá te sirva el ejemplo, sino avisame!
¡Saludos!
gracias @hugoruscitti disculpa que nunca te respondí. tomado mi ejemplo, yo estoy haciendo un juego de guerra y hice lo cañones pero como hago para que la bala suba y baje osea que hago una curva, un cañon no dispara derecho…
otra cosita sabes que en los juego luego que tienes poder completo o gran cantidas de moneda, tienes para hacer algo especial mi idea es que salgan de la derrecha varios caballo y que maten al enemigo pero solo que le pasen por encima y se elimine
¡Hola @VictorRico !, hay varias formas de hacer que el misil realice una curva.
Para mí, la forma más sencilla es hacer que el misil tenga física activando estas opciones:
y luego, en el código, llamar a la función impulsar
para que el misil salga disparado en la dirección que quiero:
El resultado te debería quedar de esta forma:
Te paso un ejemplo rápido de cómo quedaría en funcionamiento:
Abrir este proyecto en el editor de pilas
Luego, con respecto a los enemigos, lo que podrías hacer es ir generándolos con un temporizador, por ejemplo que aparezca un caballo enemigo cada 2 segundos. Hay un ejemplo dentro de pilas que muestra similar, te paso el link:
https://app.pilas-engine.com.ar/#/ejemplos/automata-contra-calaveras
gracias Hugo, voy a implementar todo lo que me has dicho. MIl gracias por tu tiempo