在简单的纸牌游戏(人类与CPU)中,逻辑有效,但我想延迟计算机的使用。
我尝试使用Thread.sleep(int milliseconds)
,但它会影响图像的显示顺序。我没有使用游戏循环,我只是在更改卡片时动态更新ImageViews。 Thread.sleep的问题是所有图像只在 Thread.sleep之后更新,在Thread.sleep之前没有只显示人工卡。在Thread.sleep之后显示人的卡片和计算机的卡片。
我像这样使用Thread.sleep:
playPlayerCard(player); // Human first
displayPile(); // Display card pile (ImageView's)
player = nextPlayer(player); // Get's next player in Player mPlayers List<Player>
// Wait for computer to 'Think'
Thread.sleep(500);
playPlayerCard(player); //Computer's turn
displayPile(); // Display card pile (ImageView's)
我使用Thread.sleep()错了吗?有更好/更正确的方法吗?我在线搜索并尝试使用new Thread()
,使用handler.postDelayed(Runnable r, long milliseconds)
和CountDownTimer
,但由于我的变量:playPlayerCard(player);
不是最终变量,因此无效。
我总是遇到延迟操作和在正确时间出现的图像的问题。有什么建议?提前谢谢。
答案 0 :(得分:5)
你不能在AsyncTask中实现计算机播放逻辑并在完成人工转换时触发它吗?
我认为一旦计算机完成&#34;播放&#34;那就更有意义了。您可以确定onPostExecute()
方法中要采取的操作,在您认为可以处理卡片的情况下。
在计算机正在播放时阻止用户输入也非常简单,无论是使用进度对话框(对于我理解的游戏来说都不是这样)或者只是通过禁用按钮:)
此处为documentation。
希望这有帮助!
答案 1 :(得分:0)
我使用@Jakar中的解决方案并将我的变量更改为类范围,以便正确使用Handler和Runnable。这很有效,延迟可以正常使用
Runnable r = new Runnable() {
public void run() {
playPlayerCard();
}
};
mHandler.postDelayed(r, 500);
为了澄清解决方案,我必须从playPlayerCard(Player player)
中取出参数,并在Player mPlayer;
中使用类范围playPlayerCard()
变量。