Bennu Game Development

Foros en Español => Sugerencias => Topic started by: Phreak on October 06, 2007, 12:42:34 AM

Title: Timers
Post by: Phreak on October 06, 2007, 12:42:34 AM
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
Title: Re: Timers
Post by: Drumpi on October 06, 2007, 06:44:09 PM
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.
Title: Re: Timers
Post by: Phreak on October 06, 2007, 07:38:48 PM
No seria dificil hacerlo desde bennu ... pero igual estaria bueno que seria parte del mismo
Title: Re: Timers
Post by: SplinterGU on October 07, 2007, 03:27:41 AM
Gente, que raro que Uds. 2 digan esto... hace tiempo se implemento la funcion gettimer()... caramba...
Title: Re: Timers
Post by: Phreak on October 07, 2007, 05:17:49 AM
jajaja, retiro lo dicho ... menos mal que me entere, me estan volviendo loko los timers
Title: Re: Timers
Post by: Kel on October 07, 2007, 11:18:40 AM
Anda y que no dimos la brasa con el tema en divsite  ;D
Title: Re: Timers
Post by: La momia que fuma on October 07, 2007, 12:51:07 PM
(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
Title: Re: Timers
Post by: Phreak on October 07, 2007, 04:18:20 PM
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
Title: Re: Timers
Post by: Kel on October 07, 2007, 04:37:13 PM
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.

Title: Re: Timers
Post by: Kel on October 07, 2007, 05:41:28 PM
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.
Title: Re: Timers
Post by: Phreak on October 08, 2007, 02:09:50 AM
Muchas gracias! :)
Title: Re: Timers
Post by: SplinterGU on October 08, 2007, 08:42:34 PM
gettimer viene en el NEWS...

PD: Esta vez, no voy a decir que el NEWS esta para leerlo... XD
Title: Re: Timers
Post by: SplinterGU on October 08, 2007, 08:44:13 PM
es get_timer()
Title: Re: Timers
Post by: Kel on October 08, 2007, 10:44:14 PM
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.