Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: prototipozero en Febrero 10, 2018, 07:39:34 PM

Título: Crear Linea para láser [SOLUCIONADO]
Publicado por: prototipozero en Febrero 10, 2018, 07:39:34 PM
Hola gente, gracias por entrar :P
Bueno mi pregunta es "simple". Tengo un arma que es un cañón láser el cual al disparar genera una columna.
El problema que se me presenta es que no se como calcular cuando colisiona contra algo para que se detenga o si cambio el angulo se estire o se achique (porque colisiona contra algo que la frena.
Vi mucho tutoriales que usan el "move_contact_solid" el problema es que no todos los objetos son sólidos en mi juego.

desde ya muchas gracias a quien me pueda ayudar ^^
Título: Re:Crear Linea para láser
Publicado por: 3dgeminis en Febrero 11, 2018, 03:53:13 AM
E ese caso tenes que calcular la distancia del origen al punto de colision
[gml]
///CREATE
distancia=0
ang=0

///STEP
ang=point_direction(x,y,mouse_x,mouse_y)
for(i=0; i<1000; i+=1)
  {
   xx=lengthdir_x(distancia,ang)
   yy=lengthdir_y(distancia,ang)
   if instance_position(x+xx, y+yy, pared) break
   distancia=i
  }

///DRAW
draw_sprite_ext(sprite_laser, 0, x, y, distancia, 1, ang, c_white, 1)

[/gml]
El sprite debe tener un ancho de 1 pixel
Título: Re:Crear Linea para láser
Publicado por: prototipozero en Febrero 11, 2018, 05:17:58 AM
Muchas gracias 3dgeminis, mañana lo pondré en practica a ver como me va.
Tambien se me había ocurrido hacer un calculo del seno y coseno utilizando el angulo y luego multiplicar a estos por una cantidad de pixeles e ir preguntando si hay algo en esa posición :P Pero creo que tu calculo me es mas practico ^^

----------------------

La intriga si lo que me pasaste funcionaria o no le gano a las ganas de dormir. Y si funciona de maravilla!!!!, te doy las mil y una gracias. Lo modifique un poco al código para detectar enemigos y restarle la vida :D
gracias de nuevo.
Título: Re:Crear Linea para láser [SOLUCIONADO]
Publicado por: Clamud en Febrero 11, 2018, 06:25:38 PM
Se puede optimizar un poco haciendo una búsqueda binaria
https://yal.cc/gamemaker-collision-line-point/

Así para detectar el punto de colisión a 1000 px de distancia solo se necesitan 11 iteraciones en lugar de 1000.