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
El Manual

- Ley de la gravitación selectiva: toda herramienta se caerá donde produzca el mayor daño.
- Si todo parece estar bien, es obvio que uno no encontró el problema
- Todo aquello que se corte a medida resultara ser demasiado corto.
- Todo archivo borrado era necesario, todo archivo conservado es inutil
- Cuando a usted se le ocurra la solución ideal, alguien habrá resuelto ya el problema.

                                                               Murphy


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




#2 Abril 28, 2012, 03:18:52 AM Ultima modificación: Abril 28, 2012, 03:26:48 AM por Mgbu
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
El Manual

- Ley de la gravitación selectiva: toda herramienta se caerá donde produzca el mayor daño.
- Si todo parece estar bien, es obvio que uno no encontró el problema
- Todo aquello que se corte a medida resultara ser demasiado corto.
- Todo archivo borrado era necesario, todo archivo conservado es inutil
- Cuando a usted se le ocurra la solución ideal, alguien habrá resuelto ya el problema.

                                                               Murphy


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?  :-\
El Manual

- Ley de la gravitación selectiva: toda herramienta se caerá donde produzca el mayor daño.
- Si todo parece estar bien, es obvio que uno no encontró el problema
- Todo aquello que se corte a medida resultara ser demasiado corto.
- Todo archivo borrado era necesario, todo archivo conservado es inutil
- Cuando a usted se le ocurra la solución ideal, alguien habrá resuelto ya el problema.

                                                               Murphy


#5 Abril 29, 2012, 09:09:40 PM Ultima modificación: Abril 29, 2012, 09:11:11 PM por Texic
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
El Manual

- Ley de la gravitación selectiva: toda herramienta se caerá donde produzca el mayor daño.
- Si todo parece estar bien, es obvio que uno no encontró el problema
- Todo aquello que se corte a medida resultara ser demasiado corto.
- Todo archivo borrado era necesario, todo archivo conservado es inutil
- Cuando a usted se le ocurra la solución ideal, alguien habrá resuelto ya el problema.

                                                               Murphy