Теперь все проигрыватели созданы и готовы к воспроизведению. А фоновая музыка уже проигрывается. Но вы еще не видели код, в котором переключается воспроизведение звуков. Этот код находится внутри метода update() класса HCanvas, его код приведен в листинге 9.1. Листинг 9.1. Метод update() класса HCanvas управляет воспроизведением звуков в игре Henway 2
private void update() {
// проверить, была ли перезапущена игра
if (gameOver) {
int keyState = getKeyStates();
if ((keyState & FIRE_PRESSED) != 0) {
// начать новую игру
try {
musicPlayer.setMediaTime(0); //При запуске игры начинается воспроизведение музыки
musicPlayer.start();
}
catch (MediaException me) {
}
chickenSprite.setPosition(2, 77);
gameOver = false;
score = 0;
numLives = 3;
}
// игра закончена, не нужно ничего обновлять
return;
}
// обработка пользовательского ввода, перемещение цыпленка
if (++inputDelay > 2) {
int keyState = getKeyStates();
if ((keyState & LEFT_PRESSED) != 0) {
chickenSprite.move(-6, 0);
chickenSprite.nextFrame();
}
else if ((keyState & RIGHT_PRESSED) != 0) {
chickenSprite.move(6, 0);
chickenSprite.nextFrame();
}
if ((keyState & UP_PRESSED) != 0) {
chickenSprite.move(0, -6);
chickenSprite.nextFrame();
}
else if ((keyState & DOWN_PRESSED) != 0) {
chickenSprite.move(0, 6);
chickenSprite.nextFrame();
}
checkBounds(chickenSprite, false);
// обнулить задержку ввода
inputDelay = 0;
}
// проверить, перешел ли цыпленок через дорогу
if (chickenSprite.getX() > 154) {
// воспроизвести звук, если цыпленок перешел через дорогу
try {
celebratePlayer.start(); //Когда цыпленок достигает противоположной стороны дороги, воспроизводится звук
}
catch (MediaException me) {
}
// восстановить исходное положение цыпленка и увеличить счет
chickenSprite.setPosition(2, 77);
score += 25;
}
// обновить спрайты автомобилей
for (int i = 0; i < 4; i++) {
// переместить спрайты автомобилей
carSprite[i].move(0, carYSpeed[i]);
checkBounds(carSprite[i], true);
// проверить столкновение цыпленка и автомобиля
if (chickenSprite.collidesWith(carSprite[i], true)) {
// воспроизвести звук, если цыпленок погиб
try {
squishPlayer.start(); //Звук смятия воспроизводится, если цыпленок попадает под колеса автомобиля
}
catch (MediaException me) {
}
// проверить, закончена ли игра
if (–numLives == 0) {
// остановить игру и воспроизвести звук конца игры
try {
musicPlayer.stop(); //По окончании игры музыка останавливается, воспроизводится звук окончания игры
gameoverPlayer.start();
}
catch (MediaException me) {
}
gameOver = true;
} else {
// поместить цыпленка в исходное положение
chickenSprite.setPosition(2, 77);
}
// не нужно продолжать обновление спрайтов автомобилей
break;
}
}
}