Autor Tema: Timers  (Leído 2932 veces)

Phreak

  • Newbie
  • *
  • Mensajes: 27
  • Karma: 6
Timers
« en: Octubre 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

Drumpi

  • Hero Member
  • *****
  • Mensajes: 6269
  • Karma: 159
  • Odio el periodo "entre proyectos"
    • La web de Drumpi
Re: Timers
« Respuesta #1 en: Octubre 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.
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

  • Newbie
  • *
  • Mensajes: 27
  • Karma: 6
Re: Timers
« Respuesta #2 en: Octubre 06, 2007, 07:38:48 pm »
No seria dificil hacerlo desde bennu ... pero igual estaria bueno que seria parte del mismo

SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12744
  • Karma: 375
Re: Timers
« Respuesta #3 en: Octubre 07, 2007, 03:27:41 am »
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

  • Newbie
  • *
  • Mensajes: 27
  • Karma: 6
Re: Timers
« Respuesta #4 en: Octubre 07, 2007, 05:17:49 am »
jajaja, retiro lo dicho ... menos mal que me entere, me estan volviendo loko los timers

Kel

  • Jr. Member
  • **
  • Mensajes: 77
  • Karma: 1
Re: Timers
« Respuesta #5 en: Octubre 07, 2007, 11:18:40 am »
Anda y que no dimos la brasa con el tema en divsite  ;D

La momia que fuma

  • Hero Member
  • *****
  • Mensajes: 612
  • Karma: 25
Re: Timers
« Respuesta #6 en: Octubre 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

Phreak

  • Newbie
  • *
  • Mensajes: 27
  • Karma: 6
Re: Timers
« Respuesta #7 en: Octubre 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

Kel

  • Jr. Member
  • **
  • Mensajes: 77
  • Karma: 1
Re: Timers
« Respuesta #8 en: Octubre 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.

« última modificación: Octubre 07, 2007, 04:50:31 pm por Kel »

Kel

  • Jr. Member
  • **
  • Mensajes: 77
  • Karma: 1
Re: Timers
« Respuesta #9 en: Octubre 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:

Código: [Seleccionar]

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.
« última modificación: Octubre 07, 2007, 06:02:49 pm por Kel »

Phreak

  • Newbie
  • *
  • Mensajes: 27
  • Karma: 6
Re: Timers
« Respuesta #10 en: Octubre 08, 2007, 02:09:50 am »
Muchas gracias! :)

SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12744
  • Karma: 375
Re: Timers
« Respuesta #11 en: Octubre 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
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12744
  • Karma: 375
Re: Timers
« Respuesta #12 en: Octubre 08, 2007, 08:44:13 pm »
es get_timer()
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Kel

  • Jr. Member
  • **
  • Mensajes: 77
  • Karma: 1
Re: Timers
« Respuesta #13 en: Octubre 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.
« última modificación: Octubre 08, 2007, 10:50:36 pm por Kel »