pilas-engine

Cómo calcular ángulo de rebote

Hola. Soy nuevo acá. Gracias a todos en los que hacen posible este motor de juegos.
Mi duda es la siguiente: Cómo puedo calcular el ángulo de refracción o rebote sobre una pared o un objeto? Pongo un imagen de ejemplo de cómo quedaría, estoy buscando que esa ruta punteada esté limitada y que no sea infinita como en este jueguito.

image

Respuesta al foro de pilas

Hola @BetoCR, ¡Bienvenido al foro de pilas!

Estuve mirando las capturas de pantalla que nos enviaste y creo que tengo una forma de implementarlas, la idea que se me ocurrió es algo así:

Primero deberías tener un actor que sea el punto de origen de la trayectoria (en mi caso un actor fantasma) y luego un actor que sirva de punto para representar la linea de trayectoria (un actor verde):

62C0E6B7-2A73-4CA3-AF0A-4341DC58ACDE

Luego, para empezar a simular la trayectoria, cloné el actor verde una 30 veces y guardé todas las copias en una lista:

this.puntos = [];

for (let i = 0; i < 30; i++) {
  this.puntos.push(this.pilas.clonar("actor_verde"));
}

Con ese código los 30 actores van a estar todos en la misma coordenada, así que el siguiente paso que di fue:

  1. obtener el ángulo de rotación que se forma entre el actor “fantasma” y el puntero del mouse con la función this.pilas.obtener_angulo_entre_puntos.
  2. recorrer la lista de puntos (los actores verdes) y por cada uno de ellos aplicarles la coordenada x e y:

Con eso, ya se formó una linea que va desde el actor “fantasma” hasta la posición del mouse.

Te paso el código de este ejemplo, el código más importante está en el actor fantasma:

ver en el editor

Luego, para que la trayectoria tenga en cuenta las colisiones con las figuras físicas adapté el código de posicionamiento de los actores. Hice que antes de aplicarse la posición del actor se busque si en ese punto hay un colisión con una plataforma o no. Si hay una colisión, cambia la dirección de posición:

Te paso el código modificado, agregué una función llamada hay_un_actor_con_figura_en y el código de la función que posiciona los actores:

ver en el editor

Ah, por cierto, vas a notar que si reducís el tamaño del actor punto el efecto va a quedar mucho mejor, porque la colisión con las paredes se hace desde el centro del actor. Cuando más pequeño sea el actor menos se notará el “solapado” de la imagen y el borde de la plataforma.

También vas a notar que ajustando la rotación del actor y convirtiéndolo en un guión te puede llegar a quedar bastante parecido a tu segunda captura de pantalla:

ver en el editor

¡Avisanos cualquier cosa!, ¡abrazo grande!

2 Likes

Impecable @hugoruscitti, también estaba buscando algo como esto. Me sorprende con la rapidez que solucionas las cosas abrazo.

1 Like