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