Bennu Game Development

Foros en Español => Mesa de Ayuda => Topic started by: Futu-block on March 11, 2015, 10:35:37 AM

Title: bloque for dentro de un loop
Post by: Futu-block on March 11, 2015, 10:35:37 AM
bennu me petaba con wine y me puse a investigar ya que no me dejaba trabajar y llegé a la raiz del promlema...

dentro del proceso enemigo y para ahorrar memoria, por que cada enemigo es el mismo proceso pero con distinto grafico y movimento, le hago un switch dentro del loop

    loop
        latencia++; // uso esa variable para relantizacion de movimientos, graficos, etc       
        switch (direccion)


            case 700: // enemigo sin grafico que controla tirar bolas de fuegos en diferentes direcciones
                if (latencia % 199 == 0)
                    for (C0 = 1; C0 < 7; C0++)
                        bolafuego(C0);
                        frame(50);
                    end
                end
            end

frames y tal y tal

fin del proceso

siguiente proceso: bolafuego(direccion_de_movimiento)  C0 de arriba

begin
    x = father.x;
    y = father.y;
    loop
        graph++;
        switch (direccion_de_movimiento)
            //case 1: x +=4; y +=2; if (x>= 350) break; end end   
              case 2: x +=3; y +=3; if (y>= 260) break; end end   
              case 3: x +=2; y +=4; if (y>= 260) break; end end   
              case 4: y +=4;            if (y>= 260) break; end end   
              case 5: x -=2; y +=4; if (y>= 260) break; end end   
              case 6: x -=3; y +=3; if (y>= 260) break; end end   
              case 7: x -=4; y +=2; if (x>= -30) break; end end   
        end
        frame;
    end
end
 
 
    El primero lo entrecomillé porque cuando llegaba al break se quedaba todo pillao y se iba al garete, lo comenté y adios problema...
¿porque?
Title: Re:bloque for dentro de un loop
Post by: panreyes on March 11, 2015, 10:47:27 AM
No tengo ni idea, pero te puedo decir que esa variable C0 hace que me duelan los ojos, ya que mi cerebro no la ve como una variable sino como un valor en hexadecimal xD


Igual me equivoco, pero puede que el compilador o el intérprete también se líe con eso...
Title: Re:bloque for dentro de un loop
Post by: Futu-block on March 11, 2015, 11:50:46 AM
es el nombre que le he dado aqui, en verdad uso una variable llamada neix, pensé que cambiarle de nombre la haría ''menos confundible''
Title: Re:bloque for dentro de un loop
Post by: Yawin on March 11, 2015, 12:01:38 PM
No creo que sea eso, pero en bennu el switch no tiene break. El break te está sacando del loop.
Title: Re:bloque for dentro de un loop
Post by: Futu-block on March 11, 2015, 12:08:51 PM
todo es porque el primer proceso creado boafuego(neix) o bolafuego(c0) el parametro es igual a lo que pone en el for, osea, que como tiene que añadirse en cada Nframes...

pero eso no tiene ná que ver que se vaya al garete cuando el proceso esté fuera de pantalla, solo cuando llege al break...
Title: Re:bloque for dentro de un loop
Post by: Ulthar Kaufman on March 11, 2015, 12:57:12 PM
No tiene que ver con que se salga o no (más bien con que no salga), pero veo que en el case de direcciones incrementas X e Y, sin embargo solo evalúas una de ellas para saber si ha salido de la pantalla, no deberías hacer esas comprobaciones (X e Y a la vez) fuera del switch?
Title: Re:bloque for dentro de un loop
Post by: Futu-block on March 11, 2015, 01:19:52 PM
Ahí es donde está la raiz del problema, hay que simplificar el codigo y sacar seis o siete combrobaciones de un switch donde esta entre comillas "gastando memoria" y ponerlo en una sola sentencia antes de terminar el bucle, gracias

Pero ¿es necesario hacer dos comrobaciones (x,y) para matar el proceso? Creo que con una sirve, la suficiente para que el proceso salga del cuadro de vision, ya sea x o y


Aparte, optimizaré un poco mas el codigo para ver si sigue fallando con poner el primer proceso o no bolafuego(1)
Title: Re:bloque for dentro de un loop
Post by: gecko on March 11, 2015, 02:22:18 PM
Esas comprobaciones para saber si salio de la pantalla sacalas completamente del switch.

Las podes hacer perfectamente despues del switch, dentro del loop. Con un solo if podes comprobar los 4 lados de la pantalla, y ahi matar al proceso si corresponde.
Title: Re:bloque for dentro de un loop
Post by: Futu-block on March 11, 2015, 08:00:35 PM
no paro de darle vueltas a la cabeza y lo que falla es el:  y +=2; de la primera sentencia...
pongo codigo y si alguien quiere le mando el juego entero


            case 700: //fuegos gargola
                if (latencia % 199 == 0)
                    for (neix = 1; neix < 8; neix++)
                        bolafuego(neix);
                        frame(200);
                    end
                end
            end



process bolafuego(paonde)

begin
cuenta_procesos++;
    graph = 701;
    x = father.x;
    y = father.y;
    loop
        size = 25;
        graph++;
        if (graph => 709) graph = 701; end
        switch (paonde)   
            //case 1: x +=4; y +=2; end   
            case 2: x +=3; y +=3; end   
            case 3: x +=2; y +=4; end   
            case 4: y +=4; end   
            case 5: x -=2; y +=4; end   
            case 6: x -=3; y +=3; end   
            case 7: x -=4; y +=2; end   
        end
        alpha-=2;
        if (alpha <= 0) break; end
        if (y >= 260) break; end
        if (estadojuego == 100) break; end
        frame;
    end
end