我正在创建一个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();
}

09-27 06:31