1

我正在尝试为 Android 实现类似 Simon Says 之类的东西。这是我的代码:

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) 颜色不同) 第一次调用时,只有一个按钮需要更改颜色,因此可以正常工作。第二次调用时,2 个按钮颜色应该改变。我现在的代码将同时点亮两者。我如何使它首先闪烁一种按钮颜色,完成它,然后闪烁第二种按钮颜色?我已经尝试了一百万种不同的东西,这仍然是我得到的最接近的。

4

1 回答 1

0

我的猜测是,在没有测试任何代码的情况下,这是因为你的 for 循环。基本上,它遍历所有序列,并以 1000 毫秒的延迟将可运行的内容发布到处理程序。

这意味着: i 为 0:sequence1 以 1000 毫秒开始;i 为 1:sequence1 也以 1000 毫秒开始;我是 2....

因为它在处理程序中,所以它不会影响 for 循环的运行时,这意味着所有迭代都直接在彼此之后传递,这导致每个 runnable 都“几乎”同时执行。

只需尝试将延迟设置为 (i+1)*1000,这样每个“按钮”都会在“他的时间”时被激活(一秒钟)。

于 2012-05-31T08:58:46.257 回答