如何在Java Android中延迟基于回合制游戏的方法

时间:2012-02-01 20:33:00

标签: java android multithreading delay

在简单的纸牌游戏(人类与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);不是最终变量,因此无效。

我总是遇到延迟操作和在正确时间出现的图像的问题。有什么建议?提前谢谢。

2 个答案:

答案 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()变量。