понедельник, 27 августа 2012 г.

Теория и практика создания игр (часть 5)

Итак мы на финишной прямой, сейчас мы рассмотрим последние этапы создания игры:


9. Запись звука и музыки.
10. Устранение багов и лагов игры.
11. Создание релизной версии продукта.

9. Запись звука и музыки.
Как ни странно, но для меня этот этап стал самым сложным. Самое сложное это найти подходящие звуки для игры, у крупных фирм конечно есть уже готовые наборы звуков (или для них их записывают коммерческие студии), а вот простому программисту (или художнику) нужно постараться, чтобы записать все в домашних условиях. Для записи звуков нужно использовать качественный микрофон, чтобы не было шумов и щелчков. Формат звуков для Андроид - WAV. Насчет других не экспериментировал. С музыкой дела обстоят проще (хотя кому как), у меня есть небольшой опыт написания не очень сложных музыкальных композиций. У кого есть возможность (таких очень мало), лучше пишите все в живую (гитара, ударные , синтезатор, бас), у кого нету - используйте редакторы (например FL Studio), которых сейчас предостаточно. Конечно если у вас есть знакомый композитор, то попросите его написать музыку, которая будет передавать атмосферу игры (вспомните такие игры: FlatOut 2, PainKiller; какая там музыка!!! и как хорошо она вписывается в игру; хотя есть много игр в которых есть легкая незаметная мелодичная музыка, которая передает много эмоций).

Теория и практика создания игр (часть 4)

Продолжим рассмотрение этапов создания игры:

6. Программирование игровой логики (бета-версия).
7. Создание и подгонка уровней для игры.
8. Оптимизация программного кода игры.


6. Программирование игровой логики (бета-версия).
Допустим у нас уже есть хотя бы один игровой уровень определенного формата (желательно формат не менять на протяжении всей разработки, а продумать его сразу). Теперь нам нужно написать само ядро игры (движок), которое будет работать обрабатывать все элементы игры: логику, прорисовку, звуки и т.д.
Сейчас я вам приведу пример структуры ядра моей игры Gravity Booster:
1) Установка параметров системы (разрешение экрана, скорость обновления игры, загрузка CPU, параметры очистки экрана, параметры связанные с качеством физики в игре).
2) Загрузка всех медиафайлов игры (картинки, музыка, звуки и возможно уровни).
Если файлов очень много, то лучше всего этот процесс автоматизировать. Вот пример кода на App Game Kit (это моя основная среда разработки):

for i=1 to 100
    mediafile$="image/objects/"+str(i)+".png"
    if GetFileExists(mediafile$)=1
        LoadImage(i,mediafile$)
    endif
next i

Этот код можно еще упростить, если убрать проверку на существования файла.
Вот собственно и сама среда разработки (AGK):

3) Создание основного цикла игры. Он будет выглядеть примерно так:
   а) проверка на прикосновение к экрану;
   б) обработка меню;
   в) загрузка и выгрузка уровней;
   г) сохранение настроек и игрового прогресса;
   д) обработка геймплея (проверка на выигрыш и проигрыш);

Желательно писать основной цикл не сплошным кодом, а разбить его на отдельные процедуры. Пример основного цикла с Gravity Booster `a:


DO
nowtime=GetSeconds()

TouchX=Round(GetPointerX())
TouchY=Round(GetPointerY())

gosub _touch    // процедура проверки прикосновений к экрану
gosub _check_menu   //  основная процедура игры которая управляет остальными процедурами

if GetRawKeyState(27)=1 then exit
if stop_game=1 then exit
 Sync()
LOOP

Хотя основной цикл игры очень маленький, но за процедурой gosub _check_menu  скрываются около 1000 строк программного кода. В свою очередь эта процедура разбита еще на 10 меньших процедур.


4) Тестирование кода (бета-версии) игры. Исправление явных ошибок в коде (частые вылеты с игры, зависания). Если вы писали исходный код очень аккуратно, то вам может и не понадобится исправлять ошибки, но тестировать игру нужно по любому (чем чаще - тем лучше).

воскресенье, 26 августа 2012 г.

Теория и практика создания игр (часть 3)

Продолжим рассмотрение этапов создания игры:

4. Разработка редактора уровней.
5. Рисование всех графических элементов.

4. Разработка редактора уровней.
В принципе этот этап можно и вообще пропустить, если ваша игра будет генерировать сама уровни или будет состоять всего из одной локации (например стрельба из лука, футбольный симулятор). Конечно можно использовать и обычный Блокнот, но написание уровней (+ их редактирование) займет много времени, особенно если уровней 50 или 100+. Также можно использовать растровый графический редактор (суть метода в том, что мы рисуем уровень, где каждый пиксель обозначает определенный объект или его отсутствие на уровне), но это уже другая история, так как работа с данными графического объекта подразумевает использование низкоуровневого языка программирования (или использование готовых кодов для определенного формата рисунка).
Дальше я приведу пример моего редактора уровней для Gravity Booster`a и самих уровней.
Вот так выглядит сам редактор уровней:
Справа сверху сама игровая область на которую мы и размещаем наши объекты. Все объекты (рисунки) загружаются с папки и размещаются в правом верхнем углу экрана. Внизу находятся разные параметры игры и объектов (от номера уровня до типа гравитации на нем). Все очень просто, но реализация такого редактора требует времени и терпения.

