2013-12-10 62 views
0

我试图在渲染类中创建一个倒计时器,一旦倒计时完成,它将加载主菜单。游戏渲染类/游戏循环内的Android倒计时时间

public void startTimer() 
{ 
    new CountDownTimer(30000, 1000) { 

     public void onTick(long millisUntilFinished) 
     { 

     } 

     public void onFinish() 
     { 
      Toast.makeText(Game.context, "TIMER ENDED", Toast.LENGTH_SHORT).show(); 
      // put score into DB 
      // load up a different screen 
     } 
     }.start(); 
} 

我尝试使用上面显示的那个,但是,当我使用它时,我的游戏意外关闭。这是引起游戏关闭的计时器(而不是吐司)。

任何人都知道一种方式,我可以实现这一点或修复上面给出的例子?

(定时器功能被置于 'onSurfaceCreated')

下面是从logcat的信息:

12-10 16:41:45.796:E/AndroidRuntime(5336):致命异常: GLThread 284 12-10 16:41:45.796:E/AndroidRuntime(5336):进程:com.damienrenner.spacefruitshooter,PID:5336

12-10 16:41:45.796:E/AndroidRuntime(5336): java.lang.RuntimeException:无法在未调用Looper.prepare()的线程中创建处理程序

12-10 16:41:45.796:E/AndroidRuntime(5336):在android.os.Handler(Handler.java:200)

12-10 16:41:45.796:E/AndroidRuntime(5336 ):at android.os.Handler。(Handler.java:114)

12-10 16:41:45.796:E/AndroidRuntime(5336):at android.os.CountDownTimer $ 1。(CountDownTimer.java:109 )

12-10 16:41:45.796:E/AndroidRuntime(5336):在android.os.CountDownTimer(CountDownTimer.java:109)

12-10 16:41:45.796:E/AndroidRuntime(5336):在com.damienrenner.spacefruitshooter。 GRenderer $ 1(GRenderer.java:274)

12-10 16:41:45.796:E/AndroidRuntime(5336):在com.damienrenner.spacefruitshooter.GRenderer.startTimer(GRenderer.java:274)

12-10 16:41:45.796:E/AndroidRuntime(5336):在com.damienrenner.spacefruitshooter.GRenderer.onSurfaceCreated(GRenderer.java:331)

12-10 16:41:45.796:E/AndroidRuntime (5336):at android.opengl.GLSurfaceView $ GLThread.guardedRun(GLSurfaceView.java:1501)

12-10 16:41:45.796:E/AndroidRuntime(5336):at android.opengl.GLSurfaceView $ GLThread。运行(GLSurfaceView .java:1240)

+0

为什么不直接使用new Handler()。postDelayed? – cYrixmorten

+0

请提供crashlog。如果我不得不猜测,我会说,你需要从主线程实例化它,如果我正确地回忆onSurfaceCreated是不是在主线程,因为Surfaceview呈现在一个单独的线程 –

+0

我已经添加logcat信息 – RennerStudios

回答

0
public void startTimer() 
{ 
    new CountDownTimer(30000, 1000) { 
     public void onTick(long millisUntilFinished) 
     { 

     } 

     public void onFinish() 
     { 
      runOnUiThread(new Runnable() { 
       public void run() 
       { 
        Toast.makeText(Game.context, "TIMER ENDED", Toast.LENGTH_SHORT).show(); 
        // put score into DB 
        // load up a different screen 
       } 
      ); 
     } 
    }.start(); 
} 

当您不在UI线程中时想要显示UI消息。使用上面的代码来解决这个问题。

+0

我已经改变了我的代码但是,我在RunOnUIThread上收到以下错误: 未建立新的CountDownTimer(){} runOnUiThread(new Runnable(){})方法,它暗示我创建了一个称为runOnUiThread的函数 – RennerStudios