2012-04-25 13 views
0

私はAndroidで小さなゲームを開発していますが、私は質問があります。私はメインのゲームループをSurfaceViewから呼び出されるスレッドにしたいが、このスレッドから別のクラスのメソッドを呼び出すたびに、「予期せず停止した」メッセージが表示される。より明確にするアップデート用の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()。前に言及したエラーを示してください。私はそのクラスとは異なる方法を試してみましたが、それらのすべてが私に同じエラーを与えます。

ご協力いただければ幸いです。

+0

logcatもよく投稿してください – Akhil

答えて

1

私は実際にあなたが提案し、悪い考えではありませんが、私のコードでの問題は、私は本当にGrubberオブジェクトを作成したことがないということであったものをテストしています(私は= new Grubber();一部を欠場)。

おそらく、ここ数週間で私がやった膨大な量のコード作成とテストに関連した間違いでしょう。それは残念です。とにかく私はメインゲームのループとして、私がhereを読んだことに応じて表面ビューのキャンバスを更新するために作成されたスレッドを使用するつもりです。

1

私の推測が正しい場合は、UIスレッドを直接更新しようとしています。メインスレッド以外のスレッドからUIメソッドを呼び出すことはできません。試してみてください:

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

       grub.updateGrubber(); 
       }  }; 
       this.post(action); 
instead of your `grub.updateGrubber();` line. 
関連する問題