2014-09-08 5 views
1

В моей игре, я использую логическую переменную под названиемПроблема с сбросом булево и 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.

ответ

0

Попробуйте изменить

onScreenTime--; 
if (onScreenTime == 0){ 
    onScreen = false; 
} 

в

onScreenTime--; 
if (onScreenTime <= 0){ 
    onScreen = false; 
    onScreenTime = 180; 
} 

Состояние гонки может привести к тому, что onScreenTime станет ниже нуля, что затруднит отслеживание проблем.

перезагрузка onScreenTime обратно в 180 (скорее всего) приведет к исчезновению текущей проблемы.

КСТАТИ:

С onScreenTime 180, и кадр 60, текст только отображается в течение 2 секунд.

Ожидаю, что это будет 3 секунды: 180/60 =?

+0

Как уже упоминалось выше, я изменил его, но это не устранило проблему. Текст остается на экране. И да, я имел в виду 3 секунды xD мой плохой – archangel

+0

Опубликовать полный метод обновления может быть интересным сейчас. – lboshuizen

+0

Это не понадобится, поскольку я понял, что t он проблема. – archangel

0

Не следует ли эта часть:

onScreenTime--; 
if (onScreenTime == 0){ 
    onScreen = false; 
} 

сброса также onScreenTime:

onScreenTime--; 
if (onScreenTime <= 0){ 
    onScreen = false; 
    onScreenTime = 180; 
} 
+0

Добавил эту часть, однако проблема все еще сохраняется :( – archangel

+0

Может быть, глупый вопрос, но вы уверены, что достигли результата 1000, необходимого для третьего уровня? – nem035

+0

Да. Для целей тестирования я изменил его на 100, а когда я – archangel