在我的游戏中,我使用的是一个名为
的布尔变量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()是一种为每个级别创建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));
}
}
}
我是形象,敌人H和敌人W = 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(得分> 500)而不是== 500.
答案 0 :(得分:0)
不应该这部分:
onScreenTime--;
if (onScreenTime == 0){
onScreen = false;
}
同时重置onScreenTime:
onScreenTime--;
if (onScreenTime <= 0){
onScreen = false;
onScreenTime = 180;
}
答案 1 :(得分:0)
尝试更改
onScreenTime--;
if (onScreenTime == 0){
onScreen = false;
}
到
onScreenTime--;
if (onScreenTime <= 0){
onScreen = false;
onScreenTime = 180;
}
竞争条件可能导致onScreenTime低于零,导致难以跟踪问题。
将onScreenTime重置为180将(很可能)使您当前的问题消失。
BTW:
由于onScreenTime为180,而fps为60,因此文本仅为 显示2秒钟。
我希望它是3秒:180/60 =?