首页 > 解决方案 > 如何在不停止整个程序的情况下在java中等待

问题描述

我正在制作一款游戏,玩家一次最多可以投掷三个弹丸。我在重新加载时遇到问题。这是代码:

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

        }

        Player.ammo = 3;
    }
}

}

应该稍等片刻,然后将弹药设置为 3,但弹药一变为 0,立即设置为 3。我究竟做错了什么?

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

标签: javalogic

解决方案


问题是你的主程序等待 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();
}

推荐阅读