PDA

Ver la versión completa : Estoy hundiendome,jujuju



Eden
05/12/2004, 19:24
Es que tengo dudas existenciales, xq intento que una nave(movida por mi, punto verde), vaya atraves de un laberinto, pero no consigo que se vea nada en la pantalla, solo negro, y cuando quito el proceso laberinto, y le meto un put_screen, entonces is sale el fondo y el punto verde, no lo entiendo, podeis exarme una mano

Program Gme;
Global
fichero;
Begin
set_mode(320,240,16);

Fichero=load_fpg("fichero1.fpg");

Loop

If(key(_enter))
Break;
End;
Nave();
laberinto();
Frame;
End;

End
Process nave();
Begin
x=160;y=120;graph=3;

Loop;

If(key(_left) AND x>32);

x-=4;

End

If(key(_right) AND x<290);

x+=4;

End

If(key(_up) AND y>32);

y-=4;

End

If(key(_down) AND y<290);

y+=4;

End
If(key(_enter));

exit(0,"");

End
If(collision(Type laberinto));
x=160;y=120;
End
Frame;

End

End
Process laberinto();
Begin
graph=1;
Loop;
Frame;
End
End

Eden se despide.

Hokutoy
05/12/2004, 20:12
Sorry no lo puedo mirar muy a fondo pero... en el proceso laberinto no deberías indicar la posicion x e y del graph para que este se represente?

Darumo
05/12/2004, 21:31
me parece que el programa tiene al menos un error muy grave (no me he entretenido a mirar mas)

Loop

If(key(_enter))
Break;
End;
Nave();
laberinto();
Frame;
End;

si esta estructurado como me ha parecido, llamas un proceso laberinto y nave por cada frame. Eso seria erroneo total, ya que si el programa funciona por ejemplo a 24fps inicializara 24 naves y 24 laberintos por segundo. (al rato tendras una hermosa coleccion de procesos repetidos que no vienen a cuento), lo correcto seria iniciar los procesos antes de que entre al bucle y ademas llamarlos por el orden en que quieres que se ordene en pantalla (al menos si no tienes pensado definir la Z del proceso), seria algo asi:

laberinto();
Nave();
Loop
If (key(_enter)) Break; End
Frame;
End;



Otra cosa es que puedes modificar el proceso nave para que admita valores, Nave (coordenadaX,coordenadaY), tendrias que modificar el proceso nave para que empezara asi

Process nave(x,y)
Begin

basicamente lo que metas en el parentesis ira a para a esas variables del proceso, asi que al poner Nave (100,80) la nave saldra en X=100 Y=80. Puedes usar cualquier variable "Private" del proceso de la misma forma.

Hokutoy
05/12/2004, 21:45
Mirando tambien un poquito mas el programa... no tendrías que realizar un mapa de durezas?
No tengo mucha experiencia en ellos, la verdad, pero por lo que parece estas "comprobando" con la funcion collision si la nave y el laberinto chocan (se dibujan los dos en un mismo pixel) y eso no te funcionará ya que el "sprite" del laberinto, al ocupar toda la pantall (supongo), siempre chocará con la nave.


Mirate ejemplos de mapas de durezas o el source del GPball que tendrían que funcionar de una manera parecida y es como se ha de hacer.

Byes

PD: Lo que comenta Darumo es muy cierto... la verdad es que es un fallo bastante común (a mi me pasa muchas veces por descuido... pero mola ver como la GP32 "se peta" al haber 300 kens (y subiendo) en pantalla haciendo varias animaciones... :abeber: