如何延迟Java Android中基于回合的游戏的方法
在一个简单的纸牌游戏(人对CPU)中,逻辑是有效的,但我想推迟计算机的轮到 我曾尝试使用如何延迟Java Android中基于回合的游戏的方法,java,android,multithreading,delay,Java,Android,Multithreading,Delay,在一个简单的纸牌游戏(人对CPU)中,逻辑是有效的,但我想推迟计算机的轮到 我曾尝试使用Thread.sleep(int毫秒)这一方法,但它会扰乱图像的显示顺序。我没有使用游戏循环,我只是在每次换卡时动态更新ImageView。Thread.sleep的问题是所有图像仅在Thread.sleep之后更新,Thread.sleep之前没有显示仅显示人卡。人的卡片和计算机的卡片在Thread.sleep后显示 我用过Thread.sleep,就像这样: playPlayerCard(player);
Thread.sleep(int毫秒)
这一方法,但它会扰乱图像的显示顺序。我没有使用游戏循环,我只是在每次换卡时动态更新ImageView。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)
playerCard(玩家);//以人为本
displayPile();//显示卡堆(ImageView的)
player=nextPlayer(player);//获取玩家列表中的下一个玩家
//等待计算机“思考”
睡眠(500);
玩家卡(玩家)//轮到计算机了
displayPile();//显示卡堆(ImageView的)
我是否使用了Thread.sleep()错误?有更好/正确的方法吗?我已经在线搜索并尝试使用new Thread()
,使用handler.postDelayed(Runnable r,long millides)
和CountDownTimer
,但由于我的变量:playerCard(player)代码>不是最终变量
我总是有问题延迟行动和图像出现在正确的时间。有什么建议吗?提前谢谢。你能不能在一个异步任务中实现计算机播放逻辑,并在人类回合结束时启动它
我认为这会更有意义,这样一来,一旦计算机“玩”完,您就可以在onPostExecute()
方法中确定要采取的操作,在您的情况下,我认为这将是处理卡片
在电脑玩的时候,阻止用户输入也很简单,可以使用进度对话框(这对我所理解的游戏来说并不那么愉快),也可以简单地禁用按钮:)
这是它的理由
希望这有帮助 难道你不能在一个异步任务中实现计算机播放逻辑,并在人类回合结束时启动它吗
我认为这会更有意义,这样一来,一旦计算机“玩”完,您就可以在onPostExecute()
方法中确定要采取的操作,在您的情况下,我认为这将是处理卡片
在电脑玩的时候,阻止用户输入也很简单,可以使用进度对话框(这对我所理解的游戏来说并不那么愉快),也可以简单地禁用按钮:)
这是它的理由
希望这有帮助 我使用@Jakar的解决方案,并将变量更改为类范围,以便正确使用处理程序和Runnable。这起作用了,延迟正常工作,使用
Runnable r = new Runnable() {
public void run() {
playPlayerCard();
}
};
mHandler.postDelayed(r, 500);
为了澄清解决方案,我必须从playerCard(Player)
中取出参数,并使用类作用域Player mPlayer改为在playerCard()
中使用code>变量。我使用了@Jakar中的解决方案,并将变量更改为类范围,以便正确使用处理程序和Runnable。这起作用了,延迟正常工作,使用
Runnable r = new Runnable() {
public void run() {
playPlayerCard();
}
};
mHandler.postDelayed(r, 500);
为了澄清解决方案,我必须从playerCard(Player)
中取出参数,并使用类作用域Player mPlayer改为在playerCard()
中使用code>variable。好吧,您可以将变量设置为全局变量-在所有方法之外的类主体中定义它们。然后您就可以使用handler了。@jakar,这很有效,谢谢。我正在使用Handler和Runnable,我将所有需要的变量(只有一个,所以还不错)都更改为类变量。好吧,您可以将变量设置为全局变量——在所有方法之外的类体中定义它们。然后您就可以使用handler了。@jakar,这很有效,谢谢。我正在使用Handler和Runnable,我将所有需要的变量(只有一个,所以还不错)都更改为类变量。我会看一看并尝试一下,这看起来是一种更有效的基于回合的风格。我将先看看是否可以进行快速修复,然后再尝试这种方式。我目前将使用Handler和Runnable,但感谢提供的信息,我可能会使用AsyncTask。感谢帮助,我不知道AsyncTask。我会看一看并尝试一下,这看起来是一种更有效的基于回合的风格。我会看看是否可以先做一个快速修复,然后稍后再尝试这种方法。我目前将使用Handler和Runnable,但感谢您提供的信息,接下来我可能会使用AsyncTask。