2012-02-03 10 views
0

私は15パズル(http://en.wikipedia.org/wiki/Fifteen_puzzle)ゲームを作っています。私はユーザーが背景イメージを選択するためのアクティビティを持っています。画像を拡大して切り抜くためにその画像を新しいアクティビティに渡します。私のUIスレッドが正しくスリープ状態にならなかった

は今、私はそれは、私が使用しているシャッフルう3秒間最初のユーザーに解決策を示したいと思います。このようなコード:私のスタートで、その後

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    //...skip the code that gets the image and scales it 

    start(); 
} 

()funcion:

public void start() { 

    //the createPuzzle function would create all the Views(tiles) 
    //and add them to the root LinearLayout using addView() function 
    createPuzzle(game.getBoardConfig(), dimension); 

    //i was trying to sleep here 

    shuffle(); 
} 

私が使用:

try { 
    Thread.sleep(3000); 
} catch (InterruptedException e) {} 

か:

SystemClock.sleep(3000); 

どちらも正しく動作していませんが、画像を選択した直後にスレッドがすべて一時停止し、一時停止したときに新しいアクティビティと作成したタイルは表示されません。スレッドが再開すると、すでにシャッフルされたパズルが表示されていました。

私はかなり長い間ドキュメントを見てきましたが、私のコードに何が間違っているか把握できませんでした。

答えて

7

UIスレッドがスリープ状態にならないようにします。これは、UIスレッド全体が「いいえ」ではないためです。代わりに、ハンドラを使用して遅延付きの実行可能ファイルを投稿してください...

Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() { 
     public void run() { 
       shuffle(); 
     } 
    }, 3000); 
+0

ありがとうございます!シャッフルをスケジュールする前にタイマーを使用しようとしましたが、うまくいきません。私はこれらのオブジェクトのより良い理解を得るべきだと思う。とにかくありがとうございました! – QQending

+1

@QQending、大歓迎です。内部のいくつかの説明については私のblogpostをチェックしてください:http://levinotik.com/2012/01/loopers-handlers-runtimeexceptions-explained/ – LuxuryMode

関連する問題