В моей игре, я использую логическую переменную под названиемПроблема с сбросом булево и INT значение в обновление() метод
onScreen
и устанавливается на истинный каждый раз начинается игра. У меня также есть переменная int под названием
onScreenTime
, когда игра начинается. Они используются для отображения текста «Подготовка к волне 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. Следующий код в методе обновления() и манипулирует две переменные упоминалось до сих пор:
onScreenTime--;
if (onScreenTime == 0){
onScreen = false;
}
В основном, onScreenTime уменьшается на 1 каждый раз, когда обновление() вызывается (60 раз в секунду), и если это равным 0, затем onScreen = false. Затем в методе же обновления(), у меня есть два, если заявления, которые должны быть довольно очевидны:
if (score > 500){
currentLevel = 2;
onScreen = true;
onScreenTime = 180;
}
if (score > 1000){
currentLevel = 3;
onScreen = true;
onScreenTime = 180;
}
И, наконец, в методе же обновления(), у меня есть
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 is image, enemyH и enemyW = 30, а 10 - это жизнь. Это будет изменено позже. Моя проблема в том, что как только появится текст «Подготовка к волне: 2», он не исчезнет. Первая «Подготовка к волне: 1» работает и исчезает отлично, но вторая не делает, поэтому врагов не будет порождено.
EDIT: Как было отмечено в комментариях, я написал 2 секунды, и это должно быть для 3. EDIT: Я изменил мой предыдущий метод следующим образом:
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 для каждого удара. Я считаю, что проблема заключалась в том, что я решил, что (оценка> 500) вместо == 500.
Как уже упоминалось выше, я изменил его, но это не устранило проблему. Текст остается на экране. И да, я имел в виду 3 секунды xD мой плохой – archangel
Опубликовать полный метод обновления может быть интересным сейчас. – lboshuizen
Это не понадобится, поскольку я понял, что t он проблема. – archangel