我正在制作一个游戏,玩家可以一次最多投掷三枚射弹。我在重装时遇到了麻烦。这是代码:
public class AmmoManager {
public void tick(){
if(Player.ammo <= 0){
for(int t = 0; t < 10; t ++){
}
Player.ammo = 3;
}
}
}
它应该等待一段时间然后将弹药设置为3,但是一旦弹药变为0,它立即设置为3。我做错了什么?
我尝试过使用sleep,但整个应用程序都会停止。
答案 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.ammo
为0
时,您会立即将其设为3
。
我尝试过使用睡眠,但整个应用程序都会停止。
如果您只有一个主题,那就是Thread.sleep
所做的。
答案 2 :(得分:0)
我怀疑你所尝试的比你想象的更难......
你需要一个控制游戏速度的主循环。我可能会睡觉()以确保游戏运行得不会太快。
每次通过,它必须指示每个玩家或您使用的任何构造,以更新自己。正如其中一条评论所指出的那样,这可能涉及增加一个计数器来补充弹药。