1

Simon Says for Android のようなものを実装しようとしています。これは私が持っているコードです:

for(int i = 1; i <= sequence.size(); i++){
handler.postDelayed(new Runnable(){
                    public void run(){
                        if (sequence.peek() == 1){
                            green.setPressed(true);
                            handler.postDelayed(new Runnable(){
                                public void run(){
                                    green.setPressed(false);                
                                    }
                            }, 1000);
                        }
                        else if (sequence.peek() == 2){
                            red.setPressed(true);
                            handler.postDelayed(new Runnable(){
                                public void run(){
                                    red.setPressed(false);               
                                    }
                            }, 1000);
                        }
                        else if (sequence.peek() == 3){
                            yellow.setPressed(true);
                            handler.postDelayed(new Runnable(){
                                public void run(){
                                    yellow.setPressed(false);               
                                    }
                            }, 1000);
                        }
                        else if (sequence.peek() == 3){
                            blue.setPressed(true);
                            handler.postDelayed(new Runnable(){
                                public void run(){
                                    blue.setPressed(false);             
                                    }
                            }, 1000);
                        }
                        int myNum = sequence.peek();
                        sequence.poll();
                        sequence.add(myNum);
                    }
                }, 1000);
            }
}

基本的に、ボタンの色を点滅させるパターンを保持するキュー (シーケンス) があります。(setPressed(true) は setPressed(false) とは異なる色です) 最初に呼び出されたとき、色を変更する必要があるボタンは 1 つだけなので、正常に動作します。2 回目に呼び出されると、2 つのボタンの色が変わるはずです。現在、私のコードは両方同時に点灯します。最初に 1 つのボタンの色を点滅させ、それを終了してから 2 番目のボタンの色を点滅させるにはどうすればよいですか? 私は何百万もの異なることを試しましたが、これはまだ私が得た最も近いものです.

4

1 に答える 1

0

コードをテストしていなくても、 for ループが原因だと思います。基本的に、すべてのシーケンスを実行し、1000 ミリ秒の遅延でランナブルをハンドラーにポストします。

つまり、i は 0 です。sequence1 は 1000 ミリ秒で開始されます。i は 1 です。sequence1 も 1000 ミリ秒で開始されます。私は2です....

これはハンドラー内にあるため、for ループの実行時間には影響しません。つまり、すべての反復が相互に直接渡され、その結果、すべてのランナブルが「ほぼ」同時に実行されます。

遅延を (i+1)*1000 に設定して、「自分の時間」になったときに各「ボタン」が (1 秒間) アクティブになるようにしてください。

于 2012-05-31T08:58:46.257 に答える