PDA

Ver la versión completa : el tiempo vuela (problemas usando timer[])



takushi
10/02/2005, 06:01
pues eso .. no se por que puede ser, pero en el pc me fuinciona perfecto la chorradita que he hecho , pero si n embargo en la gp , cuando se supone que tiene ke eserpar un sg para hacer algo , pues lo hace de golpe sin esperar... :?

alugien sabe pk puedeser? alguna otra manera de hacer que pase un tiempo sin hacer nada?

Hokutoy
10/02/2005, 08:13
Hombre una manera cutre de no hacer nada:

Private count=0;

Repeat
count++;
frame;
Until count==200; // Modificar el 200 por el valor que quieras esperar sin hacer nada

PD: Haver si alguien explica bien como funcionan los timers que a mí también me interesa.

takushi
10/02/2005, 11:53
hombre.. yo no se si tiene que ver con la ausencia de relog de la gp32 o es que tengo algo mal y no me entero :P

pero mi codigo esta "asin":


//me espero un segundo y medio
timer[0]=0;
while (timer[0]<=150)
frame;
END
//y luego hago lo que me da la gana
LaCosaQueHaceDispues();


se supone que 100 es un sg y que el timer se va incrementando solo con el paso del tiempo real :P vamos que no hay mucha difernecia entre eso y hacerlo como dices tu exepto en que puedes poner el tiempo que queda de manera exacta...

Raltark
10/02/2005, 13:56
Umm no se apenas nada de esto pero... mirando asi el codigo... no podria ser...

timer[0]=0;
loop
if (timer[0]==150) break; end;
frame;
end;

???

NOTA: Toy intentado aprender =P

Hokutoy
10/02/2005, 14:03
No en teoría el código esta bien.
El bucle While se ejecuta (haciendo solo el frame, osea nada) mientras que el timer no alcanze el valor 150. Cuando la condicion se incumple (osea que el timer[0]=>150) esta deja de ser valida y se pasa a continuar con el processo desde el ultimo END.

EDIT: No seas perry y no me edites el mensaje mientras te contesto!! XDDDDDDDDDDDDDDDDDDD

chipan
10/02/2005, 14:07
el timer es una funcion que no es exacta; nunca se debe igualar a un número en concreto porque no va aumentando de 1 en 1. Esto es causado porque, por ejemplo; si un juego va a 25 fps; y el timer va en centesimas de segundo; en cada fotograma avanzará 4 unidades (y aun así no lo hace exactamente, igual son 3 o 5) porque los valores se comparan una vez por fotograma.
Lo mejor, si quieres que tarde un segundo y medio lo calcules por frames; es decir, si el juego va a 30 fps, haz una variable que cuente hasta 45.

Raltark
10/02/2005, 14:10
EDIT: No seas perry y no me edites el mensaje mientras te contesto!! XDDDDDDDDDDDDDDDDDDD

Jejejeje esq me di cuenta q lo de antes estaba mal :P

Asias por la info ;)

takushi
10/02/2005, 14:18
we... yo esto es lo primero que hago en fenix

a cuantos fps se supone que va si no lo pones en ningun lado?

Raltark
10/02/2005, 14:19
Ya puestos pregunto yo otra cosa, aunq no sea del tema (espero q no se moleste takishi) Pero esq he buscado y como salen 7000 post, pues como no no me los voy a leer todos, me puedo tirar una semana XDD.

Cuando haces algo en fenix

tienes tu:

program Pepito;

global <-- variables globales de todo el codigo

begin
aqui meto el modo grafico, fichero de graficos y luego lo q no entiendo de los ejemplos q vi...

//Embucla el proceso principal.
loop
frame;
if(key(_space)) break; end

end
end

y ahora los procesos

process Manolete()
private <- meto variables propias
begin
end

ahora lo q yo digo es...
si lo q quiero es q al pulsar cierta tecla se ejecute cierto proceso, eso lo tengo q meter en el proceso principal?

tipo: if(key(_left)) process left(); end; ???

teniendo un proceso llamado left donde apareciera la animacion del muñeco y tal.

o si tubiera un process magia()

tendria q poner if(key(_tab)) process magia() end;

todo dentro del principal?

Si es de ser muy burro podeis mandarme a freir y con tiempo me leere los millones de post sobre el tema q fijo q a alguien se le ocurrio la duda antes q a mi... asias de antemano.

Hokutoy
10/02/2005, 14:37
No hace falta que todo estea en el "bucle inicial" como tu le llamas. Un simple proceso puede ejercer de "bucle inicial" si tu quieres.

program Pepito;

global <-- variables globales de todo el codigo

begin
principal();
End

Process Principal()
//Este pasaria a ser tu blucle principal. Ha de esxistir un bucle principal que mantenga el programa loopeado porque sino este acabaria despues del primer frame. El chekeo de teclas tendría que estar en este proceso o en otro que corra paralelo al principal ya que has de poder chekear las pulsaciones de teclas cada frame.
loop
frame;
if(key(_space)) break; end

end
end

Licantropo
10/02/2005, 14:47
Hombre lo puedes hacer asi,pero depende de lo que quieras exactamente:

Yo si tuviese un personaje lo haria mas o menos asi:

Program muñecajo;
Glogal
Begin
//poner intro (puede ser otro metodo)
nivel1()
Loop
Frame;
if(fin juego)
break;
end
End


procces nivel1()
Begin
cargar fondd de nivel, musica, fuente
idpersonaje=personaje()
Loop
Frame
if(fin de nivel)
cargar proximo nivel (con esta misma estructura mas o menos)
break;
end
signal(s_kill,idpersonaje);
End

procces personaje()
Private ....
Begin
idmovi=movimiento();
idmagia=magia();
Loop
frame;
if (personaje palma)
break;
end
End
signal(s_kill,idmovi);
signal(s_kill,idmagia);
End

Procces movimiento()
//Aqui es donde meteria toda la movida de la pulsacion de teclas
End

Procces magia()
//aqui meteria lo de que si pulsas tal tecla pues haces la magia
End

Algo asi haria yo. Descomponiendo el programa en bastantes procesos, de esta forma si algo esta mal te sera mas facil localizarlo y cambiarlo.
Si tienes mas dudas pregunta y si puedo te las intentare responder y sino se pues seguro que hay alguien que lo sabe. Venga hasta luego y animo.

Raltark
10/02/2005, 15:11
Creo q lo he pillado, hare pruebas y si me sale alguna duda os cuento. Asias a los dos ^^

takushi
12/02/2005, 06:06
sobre lo del timer :

puse que al comenzar el juego saliese arriba del todo un texto con el valor de timer[0] y cuando aparecia el jeugo en la pantalla ese contador ya iba por mas de 300 , supogno que por alguna movida del fenix ahi un retardo de cuando empieza el programa a cuado se empieza a mostrar (?)

chipan
12/02/2005, 14:14
si que lo hay, por eso insisto en que no useis el timer.