explosionPlayer = Manager.createPlayer(is, "audio/X-wav");
explosionPlayer.prefetch();
is = getClass().getResourceAsStream("GameOver.wav");
gameoverPlayer = Manager.createPlayer(is, "audio/X-wav");
gameoverPlayer.prefetch();
}
catch (IOException ioe) {
}
catch (MediaException me) {
}Из приведенного кода видно, что для проигрывания музыки используется один проигрыватель MIDI-аудио, а также два проигрывателя для воспроизведения игровых звуковых эффектов (звуки взрыва и завершения игры). Последний фрагмент метода start() – это вызов метода, начинающего игру:
newGame();
Чуть позже вы познакомитесь с работой метода newGame(). А пока давайте рассмотрим метод update() – сердце большинства игровых мидлетов, включая Space Out.
Разработка метода update()
Метод update() вызывается один раз за игровой цикл и отвечает за обработку пользовательского ввода, он выполняет обновление спрайтов, проверку столкновений, добавление новых пришельцев, а также обеспечивает работу игры. Метод update() начинается с проверки окончания игры, если это так, то начинается новая игра нажатием клавиши Огонь.if (gameOver) {
int keyState = getKeyStates();
if ((keyState & FIRE_PRESSED) != 0)
// старт новой игры
newGame();
// игра закончена, не нужно обновлять что либо
return;
}Чтобы начать новую игру, необходимо вызвать метод newGame(), о котором вы узнаете чуть позже в этой главе. Обратите внимание, что метод update() завершает свою работу сразу после вывода метода newGame(), поскольку нет необходимости обновлять что-либо в игре, которая только начата. Этот метод прекратит свою работу даже в случае, если не будет нажата клавиша Огонь, поскольку игра окончена и нет необходимости обновлять игру. Если игра не окончена, метод update() продолжает отвечать на пользовательский ввод. Приведенный ниже код отвечает на нажатия клавиш Влево и Вправо, которые управляют автомобилем, а нажатием клавиши Огонь запускается ракета:
int keyState = getKeyStates();
if ((keyState & LEFT_PRESSED) != 0) {
playerSprite.setXSpeed(-2);
}
else if ((keyState & RIGHT_PRESSED) != 0) {
playerSprite.setXSpeed(4); //Автомобиль игрока движется вправо быстрее, чем влево, поскольку для движения влево включается задний ход. Это интересный штрих к игре
}
if ((keyState & FIRE_PRESSED) != 0) {
// воспроизвести звук огня
try {
Manager.playTone(ToneControl.C4 + 12, 10, 100);
}
catch (Exception e) {
}
addMissile(playerSprite);
}
playerSprite.update();Если вы вспомните дизайн игры Space Out (рис. 18.1), то автомобиль игрока располагается у нижней границы экрана и может перемещаться по горизонтали влево или вправо. Код обработки нажатий клавиш устанавливает скорость автомобиля по оси X, таким образом, автомобиль перемещается в ответ на нажатие клавиши. Важно отметить, что скорость в направлении влево меньше скорости направления вправо. Эта разница объясняется тем, что автомобиль направлен вправо, следовательно, при движении влево он движется назад. В реальности автомобиль движется назад медленнее, чем вперед.
В копилку Игрока
Кроме того, что в игру Space Out добавлена доля реализма, такое различие скоростей несколько усложняет игру. Так, при движении влево сложнее скрыться от ракет.