2013-06-06 2 views
0

У меня есть простая игровая петля внутри метода run(). Класс реализует Runnable. Я просто хочу создать простой код времени, чтобы отслеживать время воспроизведения проигрывателя. Скажем, я хочу закончить игру через две минуты.Время внутри run() метод

Я не уверен, что я это делаю правильно, потому что время, которое я получаю на экране, не секунды, это формат времени long, например 1370502588. Что я делаю неправильно?

Вот часть кода внутри run() метода:

// Game loop --------------------------------------- 
@Override 
public void run() { 
// TODO Auto-generated method stub 

// Time 
long startGameTime = 0; 
long milliSeconds; 
int seconds; 

while (gameRunning) { 
    if (!surfaceHolder.getSurface().isValid()) 
    continue; 

    try { 
    milliSeconds = System.currentTimeMillis() - startGameTime; 
    seconds = (int) (milliSeconds/1000); 
    if (seconds > 120) 
     // Game over 
     canvas = surfaceHolder.lockCanvas(); 
     ... 

EDIT: LogCat

06-06 07:27:06.831: E/Trace(864): error opening trace file: No such file or directory (2) 
06-06 07:27:07.601: D/libEGL(864): loaded /system/lib/egl/libEGL_emulation.so 
06-06 07:27:07.611: D/(864): HostConnection::get() New Host Connection established 0x2a142400, tid 864 
06-06 07:27:07.721: D/libEGL(864): loaded /system/lib/egl/libGLESv1_CM_emulation.so 
06-06 07:27:07.721: D/libEGL(864): loaded /system/lib/egl/libGLESv2_emulation.so 
06-06 07:27:07.731: D/dalvikvm(864): GC_CONCURRENT freed 232K, 10% free 7430K/8199K, paused 99ms+117ms, total 354ms 
06-06 07:27:07.801: W/EGL_emulation(864): eglSurfaceAttrib not implemented 
06-06 07:27:07.821: D/OpenGLRenderer(864): Enabling debug mode 0 
06-06 07:27:08.121: I/Choreographer(864): Skipped 35 frames! The application may be doing too much work on its main thread. 
06-06 07:27:08.201: W/dalvikvm(864): threadid=12: thread exiting with uncaught exception (group=0x40a13300) 
06-06 07:27:08.211: E/AndroidRuntime(864): FATAL EXCEPTION: Thread-88 
06-06 07:27:08.211: E/AndroidRuntime(864): java.lang.IllegalArgumentException 
06-06 07:27:08.211: E/AndroidRuntime(864): at android.view.Surface.unlockCanvasAndPost(Native Method) 
06-06 07:27:08.211: E/AndroidRuntime(864): at android.view.SurfaceView$4.unlockCanvasAndPost(SurfaceView.java:785) 
06-06 07:27:08.211: E/AndroidRuntime(864): at se.test.game.GameLoop.run(GameLoop.java:269) 
06-06 07:27:08.211: E/AndroidRuntime(864): at java.lang.Thread.run(Thread.java:856) 
+0

Можете ли вы разместить свой логарифм ?. вы обновляете ui из timertask? – Raghunandan

ответ

4

Вместо

long startGameTime = 0; 

сделать

long startGameTime = System.currentTimeMillis(); 

тогда, эта линия у вас уже есть намного больше смысла:

milliSeconds = System.currentTimeMillis() - startGameTime; 

В вашей версии, вы вычитание 0 из текущего времени, которое означало бы пользователь играет с 1 января 1970 года. В моей версии вы вычитаете реальное время начала с текущего времени, и результатом является промежуток времени между этими двумя моментами.

+0

1: 0, вы избили меня сейчас :) +1 – Andremoniy

+0

@Andremoniy: теперь мы даже;) – jlordo

+0

ops, извините, конечно, это 1: 1 :) – Andremoniy

0

startGameTime sis всегда 0, потому что он локален для запуска() и никогда не обновляется.