PDA

Ver la versión completa : Un problema muy extraño en fenix



Kabal
11/10/2004, 20:34
Estoy programando un juego en fenix y resulta que cuando pulso _alt el juego se queda "congelado" durante un segundo mas o menos. Aqui pongo una version resumida:

program nave;

//declaracion de variables

begin
//inicializacion del programa
nave();
loop
//gestion del scroll
end
end


process nave()
//declaracion de variables
begin
loop
if (key(_alt)) shot(1,x,y);
end
end

Process shot (tipo,x,y)
private
int energia;
Begin
Switch (tipo)
Case(1):
graph=53; size=50; energia=2;
Repeat
advance(5);
Frame;
Until (energia<=0)
End

End //fin switch
End


El caso es que solo pasa cuando genero el 1º disparo, despues ya no ocurre.
Alguien sabe a que puede ser esto?

Javac
11/10/2004, 20:47
Al compilar no da ningun error verdad?

Kabal
11/10/2004, 21:15
Lo curioso es que no me da error al compilar, y al ejecutar el juego todo va bien hasta que al pulsar _alt, creo el 1º proceso de disparo y se detiene por un momento el juego, porque los siguientes disparos no dan problemas.

Kabal
11/10/2004, 21:17
perdon, al copiar el programa cometi un error.


process nave()
//declaracion de variables
begin
loop
if (key(_alt)) shot(1,x,y);
frame;
end
end

pero el problema persiste.

Darumo
11/10/2004, 22:18
no entiendo tu codigo del disparo

Begin
Switch (tipo)
Case(1):
graph=53; size=50; energia=2;
Repeat
advance(5);
Frame;
Until (energia<=0)
End

sencillamente ¿cuando se supone que la energia es < o = a cero? si no tienes nada que modifique la variable energia, ese Until es infinito. (y deberia ralentizarte hasta hacerse inmovible ya que si disparas seguido al no terminar los procesos de disparos se amontonan), tambien deberias eliminar los procesos una vez se salgan de la pantalla y hacer algun metodo por el cual cuando dejes el boton de disparo pulsado no se cree un disparo por frame (a 60fps serian 60 procesos Disparo que manejar, y se supone que necesitas agilizar el uso de CPU por si quieres aprovechar para otras cosas)

y sobre lo que decias, ¿has probado usando otra tecla como boton de disparo? (lo mas recomendable seria usar teclas normales, por ejemplo A o Z para disparar)

Slàinte
11/10/2004, 23:09
Hmmm es bastante factible que sea culpa del ALT sobretodo si estas compilando en modo DEBUG... el alt ademas de ser un a"tecla" es un modificador para comandos combinados y hay que comprobar pulsaciones adicionales al ALT cuando está pulsada...

Kabal
12/10/2004, 10:09
He probado cambiar la tecla _alt por _z y sigue igual.
Pero he probado usar un proceso que crea los procesos problematicos al principio (para que no se note) y luego mandarles un s_kill, para que despues el juego siga normalmente.
De este forma he condeguido minimizar el fallo en gran medida.
Es posible que fenix tenga algun problema de memoria dinamica al crear procesos de gran tamaño, como de una 50 lineas??

Slàinte
12/10/2004, 16:37
necesitaria el codigo completo del proceso para poder contestarte a eso... de todas formas es bastante raro lo que indicas salvo que haya structs complejas anidadas o algo similar...

Darumo
13/10/2004, 13:14
otra cosa es sobre el "size=50", pienso que mas que comer CPU poniendo todos los disparos a 50% de tamaño, ¿por que no dibujas el disparo a ese tamaño?, os mola consumir CPU innecesariamente xD (como te de por pasarlo a la GP32 lo va a flipar), aunque sigo sin encontrar una explicacion por el que se te congele un segundo al disparar por primera vez.