Android 如何暂停循环以等待按钮按下
我正在尝试创建一个基于回合的游戏,使用android的1v1战斗。我的基本游戏循环检查两名战士是否死亡,如果没有,然后检查谁是下一个。如果轮到玩家了,它应该等待点击攻击按钮。如果轮到计算机,它将执行随机攻击。我无法让程序等待用户输入。我试着在这里设置按钮侦听器,但没有成功。 [编辑]根据恢复整数确定要使用哪个字符。每次攻击都有一个恢复值(50-100),该值被添加到角色的恢复中。nextMove()方法检查哪个更接近0,并从两个字符中减去差值。这使得游戏需要更多的策略,因为你不会一回合只攻击一次 我该怎么做才能让游戏在这一点上暂停 这是密码Android 如何暂停循环以等待按钮按下,android,game-loop,Android,Game Loop,我正在尝试创建一个基于回合的游戏,使用android的1v1战斗。我的基本游戏循环检查两名战士是否死亡,如果没有,然后检查谁是下一个。如果轮到玩家了,它应该等待点击攻击按钮。如果轮到计算机,它将执行随机攻击。我无法让程序等待用户输入。我试着在这里设置按钮侦听器,但没有成功。 [编辑]根据恢复整数确定要使用哪个字符。每次攻击都有一个恢复值(50-100),该值被添加到角色的恢复中。nextMove()方法检查哪个更接近0,并从两个字符中减去差值。这使得游戏需要更多的策略,因为你不会一回合只攻击一次
public void battle(){
boolean playerGo;
while(!checkDead()){
playerGo=nextMove(); //returns true if its the players turn to go
if(playerGo){
//The game should wait here for the user input
moveButton1.setOnClickListener(this);
}
else{
randomMove(); //game automatically goes
}
}
}
SetOnClickListener()函数将仅在用户单击按钮时触发。因此,它不会等待\block直到用户输入。这是安卓系统的设计,你不能有一个阻塞窗口等待用户输入。相反,将您的设计更改为显示提示“现在是用户的移动”
通过这个循环,您可以将用户移动和计算机移动链接起来。当您的应用程序启动时,有一个线程可以运行所有内容,包括事件处理程序。在您完成设置并调用battle()之后,该线程将一直在循环中运行。它在循环中如此忙碌以至于它没有注意到有一个点击事件等待处理 有几个选择:
randomMove()
。在移动按钮1
的OnClickListener
中处理玩家的移动。那样的话,一切都会发生在事件上。总的来说,这会更简单,而且可能是正确的做法Runnable
,通过调用Handler.post
进行调度。第一行调用checkDead
,如果为true则返回。最后一行重新安排Runnable
。中间是while循环的主体。这样做的效果是循环体运行,然后事件处理程序得到一个回合,然后循环体运行,然后事件处理程序运行。这可能是个坏主意所以如果2。三,。都是坏主意,为什么要提?好的,2。我之所以这么说,是因为这是我对你实际提出的问题最接近的答案。我提到3。因为在某种意义上,您当前的代码是游戏逻辑的一个相当清晰的体现。您可以对其进行返工,使其在单独的线程中运行,而不是让nextMove()返回true,而是让nextMove()等待玩家移动(这将涉及信号量、互斥量或承诺)。但这将是一个明确的多线程程序,因此很难正确编写。我建议你不要在编程生涯的这个阶段尝试它——最有可能的结果是一个程序永远停止并等待,或者以一种极难诊断的方式破坏其数据结构。当你的应用程序启动时,有一个线程可以运行所有东西,包括事件处理程序。在您完成设置并调用battle()之后,该线程将一直在循环中运行。它在循环中如此忙碌以至于它没有注意到有一个点击事件等待处理 有几个选择:
randomMove()
。在移动按钮1
的OnClickListener
中处理玩家的移动。那样的话,一切都会发生在事件上。总的来说,这会更简单,而且可能是正确的做法Runnable
,通过调用Handler.post
进行调度。第一行调用checkDead
,如果为true则返回。最后一行重新安排Runnable
。中间是while循环的主体。这样做的效果是循环体运行,然后事件处理程序得到一个回合,然后