我正在创建一个2D僵尸射击游戏,我正在尝试一种逐渐增加创建僵尸的速度的好方法。
我用以下代码创建一个僵尸。
public void createZombies(){
int direction = new Random().nextInt(4);
if (direction == 0) {
// spawn from top
zombies.add(new Zombie(new Random().nextInt(1120), new Random()
.nextInt(1)));
}
if (direction == 1) {
// spawn from left
zombies.add(new Zombie(new Random().nextInt(1), new Random()
.nextInt(640)));
}
if (direction == 2) {
// spawn from bottom
zombies.add(new Zombie(new Random().nextInt(1120), 640));
}
if (direction == 3) {
// spawn from right
zombies.add(new Zombie(1120, new Random().nextInt(640)));
}
}
我基本上想从我的main方法(连续运行)中调用该方法。我想到也许使用模块化并做类似的事情:
int x = 1;
if(x % 1000 == 0){
createZombies();
}
x++;
但这似乎很混乱-并没有改变创建它们的频率。
我只是为找到一种好的方法而感到困惑-令人惊讶的是,我在这里也找不到任何有用的东西。
因此,如果任何人都可以指出一个好主意,那么将不胜感激!
最佳答案
Guava有一个RateLimiter,可能对您的用例有用。特别是,您可以执行以下操作:
//initially, create one zombie every 10 seconds
final RateLimiter zombieRate = RateLimiter.create(0.1);
Runnable increaseRate = new Runnable() {
@Override public void run() {
//increase rate by 20%
zombieRate.setRate(zombieRate.getRate() * 1.2);
}
};
//then increase the rate every minute
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
scheduler.scheduleAtFixedRate(increaseRate, 1, 1, TimeUnit.MINUTES);
您的僵尸创作将变为:
while (true) {
zombieRate.acquire();
createZombie();
}