我即将完成我的Simon说话游戏,但我仍有一个关键问题。
我的按钮显示给播放器后,我必须等待(根据级别,例如,如果向用户显示5个按钮,我必须等待用户点击5个按钮)。我在互联网上搜索过,但唯一的答案是"你无法冻结android应用程序......等等等等等等等等。
这是我的代码:
public boolean playerTurn(){
//Enable buttons
buttonUp.setClickable(true);
buttonDown.setClickable(true);
buttonRight.setClickable(true);
buttonLeft.setClickable(true);
/*
Wait for a button clicks depends on the level, but HOW?
e.g, if the level is 5, I have to wait for 5 button clicks
and after it, I can continue to run the code
*/
/*Check if the user typed the correct order
*If pressed the correct order
*return true;
*else
*return false
*/
}
答案 0 :(得分:3)
对于每个按钮,执行以下操作:
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Perform action on click
buttonsPressedCount++;
if (buttonsPressedCount >= 5) {
// Do whatever you wanted to do
}
}
});
通过这种方式,每个按钮都会监听点击并更新全局计数器。最后,当您的全局计数器大于5时,您可以继续。该应用程序永远不会“暂停”,它只会在单击五个按钮时在下一部分移动。
答案 1 :(得分:1)
我不在电脑附近,所以没有代码示例(稍后会发布)。基本上,您可以设置一个班级计数器。为每个按钮提供OnClickListener - 可以相同也可以不同。在监听器中递增计数器并检查它是否达到5。如果是,请检查模式并清除计数器。
答案 2 :(得分:0)
您可以使用RxBindings来实现此目的。将点击转换为事件流,并向其添加订阅者,这将对点击事件作出反应。
这是你如何做到的,
RxView.clicks(button)
.take(5)
.subscribe(aVoid ->
{
// Do your stuff
});
这会为点击事件添加订阅者,并且只会占用前五个事件。
希望它有所帮助。