Timers

Started by Phreak, October 06, 2007, 12:42:34 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Phreak

Bueno, tengo este problema desde que empece con fenix y estaria bueno (para mi :P) que se solucione en bennu.
El tema es este, se tienen 10 timer? y al usar mucho los times en diferentes procesos, a veces 2 procesos usan el mismo timer y se interrumpen entre ellos...
Estaria bueno poder hacer algo asi:

process t();
private
  timer timer1;
begin
  timer1=0;
  while(timer1<200)
    ...
  end
end

No se que les parece, pero yo lo veo mas practico... y tambien seria facil declarar un timer global para usar desde mas de un proceso...

Saludos

Drumpi

Bueno, no se, no suelo usar los timers, mas que nada porque no se sincronizan con el código y (quizás) dependa de que el sistema receptor del juego disponga de reloj o de algo para calcular el tiempo transcurrido.
Pero como sugerencia no está mal: en lugar de tenerlos predefinidos, que sean objetos, como los gráficos o los textos.

Una vez me dijeron que no es bueno ponerle límites a los programadores, aunque eso siempre me lo creí a medias, porque en ocasiones no se usan todos los recursos y es más fácil para el diseñador del lenguaje, pero claro, depende del uso que se le vaya a dar.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Phreak

No seria dificil hacerlo desde bennu ... pero igual estaria bueno que seria parte del mismo

SplinterGU

Gente, que raro que Uds. 2 digan esto... hace tiempo se implemento la funcion gettimer()... caramba...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Phreak

jajaja, retiro lo dicho ... menos mal que me entere, me estan volviendo loko los timers

Kel

Anda y que no dimos la brasa con el tema en divsite  ;D

La momia que fuma

(Como funciona gettimer()? no he encontrado información :P)

Phreak, otra cosa que se me ocurre que puedes hacer es algo así:

dos variables, por ejemplo: mytimer y correcion

Cuando quieras un timer (uno falsillo, ya que sera mytimer XD) a 0, hacer correccion=timer[0]; (Suponiendo que timer[0] no lo vayas a tocar para nada durante el programa)

Luego puedes usar mytimer como un timer normal con mytimer=timer[0]-correccion;

No se si me explico bien :P

Phreak

Si, entiendo , yo estaba pensando en hacer un par de funciones a mi gusto para los timers..
y seguro tengo que hacer algo parecido a eso

Kel

#8
Es algo parecido a lo que se hace para fijar la velocidad en maquinas menos potentes. Mas o menos como lo que dice momia.

El pseudocodigo es algo asi:

-Tomamos el tiempo del timer de sistema en una variable(con gettimer p.e.)
llamada timeaux (auxiliar) que almacena el tiempo en el momento de asignarse.

-creamos otra variable, tiempoactual=(gettimer()-timeaux)

-ahora, si loque queremos es un espacio de frames por segundo, podemos hacer:

tiempoactual*(factor) siendo factor=0.001, factor multiplicante para convertir de milisegundos a segundos(es lo mismo que dividir por 1000).


Y con eso y algunas comprobaciones con tiempoactual de si han pasado X segundos, dependiendo de lo que quieras ya tendrias codigo para un timer que se ajusta a frames por segundo...
No se si es lo que buscabas pero al menos espero que te sirva.


Kel

#9
como estoy aburrido me he puesto a ello. hecho en fenix 0.92a XDDD no me acordaba que en bennu es igual, probado en bennu y fenix:



program timers;
global
float timeaux;
float tiempoactual;
end

begin
set_mode(800, 600, 32);
//set_fps(30, 1);
timeaux=timer[0];
loop
delete_text(0);
tiempoactual=(timer[0]-timeaux)*(0.01);

write(0,100,100,0,"tiempo en segundos");
write_var(0,100,120,0,tiempoactual);
if(key(_esc)) exit(0); end
frame;
end

end



prueba a descomentar el setfps, aunque a mi me va igual.

el codigo no es perfecto, pero al menos te haces una idea. creo que gettimer internamente ya convierte a segundos... de todas maneras he usado timer[0] en centisegundos porque gettimer no viene en ningun sitio la info, sorry.

Espero que te sea de ayuda.

Phreak

Muchas gracias! :)

SplinterGU

gettimer viene en el NEWS...

PD: Esta vez, no voy a decir que el NEWS esta para leerlo... XD
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Kel

#13
ah, gracias Splinter, uno siempre se olvida de mirar en el news.

edit:

Vale, probado y funcionando exactamente igual con get_timer cambiar las lineas que lo  usan a:

timeaux=get_timer();
tiempoactual=(get_timer()-timeaux)*(0.001);

Nota: ahora si es correcto el uso de segundos, como debe ser, pues gettimer devuelve milisegundos. si cambias los float a int, ya no veras los molestos decimales aunque lo deje asi porque podria servir para testear.