如何在循环中暂停

时间:2014-07-06 20:20:33

标签: android

我是Android开发的新手,我正在尝试制作游戏。我有一个3x3网格的图像按钮和一个播放按钮。当用户单击播放按钮时,许多按钮应亮起然后关闭。这很好。现在我想让按钮点亮并逐个关闭。因此,如果comp_blocks包含[1,3,2]按钮1会亮起,然后关闭,然后按钮3会亮起......等等。最好的方法是什么?我希望按钮保持点亮半秒钟。

编辑:要清楚,我希望每个人都能点亮并按一下按钮全部显示。按下按钮,显示1,关闭1,显示3,关闭3.下次用户按下按钮时,将显示一个新序列。

        //Create pattern in comp_blocks
        for(int i = 0; i < move_num+2; i++){
            comp_blocks.add(rand.nextInt(9) + 1);
        }

        //Display pattern
        ListIterator<Integer> itr = comp_blocks.listIterator();
        while (itr.hasNext()) {
            final Integer button_show = itr.next();
            switch (button_show){
                case 1:
                    button1.setBackgroundColor(getResources().getColor(R.color.garnet));
                    break;
                case 2:
                    button2.setBackgroundColor(getResources().getColor(R.color.garnet));
                    break;
                case 3:
                    button3.setBackgroundColor(getResources().getColor(R.color.garnet));
                    break;
                case 4:
                    button4.setBackgroundColor(getResources().getColor(R.color.garnet));
                    break;
                case 5:
                    button5.setBackgroundColor(getResources().getColor(R.color.garnet));
                    break;
                case 6:
                    button6.setBackgroundColor(getResources().getColor(R.color.garnet));
                    break;
                case 7:
                    button7.setBackgroundColor(getResources().getColor(R.color.garnet));
                    break;
                case 8:
                    button8.setBackgroundColor(getResources().getColor(R.color.garnet));
                    break;
                case 9:
                    button9.setBackgroundColor(getResources().getColor(R.color.garnet));
                    break;
            }

1 个答案:

答案 0 :(得分:1)

您可以像这样使用Runnable

final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
  @Override
  public void run() {
    //Do something after 100ms
  }
}, 100);

(代码取自How to call a method after a delay in Android

另一个解决方案是创建一个类,该类使用包含上次按下按钮的时间的变量扩展buttonview,并创建un update方法,检查时间限制是否已过时。 然后遍历调用update方法的按钮。 第二个选项对我来说似乎更安全,因为每次点击按钮都不会创建新任务。

编辑:

根据我的理解,你有一个这个游戏的主循环,在其中添加这样的东西:

Time now=new Time;
Time lastupdate=new Time;
while(yourcondition)/*this is your main loop*/
{
    /*your stuff*/

        now.setToNow();
        if(now.toMillis(false)>lastupdate.toMillis(false)+TimeToWaitInMilliSeconds)
        {
            if(!buttonstolit.isEmpty()) {
                resetTheButtons();
                lightThisButton(buttonstolit.get(0));
                buttonstolit.remove(0);
                lastupdate.setToNow();
            }
        }

}

其中buttonstolit被声明为List。

使用buttonstolit.add(TheButtonToLitNext);将按钮添加到等待列表中。您还需要在新序列之前清除列表(或检查它是否为空并等待按下另一个按钮)

我假设您在这里使用整数来选择按钮(这似乎是您的代码中的情况)