0

私はアンドロイドとJavaで始めています。

サイモンゲームを作ろうとしていますが、いくつか問題があります。

これは、simon ボタンのシーケンスまたはプレーヤーが押したボタンを表示するために書きました。

    if (but_num == 1) {
        ib1.setImageResource(R.drawable.bullet_square_green);
        MediaPlayer sound = MediaPlayer.create(this, R.raw.tone_green);
        sound.start();
        for (int x = 1; x < 10000000; x++) { };
        ib1.setImageResource(R.drawable.bullet_ball_green);
    } else if (but_num == 2) {

各画像ボタンの画像を変更し、サウンドを再生し、({} の間) しばらく待ってから、画像を再度変更する必要があります....

しかし、それはうまくいきません...サウンドを再生し、実際には bullet_square_xxx によって画像を変更しますが、画像の変更を目で見ることはできません。変更は、画像が bullet_ball_xxx によって再度変更されない場合にのみ表示されます。 -(

Java とは異なるコードを書いたので、これは私のせいだと思います。

ありがとう、そして私の英語でごめんなさい!

4

3 に答える 3

0

これはおそらく、イベントディスパッチスレッドの遅延と、空のループが静的であるためコンパイラによって無視される可能性があるという事実が原因であり、プログラムに影響を与えないと簡単に予測できます。私の提案は、最初にGUIで再ペイント/更新を強制し、Thread.sleepを使用することです。このようなもの:

if (but_num == 1) {
    ib1.setImageResource(R.drawable.bullet_square_green);
    updateUI(); // if you are somewhere in a class extending any Frame/Panel
    //If you are in other class use mainFrame.repaint(); 
    MediaPlayer sound = MediaPlayer.create(this, R.raw.tone_green);
    sound.start();
    try{
        Trhead.sleep(3000);
    } catch (InterruptedException e) {}
    ib1.setImageResource(R.drawable.bullet_ball_green);
    updateUI(); //only if this effect is delayed too
} else if (but_num == 2) {
于 2012-07-27T23:27:49.220 に答える
0

わかりました....遅延がコードの問題だと思います。今日では、数ミリ秒で10000000までカウントできる高速プロセッサが利用できるので、私の場合はそうです。したがって、古い学校のforループを使用して遅延を導入する代わりに、

Thread.sleep(5000);

これにより5秒の遅延が発生します。引数は、ミリ秒単位の時間です。

于 2012-07-27T23:31:57.653 に答える
0

遅延の導入について話している別のスレッドがあります: How to pause / sleep thread or process in Android?

これを試すことができます[そのスレッドからコピーして貼り付けました]:

 if (but_num == 1) {
    ib1.setImageResource(R.drawable.bullet_square_green);
    MediaPlayer sound = MediaPlayer.create(this, R.raw.tone_green);
    sound.start();

    // SLEEP 2 SECONDS HERE ...
Handler handler = new Handler(); 
handler.postDelayed(new Runnable() { 
     public void run() { 
         ib1.setImageResource(R.drawable.bullet_ball_green);
     } 
}, 2000);


} else if (but_num == 2) {
于 2012-07-28T05:40:15.143 に答える