Я делаю небольшую игру в Обработка , которая похожа на те игры в стиле Guitar Hero, и я пытаюсь сделать 2 вещи:
- Когда игра загрузится, остановите движение времени
- Во время игры включите функцию паузы
Теперь я знаю, что не могу остановить время, поскольку millis () возвращает миллисекунды с момента запуска приложения, поэтому мой таймер должен быть равен millis() - millis()
в начале, чтобы быть равным нулю, поэтому, когда пользователь нажимает START, они очевидно, может начать с самого начала. Игра в начале читает файл, похожий на файл субтитров, в котором есть нота, которую нужно сыграть, и время в миллисекундах, которое должно появиться на экране.
Моя проблема в том, что когда я ставлю игру на паузу, таймер продолжает работать, а когда я ставлю игру на паузу, все ноты «сгруппированы» из-за моей логики, как вы увидите из моего кода.
Может кто-нибудь предложить лучший алгоритм, чем тот, который я использую? Уже поздно, и я работаю над этим весь день и ночь. Я думаю, что проблема с for()
ниже:
public void draw()
{
if (gameInProgress)
{
currentTimerValue = millis(); // Update the timer with the current milliseconds
// Check to see if the note times falls between the current time, or since the last loop (difficult to match exact millisecond)
for(int i=0 ; i<songNotes.length ; i++)
{
if( songNotes[i].getStartTime() > previousTimerValue && songNotes[i].getStartTime() <=currentTimerValue)
notes.add(songNotes[i]);
}
noStroke();
textFont(f,18);
drawButtons(); //Draws coloured buttons relating to Button presses on the controller
drawHighScoreBox(); // Draws high score box up top right
drawLines(); // Draws the strings
moveNotes(); // Moves the notes across from right to left
//Now set the cutoff for oldest note to display
previousTimerValue=currentTimerValue; //Used everytime on the following loop
}
else
{
drawMenu(); // Draw the Main/Pause menu
}
}
ПРИМЕЧАНИЕ. Логическое значение gameInProgress
устанавливается ниже, когда пользователи нажимают кнопку паузы, например, «P», а songNotes
- это массив объектов типа Note
, который я написал сам. Имеет 2 переменные-члена, noteToBePlayed
и timeToBePlayed
Метод getStartTime()
возвращает timeToBePlayed
, что является значением в миллисекундах.
Любая помощь приветствуется.
Спасибо