Создание игр для мобильных телефонов - Майкл Моррисон
Шрифт:
Интервал:
Закладка:
Font.SIZE_LARGE));
g.drawString("GAME OVER", 90, 40, Graphics.TOP | Graphics.HCENTER);
g.setFont(Font.getFont(Font.FACE_MONOSPACE, Font.STYLE_BOLD,
Font.SIZE_MEDIUM));
g.drawString("You scored " + score + " points.", 90, 70, Graphics.TOP |
Graphics.HCENTER);
}
// вывести содержимое буфера на экран
flushGraphics();
}
private void checkBounds(Sprite sprite, boolean wrap) {
// переместить/остановить спрайт
if (wrap) {
// переместить спрайт в исходное положение
if (sprite.getX() < -sprite.getWidth())
sprite.setPosition(getWidth(), sprite.getY());
else if (sprite.getX() > getWidth())sprite.setPosition(-sprite.getWidth(), sprite.getY());
if (sprite.getY() < -sprite.getHeight())
sprite.setPosition(sprite.getX(), getHeight());
else if (sprite.getY() > getHeight())
sprite.setPosition(sprite.getX(), -sprite.getHeight());
}
else {
// остановить спрайт у края экрана
if (sprite.getX() < 0)
sprite.setPosition(0, sprite.getY());
else if (sprite.getX() > (getWidth() – sprite.getWidth()))
sprite.setPosition(getWidth() – sprite.getWidth(), sprite.getY());
if (sprite.getY() < 0)
sprite.setPosition(sprite.getX(), 0);
else if (sprite.getY() > (getHeight() – sprite.getHeight()))
sprite.setPosition(sprite.getX(), getHeight() – sprite.getHeight());
}
}
}
Я надеюсь, что длина приведенного кода вас не испугала. Если вы потратите немного времени на его изучение, то поймете, что вы уже с ним знакомы. В этом листинге просто собраны все элементы кода, рассмотренные ранее.
Класс HenwayMIDlet – это класс мидлета, который создает экземпляр класса HCanvas. По этой причине я опущу рассмотрение кода класса мидлета. Помните, что полный код мидлета Henway, а также прочих программ, рассматриваемых в книге, можно найти на прилагаемом компакт-диске.
Тестирование игры
Игру Henway намного веселее тестировать, чем программу UFO. Henway – это первая созданная вами полноценная игра, что делает этот мидлет очень привлекательным для пользователя.
Это экшн-игра, такие игры необходимо тщательно тестировать, потому что сложно предугадать, как поведет себя спрайт в той или иной ситуации. Вы должны немного поиграть в игру и убедиться, что ничего из ряда вон выходящего не происходит.
На рис. 7.5 показано начало игры, ваш храбрый цыпленок готов к переходу через шоссе.
Рис. 7.5. Игра Henway начинается с того, что цыпленок готов к переходу через шоссеЧтобы начать игру, просто проведите вашего цыпленка через дорогу, для чего используйте клавиши со стрелками на мобильном телефоне (или клавиши со стрелками на клавиатуре). Если вы успешно перевели цыпленка через шоссе, ваш счет увеличится на 25 очков.
Конечно, даже лучшие игроки Henway рано или поздно теряют цыпленка под колесами автомобиля. Когда такое случается, подается звуковой сигнал, а цыпленок возвращается на старт. Еще более важно, что игрок видит, что число жизней уменьшилось (рис. 7.6).
Рис. 7.6. Попасть под машину не так уж страшно, как вы могли бы подумать. При этом лишь уменьшается число жизней...Совет Разработчику
Если вы обнаружите, что реакция на нажатия клавиш на клавиатуре очень замедлена, попробуйте уменьшить значение переменной inputDelay до 1. Это поможет увеличить скорость обработки ввода на треть.
Если вы потеряете всех трех цыплят, то игра заканчивается. На рис. 7.7 показан конец игры, на экране просто выводится ваш счет и строка «game over» (игра закончена).
Рис. 7.7. Если вы потеряли всех цыплят, то игра закончена
Вам, может быть, жаль цыплят, погибших под колесами автомобилей на шоссе, но это всего лишь игра. Несмотря на кажущуюся простоту, Henway – это кульминация всего, что вы уже изучили. В дальнейшем вы еще многому научитесь и будете создавать еще более захватывающие игры.
Резюме
Правда жизни такова, что теория бесполезна, если нет практики. Эта глава показала, что все изложенное ранее можно применить на практике – в вашей первой полноценной мобильной игре. В игре Henway используется методика обработки пользовательского ввода, о которой шла речь в предыдущей главе, а также все, что вы узнали о спрайтах. К счастью, теперь, когда есть MIDP 2.0, вы можете с легкостью создавать интересные мобильные игры при минимальных усилиях. Но мидлет Henway, не самый интересный, все только начинается!
Хотя в игре Henway вы уже воспроизвели несколько звуков, в следующей главе речь пойдет о возможностях работы со звуком в J2ME. Вы узнаете, как воспроизводить цифровые звуки, и улучшите игру Henway, добавив соответствующее звуковое сопровождение.
В заключение
В игру Henway можно добавить одну интересную деталь – канализационные люки, которые часто можно увидеть на дорогах. Проходя по такому люку, цыпленок может провалиться в него. Необходимо проверять столкновение спрайта цыпленка со спрайтом люка. Ниже приведены шаги, которые необходимо выполнить, чтобы добавить люки смерти в игру:
1. создайте спрайтовое изображение люка – черный круг;
2. в методе start() создайте спрайт люка, убедитесь, что вы передаете созданное изображение. Убедитесь, что люки расположены именно на дорогах;
3. в метод draw() добавьте код для рисования новых спрайтов, убедитесь, что люки выводятся на экран сразу после создания фона, но прежде, чем выводятся спрайты автомобилей и цыпленка. Это очень важно, поскольку люки должны располагаться под автомобилями и цыпленком;
4. в метод update() добавьте код, проверяющий столкновение спрайта цыпленка со спрайтами люков. Если да, то остановите игру, будто цыпленка переехал автомобиль.
Эти изменения сделают игру Henway более интересной. Еще лучше, если на каждом уровне вы будете размещать люки случайным образом.Глава 8 Добавляем звук
...Архив Аркад
Выпущенная в 1981 году компанией Midway игра Gorf – это один из популярных космических шутеров (наряду с Space Invaders и Galaxian). Возможно, она популярна, поскольку унаследовала элементы обеих игр. Игра Gorf известна из-за синтезированной машинной речи, которая используется для диалога с игроком на различных этапах игры. Странное название – это не перевертыш слова «лягушка» (лягушка – frog, англ.), как некоторые могли бы подумать, а аббревиатура, образованная от Galactic Orbiting Robot Force (Галактические орбитальные машинные силы). Но мне больше нравится первый вариант!
В 1977 году в фильме «Звездные войны» прозвучала музыкальная тема, которая надолго осела в памяти тех, кто видел этот фильм. Эта нехитрая мелодия состояла из пяти нот. Если вы не понимаете, о чем идет речь, то потерпите, чуть позже я приведу ее в качестве примера создания мелодии. В этой главе вы познакомитесь с тоновыми звуками, а также узнаете, как в J2ME объединять звуки в единую мелодию. Тоновые звуки можно использовать для создания музыки и звуковых эффектов, т. к. они поддерживаются всеми телефонами стандарта MIDP 2.0.
В этой главе вы узнаете:
► о том, как, используя J2ME, добавить звуки в мобильные игры;
► основы теории тональных звуков и музыки;
► как запросить информацию об аудиовозможностях мобильного телефона;
► как воспроизводить звуки и их последовательности на мобильном телефоне.
Звук и мобильные игры
Несомненно, на сегодняшний день звук остается значимой стороной многих мобильных телефонов. Несмотря на возможность загрузить мелодию на мобильный телефон, до недавнего времени звукам уделялось очень мало внимания. Хотя динамики в телефонах имеют ряд ограничений (из-за размеров), через наушники можно слушать высококачественные звуки и музыку. Поэтому если вы еще не используете телефон как MP3-плеер, то, вероятно, будете вскоре. И если вы можете воспроизводить MP3 на мобильном телефоне, то вы можете слышать высококачественные звуковые эффекты и музыку в играх.
В J2ME есть поддержка мобильного аудио – Mobile Media API, который представляет набор классов и интерфейсов, поддерживающих разнообразные средства мультимедиа в зависимости от типа устройства. Интерфейс Mobile Media API состоит из двух различных наборов API:
► Mobile Media API – для устройств с расширенными средствами мультимедиа и воспроизведения звука;
► MIDP 2.0 Media API – для устройств, поддерживающих только аудио.
Неудивительно, что в настоящее время большинство мобильных телефонов поддерживают MIDP 2.0 Media API, поэтому мы уделим внимание этому интерфейсу. Чтобы вы лучше представляли, что можно сделать, используя MIDP 2.0 Media API, приведу список возможностей, поддерживаемых любым телефоном стандарта MIDP 2.0:
► основные функции управления: воспроизведение, остановка, пауза и т. п.;
► специальные средства, например, регулятор громкости;
► создание звуков и их последовательностей.
Вы уже знакомы со звуками и их последовательностями, иначе они называются рингтонами. Для игр вы можете использовать MIDP 2.0 Media API для создания звуков и их последовательностей – звуковых эффектов и музыки. Однако этим возможности API не исчерпываются. Он также поддерживает различные дополнительные типы мультимедиа, например, звуковые файлы, MIDI-музыку и MP3-аудио. Нет гарантии, что эти средства аудио поддерживаются всеми телефонами стандарта MIDP 2.0, но некоторые телефоны поддерживают эти возможности уже сегодня. Как у разработчика мобильных игр, у вас есть возможность использовать более совершенные средства работы со звуком, или использовать комбинированные приемы.