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

私は実際にあなたが提案したことをテストしましたが、それは悪い考えではありませんが、私のコードの問題は、実際にGrubberオブジェクトを作成したことがないことでした (私はその部分が恋しい= new Grubber();です)。

おそらく、過去数週間に行った膨大な量のコードの記述とテストに関連する間違いです。申し訳ありません。とにかく、ここで読んだ内容に従って、サーフェス ビューのキャンバスを更新するために作成されたスレッドをメイン ゲーム ループとして使用します。

于 2012-04-28T20:49:07.817 に答える
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 に答える