Tengo un problema, al ejecutar este código:
Citarif keyboard_check(ord('X')) and retroceso=0 and fin_rayo>-1
{
golpeado=collision_line(x+10,y-16,fin_rayo.x+2,fin_rayo.y+2,obj_ai,1,1)
while golpeado<>-4
{
with (golpeado)
{
salud-=1
}
golpeado=collision_line(x+10,y-16,fin_rayo.x+2,fin_rayo.y+2,obj_ai,1,1)
}
}
En realidad, cuando se cumple ese If, el juego se traba, creo que es por un ciclo while infinito
Como arreglo el código :-\?
Para mí eso es todo lo que necesitan, por las dudas adjunto el GMK
Para qué es el código? Es obvio que se va a trabar porque el objeto sigue en colisión todo el tiempo. Cambialo por un if o limitá el nro de ciclos del while, porq así como está no tiene mucho sentido
Ah, ahora entendí porque
Lo que necesitaba es quitarle 1 de salud a todos los que toca, y sin el while iba a tomar a uno solo
EDIT: Ese código lo modifique, antes en vez de restar uno de salud directamente eliminaba el objeto
Entonces necesitás moverlos de lugar e indexarlos para luego devolverlos a su lugar
guardar=1
if keyboard_check(ord('X')) and retroceso=0 and fin_rayo>-1
{
golpeado=collision_line(x+10,y-16,fin_rayo.x+2,fin_rayo.y+2,obj_ai,1,1)
while golpeado<>-4
{
guardar[i,1]=golpeado.x
guardar[i,2]=golpeado.y
guardar[i,3]=golpeado
guardar+=1
with (golpeado)
{
salud-=1
x=-9999
y=-9999
}
golpeado=collision_line(x+10,y-16,fin_rayo.x+2,fin_rayo.y+2,obj_ai,1,1)
}
}
for (i=1;i<=guardar-1;i+=1)
{
(guardar[i,3]).x=guardar[i,2]
(guardar[i,3]).y=guardar[i,3]
}
Ahora no se traba, le quita 1 de vida pero se va a -9999 y no vuelve XD
Por el debug me doy cuenta de eso
No hay un método más ortodoxo? :-\
Me equivoqué en el código, lo podrías haber arreglado xD
guardar=1
if keyboard_check(ord('X')) and retroceso=0 and fin_rayo>-1
{
golpeado=collision_line(x+10,y-16,fin_rayo.x+2,fin_rayo.y+2,obj_ai,1,1)
while golpeado<>-4
{
guardar[i,1]=golpeado.x
guardar[i,2]=golpeado.y
guardar[i,3]=golpeado
guardar+=1
with (golpeado)
{
salud-=1
x=-9999
y=-9999
}
golpeado=collision_line(x+10,y-16,fin_rayo.x+2,fin_rayo.y+2,obj_ai,1,1)
}
}
for (i=1;i<=guardar-1;i+=1)
{
(guardar[i,3]).x=guardar[i,1]
(guardar[i,3]).y=guardar[i,2]
}
PD: No, para sacarte el collision line de encima no hay un método más ortodoxo creo a menos q les cambies la mask a una vacía y luego vuelvas a ponerle la original, pero sería casi lo mismo que cambiarles la posición, al fin y al cabo no se alcanza a refrescar la imágen y no se ve nada de ese movimiento
No funciona XD
No importa, cuando tenga tiempo lo arreglo, ya se el camino, gracias :)
Tema cerrado