Майкл Моррисон - Создание игр для мобильных телефонов
- Название:Создание игр для мобильных телефонов
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Майкл Моррисон - Создание игр для мобильных телефонов краткое содержание
Книга «Создание игр для мобильных телефонов» – это практическое руководство, которое поможет разработать и реализовать игру для мобильного телефона.
Книга написана простым языком, не содержит сложной и скучной теории программирования и шаг за шагом знакомит с методикой создания технологии «plug-and-play» применительно к созданию огромного количества игр.
В издание включены подробные описания и примеры кодов для четырех игр, а также информация, необходимая для реализации вашей собственной задумки.
Если вы любите играть в игры и занимаетесь программированием, то эта книга – для вас!
Перевод: К. Михалкин
Создание игр для мобильных телефонов - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
jellySprite[j].setVisible(false);
missileSprite[i].setVisible(false);
score += 15;
break;
}
// ракета попала в спрайт пришельца Тимми?
if (timmySprite[j].isVisible())
if (missileSprite[i].collidesWith(timmySprite[j], false)) {
// воспроизвести звук разрушения
try {
Manager.playTone(ToneControl.C4 – 6, 100, 100);
}
catch (Exception e) {
// создать взрыв
addExplosion(timmySprite[j]);
// спрятать спрайт и увеличить счет
timmySprite[j].setVisible(false);
missileSprite[i].setVisible(false);
score += 20; //Поскольку пришельцы Тимми летают быстрее других, за его уничтожение дается больше очков
break;
}
}
}
// ракета пришельца?
else {
// ракета попала в спрайт автомобиля?
if (missileSprite[i].collidesWith(playerSprite, false)) {
// воспроизвести звук взрывающегося автомобиля
try {
explosionPlayer.start(); //Если ракета пришельца попадает в автомобиль, воспроизводится звук взрыва
}
catch (MediaException me) {
}
// создать взрыв
addExplosion(playerSprite);
// установить спрайт игрока в исходное положение
playerSprite.setPosition(0,
getHeight() – playerSprite.getHeight() – 10); //Положение автомобиля игрока изменяется, чем создается иллюзия нового автомобиля
playerSprite.setXSpeed(4);
playerSprite.setYSpeed(0);
// спрятать спрайт ракеты
missileSprite[i].setVisible(false);
// проверить, закончена ли игра
if (carsLeft– == 0) {
// остановить музыку
try {
musicPlayer.stop();
}
catch (MediaException me) {
}
// воспроизвести звук окончания игры
try {
gameoverPlayer.start();
}
catch (MediaException me) {
}
// спрятать спрайт автомобиля
playerSprite.setVisible(false);
gameOver = true;
return;
}
}
}
missileSprite[i].update();
}
}Приведенный код проверяет столкновение спрайта ракеты с другими игровыми спрайтами. Это очень важная информация, поскольку она определяет, как взаимодействует спрайт ракеты с прочими спрайтами. Ракеты игрока могут подбить только пришельцев, а ракеты пришельцев – игрока.
Совет Разработчику
Чтобы спрайты пришельцев не уничтожили друг друга, спрайты ракет разработаны так, что они не могут уничтожить спрайты пришельцев. Поэтому код работы со спрайтами ракет сначала проверяет, кому принадлежит ракета, и уже потом проверяется столкновение спрайта ракеты с другими спрайтами. Кроме того, это позволяет минимизировать число проверок столкновений, делая код игры более эффективным.
Если вы внимательно изучите приведенный код, то увидите, что при попадании ракеты в спрайт пришельца выполняются следующие действия:
1. воспроизводится тоновый сигнал;
2. создается спрайт взрыва;
3. спрайты пришельца и ракеты скрываются;
4. счет увеличивается;
Если ракета – это ракета пришельца, то выполняются следующие действия:
1. воспроизводится звуковой файл;
2. создается спрайт взрыва;
3. спрайт автомобиля возвращается в исходное положение у левого края экрана;
4. спрайт ракеты скрывается;
5. проверяется окончание игры.
Если значение переменной carsLeft показывает, что у игрока закончились автомобили, то игра заканчивается. Музыка останавливается, воспроизводится звук конца игры, спрайт автомобиля скрывается, а значение переменной gameOver становится равным true.
Совет Разработчику
Другой способ сделать игровой код эффективнее – передать в метод collidesWith() в качестве второго параметра значения false. Если вы вспомните, то этот параметр определяет, будет ли использоваться пиксельный метод детектирования столкновений. В игре Space Out такой способ детектирования изображений не нужен.
Следующий фрагмент кода в методе update() добавляет спрайты в игру случайным образом. Скорость, с которой новые пришельцы появляются в игре, зависит от уровня сложности. Следовательно, вы можете плавно изменять сложность игры, увеличивая скорость появления пришельцев. Это можно сделать на основании счета игры:
if (score < 250) {
if (rand.nextInt() % 40 == 0) //Это самый простой уровень игры, который заканчивается, когда игрок набирает 250 очков
addAlien();
}
else if (score < 500) {
if (rand.nextInt() % 20 == 0)
addAlien();
}
else if (score < 1000) {
if (rand.nextInt() % 10 == 0)
addAlien();
}
else {
if (rand.nextInt() % 5 == 0) //Это самый сложный уровень игры, который начинается, когда игрок набирает 1000 очков
addAlien();
}Если счет меньше 250, то вероятность добавления нового спрайта на каждом игровом цикле равна 1/40. Это соответствует самому простому уровню игры. Сложность игры постепенно увеличивается, пока счет не станет равным 1000. В этом случае вероятность появления пришельца в игровом цикле равна 1/5. Если вы задумались о том, сколько времени требуется для выполнения одного цикла, то знайте, что пришельцы появляются достаточно быстро. Последний фрагмент кода метода update() случайным образом запускает ракеты пришельцев:
if (rand.nextInt() % 4 == 0) {
switch (Math.abs(rand.nextInt() % 3)) {
// стреляет Блоббо
case 0:
for (int i = 0; i < 3; i++)
if (blobboSprite[i].isVisible()) {
addMissile(blobboSprite[i]);
break;
}
break;
// стреляет Джелли
case 1:
for (int i = 0; i < 3; i++)
if (jellySprite[i].isVisible()) {
addMissile(jellySprite[i]);
break;
}
break;
// стреляет Тимми
case 2:
for (int i = 0; i < 3; i++)
if (timmySprite[i].isVisible()) {
addMissile(timmySprite[i]);
break;
}
break;
}
}Этот код случайным образом определяет, должен ли выстрелить пришелец. Соотношение 1 к 4 было выведено методом проб и ошибок. Если в результате выполнения кода должна быть запущена ракета, то выбирается ракета пришельца. Затем определяется видимый спрайт нужного типа, после чего вызывается метод addMissle() для запуска ракеты. Обратите внимание, что спрайт пришельца, запускающего ракету, передается в метод addMissle().
Совет Разработчику
Подобно тому, как возрастает скорость появления пришельцев с увеличением счета игры, можно увеличивать и число запускаемых пришельцами ракет.
Вывод графики
Вывод графики на экран сравним с методом обновления игры. В листинге 18.3 приведен код метода draw() класса SOCanvas.
Листинг 18.3. Метод draw() класса SOCanvas выводит фоновое изображение и игровые слои, а также при необходимости сообщение о завершении игры
private void draw(Graphics g) {
// вывод звездного ночного неба
g.drawImage(background, 0, 0, Graphics.TOP | Graphics.LEFT);
// вывод слоев
layers.paint(g, 0, 0);
// вывод оставшегося числа автомобилей и счета
for (int i = 0; i < carsLeft; i++)
g.drawImage(smallCar, 2 + (i * 20), 2, Graphics.TOP | Graphics.LEFT); //Этот код выводит число оставшихся автомобилей
g.setColor(255, 255, 255); // white
g.setFont(Font.getFont(Font.FACE_SYSTEM,
Font.STYLE_PLAIN, Font.SIZE_MEDIUM));
g.drawString(Integer.toString(score), 175, 2,
Graphics.TOP | Graphics.RIGHT);
if (gameOver) {
// вывести сообщение о конце игры и счет
g.setColor(255, 255, 255); // white
g.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_BOLD,
Font.SIZE_LARGE));
g.drawString("GAME OVER", 90, 40, Graphics.TOP | Graphics.HCENTER);
g.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_BOLD,
Font.SIZE_MEDIUM));
g.drawString("Final Score : " + score, 90, 70, Graphics.TOP |
Graphics.HCENTER);
}
// вывести графику на экран
flushGraphics();
}
Первая часть кода выводит фоновое изображение на экран – звездное небо в пустыне. Затем одной строкой кода выводятся слои, за которыми следуют вывод оставшихся автомобилей и счет в игре. Если игра окончена, то выводится соответствующее сообщение, состоящее из слов «GAME OVER» и числа набранных очков.
Читать дальшеИнтервал:
Закладка: