Программирование игр под Android
Цель данной книги научить вас создавать полноценные игры для платформы Android.
Марио Цехнер «Программирование игр под Android», Питер, 2013 год, 688 стр., (8,97 мб, pdf)
Программирование игр под Android одно из самых увлекательных, а зачастую и доходных направлений в разработке мобильных приложений.
В книге собраны материалы необходимые для разработки игр под Android.Узнаете как настроить среду разработки ( Android SDK) с использованием Eclipse ( свободная интегрированная среда разработки модульных кроссплатформенных приложений) и Android Development Tools, в книге описан порядок установки, настройки и отладки. Краткий обзор и настройка среды Eclipse.
Обучение проходит начиная с основ программирования, написания движка для игр, отладки на эмуляторе и собственно запуска. В издании рассмотрены процесс создания двухмерных игр их графика, аудио, игровая механика, физика и спрайтовая анимация, а также добавление в игры трехмерных эффектов.
Оглавление
Введение 16
Целевая аудитория 16
Как построена эта книга 16
Как получить исходные коды 17
Об авторе 18
О техническом редакторе 19
Благодарности 20
От издательства .21
Глава 1. Android: новенький в классе .22
Краткая история Android .23
Разделение .24
Роль Google .24
Android Open Source Project 25
Android Market 25
Соревнования, распространение устройств и Google I/O 26
Возможности и архитектура Android 26
Ядро 28
Среда выполнения и Dalvik 28
Системные библиотеки 28
Фреймворк приложения .29
Software Development Kit .30
Сообщество разработчиков 31
Устройства, устройства, устройства! .32
Аппаратная составляющая .32
Первое поколение, второе поколение, следующее поколение .33
Игры для мобильников — особая штука 37
Игровая консоль в каждом кармане 38
Всегда на связи 39
Простые и крутые 39
Крупный рынок, мелкие разработчики .40
Подводя итог 41
Глава 2. Первые шаги с Android SDK 42
Настройка среды разработки 42
Настройка JDK 43
Настройка Android SDK 43
Установка Eclipse .44
Установка плагина ADT для Eclipse 45
Краткий обзор среды Eclipse 47
Hello World в стиле Android .49
Создание проекта 49
Исследование проекта .50
Написание кода приложения .51
Запуск и отладка приложений Android .54
Подключение устройства .54
Создание виртуального устройства Android .55
Запуск приложения .56
Отладка приложения 59
LogCat и DDMS .62
Использование ADB .64
Подводя итог 65
Глава 3. Разработка игр 67
Жанры: на любой вкус 68
Казуальные игры 68
Головоломки 70
Аркады и активные игры .71
«Защита башни» .73
Что-то новенькое .74
Дизайн игры: карандаш сильнее кода .75
Основная механика игры .76
Сюжет и оформление .78
Экраны и трансформации .78
Код: скучная рутина 83
Управление приложением и окнами .84
Ввод 84
Файловый ввод-вывод .88
Звук .89
Графика .93
Игровая среда 107
Подводя итог 115
Глава 4. Android для разработчиков игр 116
Определение приложения Android: файл манифеста .116
Элемент .118
Элемент .118
Элемент .120
Элемент 122
Элемент .123
Элемент .125
Настройка проекта игры на Android за 10 простых шагов 125
Назначение значка для вашей игры 127
Основы Android API 128
Создание тестового проекта 129
Жизненный цикл активности 133
Поддержка устройств ввода 140
Поддержка файловой системы .157
Обработка звука 163
Потоковая музыка 168
Основы программирования графики 172
Полезные советы .197
Подводя итог 198
Глава 5. Android Game Development Framework 199
План атаки 199
Класс AndroidFileIO 200
AndroidAudio, AndroidSoundи AndroidMusic — все о звуке! .201
AndroidInput и AccelerometerHandler 207
AccelerometerHandler: что сверху? 207
Класс Pool: используем повторно! .209
KeyboardHandler: вверх, вверх, вниз, вниз, влево, вправо .211
Обработчики касаний 216
AndroidInput: отличный координатор .223
AndroidGraphicsи AndroidPixmap: двойная радуга 226
Обработка различных размеров экрана и разрешений .226
AndroidPixmap: пикселы для каждого .232
AndroidGraphics: то, что нужно для рисования .233
AndroidFastRenderView: собрать-растянуть, собрать-растянуть 237
AndroidGame: свяжем все вместе .240
Подводя итог 245
Глава 6. «Мистер Ном» покоряет Android .246
Создание ресурсов .246
Настройка проекта .248
MrNomGame: основная активность .249
Ресурсы: удобное хранилище ресурсов .249
Настройки: сохранение пользовательских настроек
и таблицы рекордов .251
LoadingScreen: получение ресурсов с накопителя .253
Главное меню .255
Класс(ы) HelpScreen .258
Экран рекордов .260
Отрисовка чисел: краткое введение 261
Реализация экрана 263
Абстрагирование .266
Абстрагирование мира мистера Нома: модель, вид, контроллер 266
Класс GameScreen 279
Подводя итог .287
Глава 7. OpenGL ES: первое представление 288
Что такое OpenGL ES и почему об этом стоит задуматься 288
Модель разработки: аналогия 289
Проекции 291
Нормализованное пространство устройства и область просмотра 293
Матрицы 294
Конвейер визуализации .295
Перед стартом .296
GLSurfaceView: облегчает жизнь с 2008 года 297
GLGame: реализация игрового интерфейса . .300
Мама, смотри: я нарисовал красный треугольник! .308
Определение области просмотра 309
Определение матрицы проекции 309
Определение треугольников .313
Все вместе 317
Определение цвета вершины .321
Обработка текстур: легкая работа с фоновыми рисунками .325
Координаты текстур 325
Загрузка растровых изображений .327
Фильтрация текстур 329
Удаление текстур 330
Полезный фрагмент кода .330
Активация текстурирования 331
Все вместе .331
Класс Texture 334
Индексированные вершины: используем повторно .336
Все вместе .338
Класс Vertices .340
Альфа-смешивание: я вижу тебя насквозь 343
Другие примитивы: точки, линии, полоски и конусы .347
2D-преобразования: матрица «Модель — представление» 349
Пространство мира и модели .349
Снова матрицы 351
Первый пример с использованием переноса .352
Другие преобразования .357
Оптимизация производительности 361
Измерение частоты кадров 361
Любопытный случай с Hero на Android 1.5 363
Почему OpenGL ES-рендеринг такой медленный? .363
Убираем ненужные изменения состояний .365
Уменьшение размера текстуры — выбираем меньше пикселов .367
Уменьшаем количество вызовов методов OpenGL ES/JNI .368
Концепция связывания вершин .369
В заключение .372
Подводя итог .373
Глава 8. Трюки при разработке 2D-игр 375
Перед стартом 375
Сначала был вектор 376
Работа с векторами 377
Немного тригонометрии .379
Реализация класса Vector .381
Простой пример использования .385
Немного 2D-физики 390
Ньютон и Эйлер — друзья навек .390
Сила и масса .392
Манипулируем теоретически .392
Манипулируем на практике .393
Определение столкновений и представление объектов в 2D .398
Ограничивающие фигуры .398
Создание ограничивающих фигур .401
Атрибуты игровых объектов .404
Широкая и узкая фазы определения столкновений .405
Усложненный пример .412
Камера в 2D 426
Класс Camera2D .430
Пример 431
Атлас текстур: не ленись — поделись .433
Фрагменты текстур, спрайты и пакеты: скрываем OpenGL ES .439
Класс TextureRegion .440
Класс SpriteBatcher .441
Используем класс SpriteBatcher .447
Спрайт-анимация .451
Класс Animation .452
Пример .453
Подводя итог .457
Глава 9. «Большой прыгун»: двухмерная игра, написанная с помощью OpenGL ES .458
Основная игровая механика .458
Предыстория и стиль 460
Экраны и переходы .460
Определение игрового мира .462
Создание ресурсов .465
Элементы пользовательского интерфейса .465
Обработка текста с помощью растровых шрифтов .467
Элементы игры 470
Атлас текстур спешит на помощь 472
Музыка и звук 473
Реализация «Большого прыгуна» 473
Класс Assets 473
Класс Settings .477
Основная активность .478
Класс Font 479
Экран GL .481
Экран главного меню 482
Экраны помощи .485
Экран лучших результатов .488
Классы эмуляции игрового мира .491
Игровой экран .508
Класс WorldRenderer .516
Оптимизировать или не оптимизировать? 520
Подводя итог 521
Глава 10. Open GL ES: займемся 3D 522
Перед стартом .522
Вершины в 3D .523
Vertices3: сохраняем 3D-координаты .523
Пример .526
Перспективная проекция: ближе, больше .529
Z-буфер: наводим порядок .532
Исправляем последний пример .533
Смешиваем: за вами ничего нет 535
Точность z-буфера и z-схватка .538
Определяем 3D-ячейки .540
Куб: Hello World в 3D .540
Пример .543
Снова матрицы и преобразования .547
Матричный стек .547
Иерархическая структура матричного стека .550
Простая система камер .557
Подводя итог 562
Глава 11. Трюки при разработке 3D-игр 563
Перед стартом .563
Векторы в 3D .564
Освещение в OpenGL ES .569
Как работает освещение .569
Источники освещения .571
Материалы .572
Как OpenGL ESрассчитывает освещение: нормали вершин .573
На практике .574
Несколько примечаний к освещению в OpenGL ES .589
Mip-текстурирование .590
Простые камеры .595
Камера с видом от первого лица (Эйлерова камера) .595
Пример работы с Эйлеровой камерой .599
Камера с видом от третьего лица .605
Загрузка моделей 607
Формат Wavefront OBJ .608
Реализация загрузчика файлов формата OBJ 609
Использование класса OBJ Loader .614
Несколько замечаний по загрузке моделей 615
Немного физики в 3D 615
Определение столкновений и представление объектов в 3D 616
Ограничивающие фигуры в 3D .617
Проверка пересечения ограничивающих сфер .617
Классы GameObject3Dи DynamicGameObject3D 619
Подводя итог .620
Глава 12. Droid Invaders: большой финал .622
Основы игровой механики .622
Сюжет и художественное оформление 624
Экраны и переходы .624
Определение игрового мира .626
Создание ресурсов .627
Активы пользовательского интерфейса .627
Игровые ресурсы .629
Звук и музыка .631
План разработки .631
Класс Assets .631
Класс Settings .635
Основная активность .636
Экран главного меню .637
Экран настроек .640
Классы эмуляции .643
Класс Shield .644
Класс Shot .644
Класс Ship .645
Класс Invader .647
Класс World .651
Класс GameScreen .657
Класс WorldRenderer .665
Оптимизация .671
Подводя итог 672
Глава 13. Публикуем вашу игру .673
Несколько слов о тестировании .673
Становимся зарегистрированным разработчиком 674
Подписываем APK-файл вашей игры 675
Размещение игры на Android Market .679
Загрузка ресурсов .680
Описание деталей .680
Настройки публикации .681
Публикуем! .681
Маркетинг 682
Консоль разработчика 682
Подводя итог .683
Глава 14. Что дальше? .684
Становимся социальными 684
Определение местоположения 684
Многопользовательская функциональность .685
OpenGL ES 2.0 и выше .685
Фреймворки и движки .685
Ресурсы в сети Интернет .687
Завершающие слова 687
Глава из книги:
Фреймворки и движки
Если вы приобрели эту книгу, уже имея какие-то знания касательно разработки игр, вы можете задаться вопросом, почему я не выбрал один из доступных фреймворков, предназначенных для разработки игр для ОС Android. Изобретать колесо заново — это плохо, не так ли? Я хотел, чтобы вы четко усвоили принципы. Хотя это иногда может быть неудобно, в итоге это окупится.
Благодаря приобретенным здесь знаниям вы сможете с легкостью выбрать любое готовое решение, я надеюсь, что вы сможете определить, какие преимущества оно вам дает. Что дальше? Для платформы Androidсуществует несколько коммерческих и открытых фреймворков и движков. В чем разница между фреймворком и движком? Фреймворк позволяет вам контролировать каждый аспект вашей среды разработки игр. Правда, вам самим придется разбираться, как именно решить ту или иную задачу (например, как организовать ваш игровой мир, как обрабатывать эк-раны и переходы и т. д.).
В этой книге мы разработали (очень простой) фреймворк, на котором создали наши игры.Движок, с другой стороны, ориентирован на специфические задачи. Он диктует вам, как вы должны решать те или иные проблемы, предоставляя вам простые в использовании модули для типичных задач и общую архитектуру вашей игры. Обратная сторона медали — ваша игра может не соответствовать этим готовым решениям. Вам часто придется самостоятельно модифицировать движок для того, чтобы достичь своих целей, что может быть невозможно, если его исходный код вам недоступен.
Движки могут значительно сократить время разработки, но могут и увеличить его в том случае, если вы встретите проблему, которая не была предусмотрена его создателями. Выбирайте между фреймворком и движком, основываясь на персональных предпочтениях, бюджете и целях. Как независимый разработчик, я предпочитаю фреймворки, поскольку они обычно проще для понимания и позволяют мне по-ступать так, как мне хочется.Выбирайте собственный идеал.Далее приведен список фреймворков и движков, которые могут ускорить процесс разработки.
Unreal Development Kit (www.udk.com) — коммерческий игровой движок, работающий на многих платформах. Он был разработан компанией Epic Games, создателем игры Unreal Tournament. Это говорит о том, что движок довольно качественный. Он использует собственный скриптовый язык.
Unity (www.unity3d.com) — еще один коммерческий игровой движок, имеющий отличные инструменты и функциональность. Он тоже работает на множестве платформ, включая iOS и Android, а также браузеры, и прост в освоении. Он позволяет использовать множество языков для программирования игровой логики, но Java им не поддерживается.
PCT-AE (www.jpct.net/jpct-ae/) — портированная на Android версия движка
PCT, основанного на Java. У него есть несколько отличных особенностей, помогающих в трехмерном программировании. Он работает как со стационарны-ми компьютерами, так и на Android. Его исходный код закрыт.
Ardor3D (www.ardor3d.com) — очень мощный движок для трехмерного программирования, основанный на Java. Работает как для Android, так и для стационарных компьютеров, имеет открытый исходный код и отличную документацию.
libgdx (code.google.com/p/libgdx/) — открытый фреймворк вашего покорного слуги, основанный на Java и пригодный для написания 2D- и 3D-игр. Работает на Windows, Linux, Mac OS X и, конечно же, на Android без модификаций кода. Вы можете разработать и протестировать приложение на стационарном компьютере без необходимости иметь под рукой устройство или медленный эмулятор (или ожидать минуту, пока АРК-файл загрузится на устройство).Возможно, после прочтения этой книги он понравится вам больше всего — в этом и заключался мой коварный план. Заметили ли вы, что этот пункт лишь немного больше, чем другие?
Slick-AE (http://slick.cokeandcode.com) — портированная на Android версия фреймворка Slick, основанного на Java, построенная над libgdx.Он предоставляет множество различной функциональности и простой в использовании API для разработки 2D-игр. Конечно же, он кроссплатформенный и открытый.
AndEngine (www.andengine.org) — приятный, основанный на Java, предназначенный только для ОС Android двухмерный движок, который частично основан на коде libgdx (он является открытым). Его концепции похожи на концепции знаменитого движка cocos2d, предназначенного для разработки игр для iOS.
Добавить комментарий