我正在做一个游戏,玩家一次最多可以投掷三个弹丸。我在重新加载时遇到了麻烦。这是代码:
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();
}