JAVA Timer

stdstringclass
stdstringclass
  • Rejestracja:ponad 9 lat
  • Ostatnio:około 5 lat
  • Lokalizacja:Wielowymiar
  • Postów:36
0

Witam

Wiem, że jest w Java coś takiego jak TimerTask, ale chciałem się spytać jak to działa. Czy mam może do dyspozycji jakąś metodę "run" ? wewnątrz której wszystko jest odświeżane ileś x na sekundę - dzięki czemu mógłbym uzyskać ruch w grze ? Wiem, że takie coś miałem do dyspozycji w Delphi.

Lectre
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 6 lat
  • Lokalizacja:Warszawa
  • Postów:293
0

Osobiście nie tworzyłem czegoś takiego, ale wykorzystywałem już gotową implementację. Zerknij, może ci się przydać.

//Timer
https://github.com/nicolasgramlich/AndEngine/blob/GLES2/src/org/andengine/engine/handler/timer/TimerHandler.java

//LimitedFPSEngine, działa dokładnie tak jak opisałeś.
https://github.com/nicolasgramlich/AndEngine/blob/GLES2/src/org/andengine/engine/LimitedFPSEngine.java

edytowany 2x, ostatnio: Lectre
bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
0
Kopiuj
//tworzysz Timer
Timer timer = new Timer( );
//tworzysz zadanie
TimerTask task = new Zadanie();
//podajesz harmonogram wykonywania https://docs.oracle.com/javase/8/docs/api/java/util/Timer.html#schedule-java.util.TimerTask-long-long-
timer.schedule(task,2000,500);

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
stdstringclass
stdstringclass
  • Rejestracja:ponad 9 lat
  • Ostatnio:około 5 lat
  • Lokalizacja:Wielowymiar
  • Postów:36
0

Dziękuję za odpowiedzi. Pierwsza jest zbyt skomplikowana a mi potrzebny 1-metodowy przykład.

Bogdans - z tego co sprawdziłem pod linkiem, który podałeś to wywołujesz przeciążoną metodę schedule z parametrami long delay i long period.

Rozumiem, że to trwa tylko przez czas wyznaczony w long period - a ja chciałbym, żeby wszystko co znajduje się w tej metodzie było odświeżane ileś razy w sekundzie ciągle - przez cały czas działania programu.

bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
1

Źle rozumiesz, fragment dokumentacji:

Kopiuj
public void schedule(TimerTask task,long delay,long period)
...
    delay - delay in milliseconds before task is to be executed.
    period - time in milliseconds between successive task executions.

Jak chcesz np. uzyskać odświeżanie 1000 razy w czasie sekundy - bez początkowego opóźnienia, to

Kopiuj
timer.schedule(task,0,1);

Ogólnie, jeśli chcesz odświeżać k razy w ciągu sekundy, to

Kopiuj
timer.schedule(task,0,1000/k);

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
edytowany 2x, ostatnio: bogdans

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.