2013-06-06 3 views
0

run() 메서드 내에 간단한 게임 루프가 있습니다. 수업은 Runnable을 구현하고 있습니다. 저는 플레이어가 플레이 한 시간을 추적하기위한 간단한 타이밍 코드를 만들고 싶습니다. 2 분 후에 게임을 끝내고 싶다고합시다.run() 메서드 내부 시간

화면에 표시되는 시간이 초가 아니기 때문에이 작업을 수행 할 것인지 확신 할 수 없습니다. long 시간 형식 (예 : 1370502588)입니다. 무엇이 잘못 되었나요?

// 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 : 여기서

run()있어서 내부 코드의 일부 로그 캣

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

logcat?을 게시 할 수 있습니까? timertask에서 UI를 업데이트하고 있습니까? – Raghunandan

답변

4

대신

long startGameTime = 0; 

,321 현재 시간의

버전에서
milliSeconds = System.currentTimeMillis() - startGameTime; 

, 당신이 차감되는 0 월 (1), 1970 년 이후 연주 된 사용자를 의미합니다 : 0

다음, 당신은 이미이 라인은 훨씬 더 의미가 있습니다. 내 버전에서는 현재 시간에서 실제 시작 시간을 뺀 결과가이 두 순간 사이의 시간 간격입니다.

+0

1 : 0, 당신은 지금 나를 때려 :) +1 – Andremoniy

+0

@Andremoniy : 이제 우리는 심지어;) – jlordo

+0

죄송합니다, 물론 1시 1 분입니다 :) – Andremoniy

0

startGameTime은 항상 로컬 (0)이며 업데이트되지 않았기 때문에 0입니다.