我是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;
}
答案 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);将按钮添加到等待列表中。您还需要在新序列之前清除列表(或检查它是否为空并等待按下另一个按钮)
我假设您在这里使用整数来选择按钮(这似乎是您的代码中的情况)