Java游戏开发:如何围绕此代码设置计时器?

时间:2013-07-25 18:20:43

标签: java timer

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

我正在研究弹出系统的敌人。敌人随机的窗口应该每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秒更改一次ene​​mylocation的值而不是经常?

由于

2 个答案:

答案 0 :(得分:1)

我认为这样做的“正确”方法是让游戏循环每秒x次。您决定更改enemylocationx个刻度的值。如果您每秒勾选60次,则表示3秒将为60 * 3 = 180.这意味着您可以在enemylocation

时更改tickNumber % 180 == 0

答案 1 :(得分: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渲染(例如渲染,如果按下键)代码将是不同的,你将不得不利用一个时间任务或一个swingtimer如果你正在使用摇摆。