Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何延迟Java Android中基于回合的游戏的方法_Java_Android_Multithreading_Delay - Fatal编程技术网

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

如何延迟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);

在一个简单的纸牌游戏(人对CPU)中,逻辑是有效的,但我想推迟计算机的轮到

我曾尝试使用
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 mPlayerplayerCard()
中使用code>变量。

我使用了@Jakar中的解决方案,并将变量更改为类范围,以便正确使用处理程序和Runnable。这起作用了,延迟正常工作,使用

Runnable r = new Runnable() {
    public void run() {
         playPlayerCard();
    }
};

mHandler.postDelayed(r, 500);

为了澄清解决方案,我必须从
playerCard(Player)
中取出参数,并使用类作用域
Player mPlayerplayerCard()
中使用code>variable。

好吧,您可以将变量设置为全局变量-在所有方法之外的类主体中定义它们。然后您就可以使用handler了。@jakar,这很有效,谢谢。我正在使用Handler和Runnable,我将所有需要的变量(只有一个,所以还不错)都更改为类变量。好吧,您可以将变量设置为全局变量——在所有方法之外的类体中定义它们。然后您就可以使用handler了。@jakar,这很有效,谢谢。我正在使用Handler和Runnable,我将所有需要的变量(只有一个,所以还不错)都更改为类变量。我会看一看并尝试一下,这看起来是一种更有效的基于回合的风格。我将先看看是否可以进行快速修复,然后再尝试这种方式。我目前将使用Handler和Runnable,但感谢提供的信息,我可能会使用AsyncTask。感谢帮助,我不知道AsyncTask。我会看一看并尝试一下,这看起来是一种更有效的基于回合的风格。我会看看是否可以先做一个快速修复,然后稍后再尝试这种方法。我目前将使用Handler和Runnable,但感谢您提供的信息,接下来我可能会使用AsyncTask。