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?
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...
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''
No creo que sea eso, pero en bennu el switch no tiene break. El break te está sacando del loop.
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...
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?
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)
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.
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