pilas-engine

Colisiona y que el personaje se detenga

¿Como hago una pared para que cuando el jugador haga colision con ella, el personaje se detenga? Estoy haciendo un videojuego con vista aerea : D

Hola @Roidex en esencia un juego con vista aérea es igual que uno de plataformas pero sin gravedad, entonces puedes ver en el ejemplo de plataformas como están configurados los actores para que el personaje no traspase la plataforma.
Te lo digo así porque debes configurar las propiedades de los actores sobre todo:
Dinámica
¿es sensor?
Un actor con figura dinámica no podrá atravesar a otro cuya figura sea NO dinámica. Mientras que si un actor es sensor entonces podrá atravesar a todos los demás actores, por lo que esta propiedad no debe tenerla ni el personaje ni la pared.
Espero haberte ayudado, no tengo pilas a mano ahora mismo sino te pasaría directamente un ejemplo

@lukeitor Perdon pero no entendi, ¿Puedes explicarlo mejor? Lo de Dinamica y sensor

En este otro post se habló de algo parecido.
Ahí compartí el siguiente ejemplo:

https://app.pilas-engine.com.ar/#/proyecto/77d69df4-fb83-410d-a8ff-cd03c6ffec76

(no se cómo hacer para volver a incrustarlo aquí)

Con las flechas del teclado puedes mover al actor Logo. Observa cómo son las diferentes interacciones con los demás actores.
El logo, cuya figura es no dinámica, empuja a la pelota cuya figura es dinámica. Si quieres que un actor no atraviese las paredes deberás:

  • Hacer que el actor tenga figura dinámica.
  • Hacer que la pared tenga figura NO dinámica.
    Un último detalle es que el actor al tener la figura dinámica se verá afectado por la gravedad de la escena, si tu juego es de vista aérea entonces deberás poner en 0 la gravedad (desde las propiedades de la escena).
1 Like

Muchas gracias!, hice lo que dijiste y funciono! : D
Aunque ahora al hacer colision con la pared (No dinamica) el personaje atraviesa un poco la pared, ¿Como hago para que no lo atraviese?

Esto tambien pasa en el ejemplo que dejaste al darle al Actor logo la propiedad dinamica y al tratar de hacer colision con la plataforma

1 Like

Dices ¿cómo evitar ese efecto de que “se meta un poco” en la pared? No hay un arreglo para eso creo, supongo que es un “error” propio de phaser que es en lo que se basa pilas. Aún así, me parece que no queda mal, solamente raro…
Si quisieras arreglarlo deberás hacerlo mediante código, te explico una idea que se me ocurre:

  • Detectar la colisión con la pared y averiguar, de alguna manera, en que
    dirección se chocó.
  • Supongamos el actor chocó con la pared yendo hacia la derecha, entonces
    inhabilitas que el actor pueda seguir yendo hacia la derecha. Esto se puede
    hacer mediante una variable pared_a_la_derecha de tal forma que si es
    verdadera, entonces el actor ignore la tecla “d” por ejemplo.
    Lo único que no se me ocurre es cómo detectar la dirección en la que se chocó a la pared.

@Roidex Según lo decía se me ocurrió cómo hacerlo: Con Lasers.

Abrir este proyecto en el editor de pilas

(Te mueves con las flechas del teclado)
La nave tiene 4 Lasers: uno para cada dirección. Si uno de esos lasers colisiona con una pared, entonces evita que la nave se pueda mover en esa dirección.
Notar que:

  • Mientras más largo los Lasers, más lejos de la pared se detendrá la nave.
  • Se necesita un Laser por cada dirección en que se pueda mover le actor, es decir que este método tiene limitaciones.

Cualquier cosa que no entiendas del ejemplo no dudes en preguntar

1 Like

Gracias por hacer el ejemplo y ayudarme en mi problema
ya podre seguir haciendo mi jueguito

1 Like