-1

我正在制作一个“太空侵略者风格”的游戏。你(玩家)在屏幕底部左右移动。每个窗口都会有一个敌人,你必须移动到窗口并射击。

我正在研究敌人弹出系统。敌人是随机的并且应该每 3 秒改变一次的窗口。这是我的代码:

int enemylocation = new Random().nextInt(2) +1;
    if(enemylocation==1){
        enemy1.setFilter(Image.FILTER_NEAREST);
        enemy1.draw(200,170,s*10);
    }
    if(enemylocation==2){
        enemy2.setFilter(Image.FILTER_NEAREST);
        enemy2.draw(200,360,s*10);

    }

一切正常,但随机数部分总是选择一个新数字,所以两个窗口都在闪烁。如何延迟计时器以每 3 秒而不是不断地更改敌人位置的值?

谢谢

4

2 回答 2

1

我会说做到这一点的“正确”方法是有一个x每秒滴答的游戏循环。您决定更改enemylocation每个x刻度的值。如果您每秒勾选 60 次,这意味着 3 秒将是 60 * 3 = 180。这意味着您可以更改enemylocation何时tickNumber % 180 == 0

于 2013-07-25T18:24:44.160 回答
1

我猜你已经有一个带有计时器的游戏循环,因为你可以渲染,闪烁来自于enemylocation设置太频繁,所以敌人被渲染到整个地方。我要做的是实施冷却。在伪代码(无 IDE)中:

int enemySpawnRate = 3000;
int timeElapsed = enemySpawnRate+1; //Spawn the first time

void spawnEnemy(int delta) {
     timeElapsed +=delta;
     if(timeElapsed>enemySpawnRate) {
       //spawn enemy as before, your code snippet
       timeElapsed=0;
     }
 }

其中 delta 是自上次运行游戏循环以来经过的时间量。

请注意,这完全取决于您是否有一个基于计时器的游戏循环,如果您没有并且您正在 INPUT 上渲染(例如,如果按下键则渲染)代码将有所不同,如果您使用的是 swing,您将不得不使用 timertask 或 swingtimer .

于 2013-07-25T18:39:50.540 回答