Майкл Моррисон - Создание игр для мобильных телефонов
- Название:Создание игр для мобильных телефонов
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Майкл Моррисон - Создание игр для мобильных телефонов краткое содержание
Книга «Создание игр для мобильных телефонов» – это практическое руководство, которое поможет разработать и реализовать игру для мобильного телефона.
Книга написана простым языком, не содержит сложной и скучной теории программирования и шаг за шагом знакомит с методикой создания технологии «plug-and-play» применительно к созданию огромного количества игр.
В издание включены подробные описания и примеры кодов для четырех игр, а также информация, необходимая для реализации вашей собственной задумки.
Если вы любите играть в игры и занимаетесь программированием, то эта книга – для вас!
Перевод: К. Михалкин
Создание игр для мобильных телефонов - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
layers = new LayerManager();
layers.append(playerSprite);
for (int i = 0; i < 3; i++) {
layers.append(blobboSprite[i]);
layers.append(jellySprite[i]);
layers.append(timmySprite[i]);
layers.append(explosionSprite[i]);
}
for (int i = 0; i < 10; i++) {
layers.append(missileSprite[i]);
}Несмотря на то что в игре Space Out это не столь значительно, не забудьте, что порядок добавления спрайтов в менеджер слоев определяет порядок вывода их на экран, Z-глубину, – первый спрайт, добавленный с помощью метода append(), будет выведен на экран поверх остальных. Но это не относится к игре Space Out, поскольку порядок вывода спрайтов на экран в ней не важен. Звуковые эффекты и музыка играют важную роль в игре Space Out, что, вероятно, неудивительно. Ниже приведен код, выполняющий инициализацию проигрывателей:
try {
InputStream is = getClass().getResourceAsStream("Music.mid");
musicPlayer = Manager.createPlayer(is, "audio/midi");
musicPlayer.prefetch();
musicPlayer.setLoopCount(-1);
is = getClass().getResourceAsStream("Explosion.wav");
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 добавлена доля реализма, такое различие скоростей несколько усложняет игру. Так, при движении влево сложнее скрыться от ракет.
Код обработки ввода реагирует на нажатие клавиши Огонь тоновым сигналом и вызовом метода addMissle(). О том, как работает этот метод, вы узнаете позже в этой главе, а пока важно отметить, что в этот метод передается спрайт игрока. Идея метода addMissle() заключается в том, что он запускает ракету спрайта, который передается в него в качестве параметра. Итак, вы можете вызвать метод addMissle() и передать в него спрайт игрока или пришельца, в результате будет запущена ракета.
Основная работа метода update() – это обновление спрайтов. Приведенный ниже код обновляет спрайты пришельцев и взрывов:
for (int i = 0; i < 3; i++) {
if (blobboSprite[i].isVisible()) {
blobboSprite[i].update();
blobboSprite[i].nextFrame();
}
if (jellySprite[i].isVisible()) { //Обновляются только видимые спрайты
jellySprite[i].update();
jellySprite[i].nextFrame();
}
if (timmySprite[i].isVisible()) {
timmySprite[i].update();
timmySprite[i].nextFrame();
}
if (explosionSprite[i].isVisible()) {
if (explosionSprite[i].getFrame() < 3) //Этот код создает анимацию взрыва, после чего спрайт взрыва исчезает
explosionSprite[i].nextFrame();
else
explosionSprite[i].setVisible(false);
}
}Этот код достаточно прост, здесь обновляются и перемещаются спрайты пришельцев и взрывов. Важно понять, что обновляются только видимые спрайты. Возможно, также важным является и то, что спрайты взрыва скрываются после того, как все фреймы показаны.
Совет Разработчику
Чтобы сделать игру более эффективной и не создавать и не удалять объекты динамически, все спрайты создаются в начале игры, а затем скрываются и отображаются, чтобы создать эффект разрушения. В любой момент в игре «существуют» только видимые спрайты.
Следующий фрагмент метода update() достаточно велик, поскольку в нем реализуется большая часть игровой логики.
Код, о котором я говорю, – это код обновления ракет. Он очень важен, поскольку ход игры зависит от того, с каким спрайтом столкнется ракета – со спрайтом игрока или пришельца. Ниже приведен код, работающий со спрайтами ракет:
for (int i = 0; i < 10; i++) {
if (missileSprite[i].isVisible()) {
// ракета игрока?
if (missileSprite[i].getFrame() == 0) { //Индекс фрейма спрайта ракеты используется для определения типа ракеты
for (int j = 0; j < 3; j++) {
// ракета попала в пришельца Блоббо?
if (blobboSprite[j].isVisible())
if (missileSprite[i].collidesWith(blobboSprite[j], false)) {
// Воспроизвести звук разрушения
try {
Manager.playTone(ToneControl.C4 – 6, 100, 100);
}
catch (Exception e) {
}
// создать взрыв
addExplosion(blobboSprite[j]);
// спрятать спрайт и увеличить счет
blobboSprite[j].setVisible(false); //При столкновении спрайта ракеты игрока со спрайтом пришельца оба спрайта исчезают
missileSprite[i].setVisible(false);
score += 10;
break;
}
// ракета попала в пришельца Джелли?
if (jellySprite[j].isVisible())
if (missileSprite[i].collidesWith(jellySprite[j], false)) {
// воспроизвести звук разрушения
try {
Manager.playTone(ToneControl.C4 – 6, 100, 100);
}
catch (Exception e) {
}
// создать взрыв
addExplosion(jellySprite[j]);
// спрятать спрайт и увеличить счет
Читать дальшеИнтервал:
Закладка: