0

我正在Android上开发一个小游戏,我有一个问题。我希望我的主游戏循环成为从 SurfaceView 调用的线程,但每次我想从该线程调用另一个类的方法时,我都会收到“意外停止”消息。

为了更清楚:

@Override
public void run() { //Game Loop
   Canvas canvas = null;
   while (mRun) {               
      canvas = mHolder.lockCanvas();                
      if (canvas != null) {
         grub.updateGrubber();   //here I want to update state.                 
         mPanel.doDraw(canvas);
         mHolder.unlockCanvasAndPost(canvas);                   
      }
   }
}

行 grub.updateGrubber(); 显示我之前提到的错误。我尝试了该类的不同方法,所有方法都给了我同样的错误。

任何帮助将不胜感激。

4

2 回答 2

1

如果我的猜测是正确的,那么您正在尝试直接更新 UI 线程。您不能从主线程以外的线程调用 UI 方法。尝试:

Runnable action = new Runnable() {  
            @Override 
            public void run() {    

                grub.updateGrubber();  
                }     };
                this.post(action);
 instead of your `grub.updateGrubber();`  line.
于 2012-04-25T05:05:43.720 回答
1

我实际上已经测试了你的建议,这不是一个坏主意,但我的代码中的问题是我从未真正创建过一个Grubber对象(我错过了这= new Grubber();部分)。

可能是与我在过去几周内完成的大量代码编写和测试有关的错误,对此感到抱歉。无论如何,我将使用创建的线程作为主游戏循环,以根据我在这里阅读的内容更新表面视图中的画布。

于 2012-04-28T20:49:07.817 回答