2017-02-24 15 views
1

私はテトリスアプリを開発中で、テトリスの落ちをアニメーション化するコマンドはThread.sleepです。しかしそれはUIと競合します。だから私はこのようにrunOnUiThread()を試した:whileループでAndroid-UIを更新する最良の方法

while (gameover == false) { 
    tetriminoSettled = false; 
    try { 
     Thread.sleep(1000 - (counter * 3)); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
    runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      Random ran = new Random(); 
      int x = ran.nextInt(7) + 1; 
      addTetrimino(createTetrimino(x)); //the UI operation 
      gridView.invalidate(); 
     } 
    }); 

しかし、UIはゲームが終了した後にのみ更新されます。 AsyncTaskは良いアプローチだと思いますか? テトリミノを左右にシフトするために、後でUIスレッドを追加する必要があることに注意してください。 ありがとう!

答えて

1

あなたが投稿したコードから判断すると、あなたはゲームにグリッドビューを使用しているようです。可能ですが、努力する価値はありません。この短いtutorialに示すようにSurfaceViewを使用してください。描画サイクルごとに好きなものを更新できるonDrawコールバックがあります。楽しんで、コーディングゲームは本当に難しいです:)

+0

あなたは私を捕まえました!* g *テトリスには当てはまるかもしれないと思っていましたが、もっと良い方法があると確信していました。私はチュートリアルを見ていきます。おかげで – user1734984

+0

それはテトリスに適用することができますが、自分でゲームで複数のスレッドを処理したくない。その恐怖。 – Cottontree

0

try gridView.postInvalidate();

関連する問題