Категории
Самые читаемые
onlinekniga.com » Компьютеры и Интернет » Программирование » Создание игр для мобильных телефонов - Майкл Моррисон

Создание игр для мобильных телефонов - Майкл Моррисон

Читать онлайн Создание игр для мобильных телефонов - Майкл Моррисон

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 33 34 35 36 37 38 39 40 41 ... 87
Перейти на страницу:

Говоря о воспроизведении музыки, я упустил одну деталь. Я имею в виду повторы воспроизведения. По умолчанию звуковой файл воспроизводится один раз. Если требуется воспроизводить мелодию снова и снова, вы можете установить большое число повторов:

MusicPlayer.setLoopCount(-1);

Обычно в этот метод передается число повторов воспроизведения музыки, если вы передадите -1, то мелодия будет повторяться бесконечно, или до тех пор, пока не будет вызван метод stop().

...

Совет Разработчику

Если вы хотите контролировать число повторов мелодии, важно перед методом start() вызвать метод setLooptCount().

Ниже приведен код, который необходимо вызвать для закрытия проигрывателя MIDI-файла:

musicPlayer.close();

Вы, вероятно, уже понимаете всю гибкость интерфейса Player, который одинаково легко позволяет воспроизводить MIDI– и волновые файлы.

Воспроизведение MIDI-файлов через URL

Как же воспроизвести файл через URL? Зная, как воспроизвести файл из JAR-архива, вы можете догадаться, что воспроизведение MIDI-файла через URL будет похоже на аналогичное воспроизведение wav-файла. И вы будете правы! Ниже приведен код, выполняющий это:

try {

Player gameoverPlayer =

Manager.createPlayer("http://yourserver/Music.mid");

gameoverPlayer.prefetch();

gameoverPlayer.start();

}

catch(IOException ioe) {

}

catch(MediaException e) {

}

В этом коде нет ничего удивительного, при создании проигрывателя вы просто определяете URL MIDI-файла. Помните, что вы можете зациклить воспроизведение файла в случае, если это необходимо.

Создание программы Henway 2

В главе 7 вы разработали и создали свою первую настоящую мобильную игру Henway. Несмотря на то что Henway очень интересна с точки зрения как программирования, так и игры, в ней не хватает звука. Оставшиеся разделы этой главы посвящены доработке игры Henway, добавлению в нее цифровых звуков и музыки. Теперь вам придется вспомнить все, что вы узнали о цифровых звуках, и использовать эти знания на практике.

Первый шаг, который нужно сделать на пути добавления звука в игру, – это определить, какие именно моменты игры можно улучшить, используя звуковое сопровождение. Не нужно много думать, чтобы понять: цыпленок готовится перебежать через шоссе, цыпленок удачно перебирается на другую сторону дороги, и окончание игры. Но вы можете добавить, например, звуковое сопровождение шагов цыпленка, а также добавить звук клаксонов автомобилей. Но это тот случай, когда необходимо экспериментировать с настоящим мобильным телефоном, поскольку только так вы сможете определить грань необходимого числа звуков. Я не говорю о том, что звук – это плохо, но просто он замедляет выполнение мидлета....

Совет Разработчику

Если вы столкнулись с проблемой, что в конкретной ситуации необходимо использовать звук, но при этом вы теряете в производительности, вы всегда можете использовать тоны. Нет причины, по которой вы не должны смешивать тоны с цифровыми звуками. Такой подход позволяет создавать интересные звуковые эффекты без потери производительности.

Чтобы лучше понять эту проблему, вы должны осознать, что мобильные телефоны имеют очень ограниченные ресурсы памяти и производительности. Если воспроизводить лишь цифровые звуки, вы не сможете запустить вашу игру с максимальной частотой смены кадров. Следовательно, обычно следует избегать использования цифровых звуков, если скорость игры критична. Имея это в виду, вероятно, не следует озвучивать шаги цыпленка и клаксоны автомобилей.

В результате в игре Henway 2 будут следующие звуки:

► Celebration – цыпленок удачно перешел через дорогу;

► Squish – цыпленок попал под машину;

