游戏渲染类/游戏循环内的Android倒计时时间

时间:2013-12-10 15:39:22

标签: android opengl-es

我正在尝试在渲染类中创建倒计时器,倒计时器完成后将加载主菜单。

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):在android.os.Handler。(Handler.java:114)

12-10 16:41:45.796:E / AndroidRuntime(5336):在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):at com.damienrenner.spacefruitshooter.GRenderer $ 1.(GRenderer.java:274)

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

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

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

12-10 16:41:45.796:E / AndroidRuntime(5336):在android.opengl.GLSurfaceView $ GLThread.run(GLSurfaceView.java:1240)

1 个答案:

答案 0 :(得分: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消息。使用上面的代码来解决这个问题。