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

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

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

谢谢

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

我猜你已经有了一个带有计时器的enemylocation ,因为你能够渲染,闪烁来自于经常设置的敌人,所以敌人遍布整个地方。 我要做的是实现冷却时间。 在伪ish代码(没有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如果你使用swing 。