在我的游戏中,我使用了一个名为的布尔变量
onScreen
并且每次游戏开始时都设置为 true。我还有一个叫做 int 的变量
onScreenTime
游戏开始时设置为180。这些用于在一定时间内在屏幕上描绘文本“为 Wave X 做准备”。由于 onScreenTime 为 180,而 fps 为 60,因此文本仅显示 2 秒。2 秒后,onScreen 设置为 false,游戏继续。编码:
if (onScreen){
g.setFont(new Font("Geneva", Font.BOLD, 50));
g.setColor(Color.BLACK);
g.drawString("Prepare for wave: " + currentLevel,400,500);
}
仅当 onScreen = true 时才在屏幕上绘制文本。以下代码在 update() 方法中,并操作了到目前为止提到的两个变量:
onScreenTime--;
if (onScreenTime == 0){
onScreen = false;
}
基本上,每次调用 update()(每秒 60 次)时,onScreenTime 都会减少 1,如果它等于 0,则 onScreen = false。然后在同一个 update() 方法中,我有两个 if 语句应该是不言自明的:
if (score > 500){
currentLevel = 2;
onScreen = true;
onScreenTime = 180;
}
if (score > 1000){
currentLevel = 3;
onScreen = true;
onScreenTime = 180;
}
最后,在同一个 update() 方法中,我有
if (currentLevel == 1 && onScreen == false){
wave(2,enemyP,100);
}
if (currentLevel == 2 && onScreen == false){
wave(3,enemyP1,90);
}
if (currentLevel == 3 && onScreen == false){
wave(3,enemyP2,80);
}
currentLevel 决定敌人,他们绘制的图像,一次在屏幕上绘制多少,以及它们产生的频率。wave() 是一种为每个级别创建波浪的方法。它表示为:
public void wave(int amount, Image i, int seconds){
for (int x = amount; x > 0; x--){
if (frameCount % seconds == 0){
Random r = new Random();
int randX = r.nextInt(width - 20)+10;
army.add(new EnemyShip(randX,(int)(Math.random()*100)-300,enemyH,enemyW,i,10));
}
}
}
i 是图像,enemyH 和enemyW = 30,10 是生命。这将在以后更改。我的问题是,一旦出现“准备波:2”文本,它就不会消失。第一个“准备波:1”可以正常工作并消失,但第二个不会,因此不会产生任何敌人。
编辑:正如评论中指出的那样,我写了 2 秒,应该是 3 秒。编辑:我将以前的方法更改为:
if (onScreenTime <= 0){
onScreen = false;
onScreenTime = 180;
}
并将以前的方法更改为:
if (score == 500){
currentLevel = 2;
onScreen = true;
onScreenTime = 180;
}
if (score == 1000){
currentLevel = 3;
onScreen = true;
onScreenTime = 180;
}
每击中一次,分数就会上升 20 分。我认为问题在于我将其设置为 if(score > 500) 而不是 == 500。