► Game Over – умер последний цыпленок, игра закончена;

► Music – фоновая музыка, воспроизводимая во время игры.

Первые три звука – это волновые звуки, последний – или MP3, или MIDI. Поскольку MIDI обычно занимают много меньше места и менее требовательны к ресурсам по сравнению с MP3, в игре Henway 2 я буду использовать MIDI-мелодию.

Написание программного кода

Первый фрагмент нового кода – это создание проигрывателей. Ниже приведены четыре проигрывателя, необходимые для воспроизведения звуков, они объявлены, как переменные класса HCanvas:

private Player musicPlayer;

private Player celebratePlayer;

private Player squishPlayer;

private Player gameoverPlayer;

Как видно их этого кода, переменные ничем не отличаются друг от друга, кроме как именами. Разницы между проигрывателями MIDI-музыки и волновых звуков нет, пока они не созданы. Далее приведен код, создающий проигрыватели, он находится в методе start() класса HCanvas:

try {

InputStream is = getClass().getResourceAsStream("Music.mid");

musicPlayer = Manager.createPlayer(is, "audio/midi");

musicPlayer.prefetch();

is = getClass().getResourceAsStream("Celebrate.wav");

celebratePlayer = Manager.createPlayer(is, "audio/X-wav");

celebratePlayer.prefetch();

is = getClass().getResourceAsStream("Squish.wav");

squishPlayer = Manager.createPlayer(is, "audio/X-wav");

squishPlayer.prefetch();

is = getClass().getResourceAsStream("GameOver.wav");

gameoverPlayer = Manager.createPlayer(is, "audio/X-wav");

gameoverPlayer.prefetch();

}

catch (IOException ioe) {

}

catch (MediaException me) {

}

Этот код напоминает рассмотренные ранее примеры и не содержит ничего принципиально нового. Для создания проигрывателей используются файлы Music.mid, Celebrate.wav, Squish.wav и GameOver.wav, хранящиеся в JAR-файле мидлета. Обратите внимание, что для каждого проигрывателя вызывается метод prefetch() непосредственно после создания, поэтому все звуки немедленно загружаются в память и готовы для воспроизведения.

Метод start() класса HCanvas также начинает воспроизведение фоновой музыки сразу после создания проигрывателей. Вот так выглядит запуск воспроизведения:

try {

musicPlayer.setLoopCount(-1);

musicPlayer.start();

}

catch (MediaException me) {

}

В метод setCountLoop() передается значение -1, это говорит о том, что мелодия будет воспроизводиться бесконечно. Этот метод вызывается перед методом start(). После этого начинается воспроизведение мелодии до тех пор, пока не будет вызван метод stop() или закрыт проигрыватель.

Все проигрыватели закрываются в методе stop() класса HCanvas:

musicPlayer.close();

celebratePlayer.close();

squishPlayer.close();

gameoverPlayer.close();

Теперь все проигрыватели созданы и готовы к воспроизведению. А фоновая музыка уже проигрывается. Но вы еще не видели код, в котором переключается воспроизведение звуков. Этот код находится внутри метода 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;

}

}

}

Первый фрагмент кода метода update(), которому следует уделить внимание, – это код, расположенный в начале метода, проверяющий перезапуск игры. Если игра запущена снова, вы знаете, что по какой-то причине она была завершена, поэтому фоновая музыка была остановлена. При перезапуске игры следует возобновить воспроизведение фоновой музыки, для чего вызывается метод start() проигрывателя.

Следующий фрагмент кода, имеющий отношение к воспроизведению музыки, – это код, проверяющий, перешел ли цыпленок через дорогу. Если да, то воспроизводится звук Celebration, для чего вызывается метод start() соответствующего проигрывателя. Аналогичный код встречается далее в методе update(), когда выполняется проверка, попал ли цыпленок под колеса автомобиля.

1 ... 33 34 35 36 37 38 39 40 41 ... 87
Перейти на страницу:
На этой странице вы можете бесплатно читать книгу Создание игр для мобильных телефонов - Майкл Моррисон.
Комментарии