Дальше я приведу пример самого уровня ( как он выглядит в файле):

Теория и практика создания игр (часть 2)

Разделим процесс создания игры на несколько этапов:
  1. Создание информационной модели игры.
  2. Прорисовка базовых графических элементов.
  3. Написание альфа-геймплея игры. 
  4. Разработка редактора уровней.
  5. Рисование всех графических элементов.
  6. Программирование игровой логики (бета-версия).
  7. Создание и подгонка уровней для игры.
  8. Оптимизация программного кода игры.
  9. Запись звука и музыки.
  10. Устранение багов и лагов игры. 
  11. Создание релизной версии продукта.
Порядок некоторых этапом может меняться (кому как удобно). Если работает группа разработчиков, то конечно они все эти этапы проходят одновременно. Так как я работаю один мне удобней использовать именно этот порядок.

1. Создание информационной модели игры.
На этом этапе нужно продумать все аспекты игры: от главного героя и декораций до геймплея и реализации на конкретном языке программирования. Лучшим (но не обязательным) решением для одного человека есть использование интерпретатора (языка программирования высокого уровня). Хотя если у вас много свободного времени, есть навыки в программировании и у вас есть желание написать очень качественную игру можете использовать любой доступный (мощный) язык программирования. Но подумайте вот над чем: сколько времени займет написание движка игры на низкоуровневом языке программирования ( в интерпретаторе 1 строка на С++ 10 строк), сколько вам нужно нарисовать картинок (10, 100 или 1000 картинок) и сколько у вас терпения и нервов? Конечно при этом (использование интерпретаторов) страдает производительность игры, но современные устройства становятся мощнее с каждым днем, и если вы не будете использовать 1000 спрайтов которые динамически изменяются, то все будет хорошо. Я сначала писал на Dark Basic Profesional, потом вышел AGK (мультиплатформенный) и я начал его активно использовать.


Теория и практика создания игр (часть 1)

Создание игры - это процесс длинный, творческий и очень технический. Каждая игра начинает свою жизнь с мысли разработчика. Это можно сказать первый этап создания любой игры. Он является и самым важным этапом, так как для большинства проектов этот этап является и последним (молодым разработчикам не хватает терпения, мотивации, сил и практических умений). Я думаю много кто из вас (начинающих разработчиков компьютерных игр) читал огромное количество статей (возможно и книг), в которых красиво описано как сделать игру своей мечты. Я тоже читал такие статьи, но меня они не сильно радовали. Они имели громкие названия (например "Создание игровых уровней в 3d Max", "Создание шутера с нуля" и т.д. ), но по сути не несли никакой полезной информации. В них просто было написано, что нужно придумать оригинальный дизайн, увлекательный игровой мир, харизматичных персонажей, убойное оружие (и этому было посвящено целую книгу), хотя это и так все понятно. А вот насчет технических и структурных аспектов игры там не упоминалось ни слова. Я предлагаю вам ознакомиться с группой моих статей, в которых я опишу процесс создания игры для ANDROID`а во всех его аспектах.

Теория и практика создания игр (часть 2)
Теория и практика создания игр (часть 3)
Теория и практика создания игр (часть 4)
Теория и практика создания игр (часть 5)