[JAVA] ¿Cómo uso Timers en Java?(J2ME)

Iniciado por zheo, 3 Enero 2005, 04:55 AM

0 Miembros y 1 Visitante están viendo este tema.

zheo

Bueno, estoy haciendo mi primer juego para J2ME, ya tengo hecha toda la interface -funcionando en el movil wink.gif -y me falta hacer el bucle principal del juego, usease, el juego jeje.
Ya tengo planificadas todas las estructuras de datos y algoritmos a usar.
El caso es que sólo me hace falta una cosa para hacer el juego: medir el tiempo.
Ésto es necesario para hacer bajar la ficha una casilla en determinados intervalos, y aquí llega mi duda.
En principio sé que tengo que hacer un objeto de la clase Timer, que será el contador de tiempo, y luego un objeto de la clase TimerTask e implementar su método Run, (ya que implementa el Interface Runnable), que será lo que se ejecute cada determinado lapso de tiempo.

El caso es que no se si lo he entendido bien, TimerTask actua como un Hilo de ejecución, y teniendo en cuenta que lo voy a utilizar dentro de otro hilo (el bucle del juego es otro hilo) no se si eso podría acarrearme problemas de sincronización.
¿Alguien sabe si esta es más o menos la manera correcta de hacerlo? ¿Conoceis algún otro método o forma mejor de hacerlo?

Un saludo y gracias anticipadas.
Sólo hay 10 tipos de personas: las que saben binario y las que no.

¿Quieres programar un videojuego? Si quieres unirte pulsa aqui

AnKeR

Buenas....

Yo no suelo utilizar la TimerTask, lo que hago es utilizar la clase Timer únicamente, asiciandole un delay, y un ActionListener, al que llama cuando el delay se acaba. -> Timer(int delay, ActionListener listener) ;     
Me parece una manera mas fácil que la del TimerTask, pero bueno luego puedes hacerlo como quieras.
Sobre los timers en java, pues que a veces dan errores, porque llevan un thread interno, y si paras el thread principal  en el que están pues siguen ejecutandose (el thread interno), pudiendo dar otros problemillas... (cosa que a mi me paso :S ).

Un ejemplo de la API de como funciona:

int delay = 1000; //milliseconds
  ActionListener taskPerformer = new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
          //...Perform a task...
      }
  };
  new Timer(delay, taskPerformer).start();

Pues eso, suerte con el juego.
Salu2o3

Slasher-K

Eso es lo que se llama race condition ;) y puede provocar resultados muy impredecibles y sobre todo dañinos.



A la reina de las profundidades que cuida los pasos de una sombra en la noche :*

zheo

Se me pasó este hilo, menos mal que Slasher Keeper lo reflotó :P

Bueno, al final lo acabé haciendo de la manera más tradicional:
System.CurrentTimeMillis() y calculando el tiempo transcurrido entre frames :P

El juego es funcinal, de hecho lo tengo en el movil y rula :P
Aunque quiero pulirlo un pocoy  lo presentaré en sociedad xD xD Es que estoy de exámenes :(
A ver si puedo poner unas capturas, pero ahora no tengo tiempo (lo tengo en el portatil y me voy en seguida)
Sólo hay 10 tipos de personas: las que saben binario y las que no.

¿Quieres programar un videojuego? Si quieres unirte pulsa aqui