我正在做一个游戏,玩家一次最多可以投掷三个弹丸。我在重新加载时遇到了麻烦。这是代码:

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

        }

        Player.ammo = 3;
    }
}


}

它应该稍等一下,然后将弹药设置为3,但是一旦弹药变为0,它就会立即设置为3。我究竟做错了什么?

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

最佳答案

问题是您的主程序等待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方法

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

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

10-08 00:34