我正在制作一个“太空入侵者风格”的游戏。您(播放器)在屏幕底部左右移动。每个窗口都会有一个敌人,你必须移动到窗口射击。
我正在研究弹出系统的敌人。敌人随机的窗口应该每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秒更改一次enemylocation的值而不是经常?
由于
答案 0 :(得分:1)
我认为这样做的“正确”方法是让游戏循环每秒x
次。您决定更改enemylocation
每x
个刻度的值。如果您每秒勾选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如果你正在使用摇摆。