如何在不停止整个程序的情况下在java中等待

时间:2018-05-21 18:53:53

标签: java logic

我正在制作一个游戏,玩家可以一次最多投掷三枚射弹。我在重装时遇到了麻烦。这是代码:

public class AmmoManager {
public void tick(){
    if(Player.ammo <= 0){
        for(int t = 0; t < 10; t ++){

        }

        Player.ammo = 3;
    }
}

}

它应该等待一段时间然后将弹药设置为3,但是一旦弹药变为0,它立即设置为3。我做错了什么?

我尝试过使用sleep,但整个应用程序都会停止。

3 个答案:

答案 0 :(得分:1)

问题是你的主程序等待tick()返回一些东西。

这样想;如果你有这个方法

public boolean isOne(int num){
    Thread.sleep(1000);
    if(num==1){return true;}
    return false;
}

boolean result = isOne(1);
if(result){ //can't be ran until isOne(1) returns the boolean
    //do something
}

当你调用isOne()时,你不能继续使用main类,因为你没有返回它的boolean值。你必须等待它返回值,然后你可以继续使用main方法

解决方案是线程化。我不是它的专家,所以你需要咨询其他人或在线资源,但我认为它看起来像这样:

public void tick(){
    new Thread({ new Runnable(){
      @Override
       public void run(){
         if(Player.ammo <= 0){
             Thread.sleep(*seconds* times 1000);
             Player.ammo = 3;
          }
        }).start();
}

答案 1 :(得分:0)

这里有两个问题。

  

一旦弹药变为0,它立即设为3。我究竟做错了什么?

那是因为for循环什么也没做。当您输入tick()Player.ammo0时,您会立即将其设为3

  

我尝试过使用睡眠,但整个应用程序都会停止。

如果您只有一个主题,那就是Thread.sleep所做的。

答案 2 :(得分:0)

我怀疑你所尝试的比你想象的更难......

你需要一个控制游戏速度的主循环。我可能会睡觉()以确保游戏运行得不会太快。

每次通过,它必须指示每个玩家或您使用的任何构造,以更新自己。正如其中一条评论所指出的那样,这可能涉及增加一个计数器来补充弹药。