Страницы

пятница, 11 сентября 2009 г.

Игровой цикл - Теоретическая часть

Что же это такое и с чем его едят? Если вы когда нибудь программировали на серьёзном языке(типа с++, паскале или бейсике, например) и хотели сделать какую-нибудь игру, то знаете как не просто это сделать. Почему? Да потому что нет нужных инструментов для этого. Возможно вы даже нарыли какой-нибудь графический движок(не важно 2д или 3д), но игры как не было так и нет. Это всё потому что игра(как программа) нуждается в собственной архитектуре, коде. Настоящая игра-программа начинается с инициализаций всех вспомогательных инструментов(графика, сеть, звук и др. нужные вещи). Затем программа входит в бесконечный цикл, разорвать который может специальное событие задаваемое программистом (это может быть кнопка эскейп, а может выход в меню). Вот этот кусок кода называют — игровой цикл. (Продолжение темы)

Здесь хочу заметить, что в готовых системах разработки игр (типа Game Maker) уже есть не только графический движок, но и звуковой, сетевой, игровой и даже игровой цикл. Они могут быть не очень развиты, но они уже есть. Всё что вы можете сделать в таких системах, это развить их настолько, насколько можно.

Именно здесь начинается процесс создания игры, а не с рисования спрайтов или вывода звука. Для его создания нужно знать, а что же такое игра? Вот что говорит Wiki:

"Игра — вид деятельности, направленной на удовлетворение потребностей в развлечении, удовольствии, снятия напряжения, а также на развитие определенных навыков и умений."

Откинем пока последнюю часть (насчёт развития навыков). Игра удовлетворяет потребности игрока, развлекает. Исходя из этого вы строите игру. Если игра красивая или есть красивая мелодия, то удовлетворяется эстетическая сторона игрока. Если есть загадки, то удовлетворяется логическая часть. А если какие-то энергичные движения, то моторно-двигательные функций. Т.е. создатель, как психолог, может затронуть любую часть игрока. Это очень важно знать для достижения нужного эффекта от игры для игрока.

Вы уже решили, как вы будет влиять на игрока? Если да, тогда продолжаем. Следующее, что нам надо решить это: Какими инструментами будем пользоваться? В Game Maker'е некоторые есть (но вам их скорее всего не хватит), в обычных языках многого нет. Ну например, одна из самых часто используемых функций-инструментов - измерение расстояния между объектами. Естественно, каждый инструмент индивидуален для каждой игр. Например, в шахматах не нужно измерение расстояния. Подбирайте инструменты для вашей игры. Хочу заметить, что необязательно подбирать их абсолютно все с самого начала, но это облегчит вам жизни в дальнейшем.

Инструменты подобраны? Продвигаемся далее, в цикл. Теперь вам надо указать программе, где будет вход\выход и основные переходы в цикле. Т.е. с точки зрения программиста, программа выполняет весь код в цикле, а вам как геймдизайнеру, надо указать какую часть вы хотите выполнять. Продемонстрирую это на иллюстраций:


Большой квадрат — игровой цикл. Он постоянно повторяется, в Game Maker он повторяется каждый step, а вообще он повторяется с такой частотой насколько позволяет вычислительная мощность вашего компьютера. Поэтому очень важно синхронизировать игру и игровой цикл, чтобы всё было плавно, но не быстро (но это выходит за рамки данного поста). У него есть вход и выход. Перед входом обычно инициализируют все нужные системы(как было сказано в начале поста) и после этого входят в цикл. После выхода из цикла, очищаем память, выключаем все системы (это надо сделать даже в Game Maker, не говоря уж о чём-то серьёзном). Так-с, сейчас нам интересно устройство большого белого квадрата. В нём маленькие кубики - это куски кода отвечающие за ту или иную деятельность. Заштрихованные куски не выполняются в данный момент (т.е. начальное меню не работает, когда мы в игре и это правильно). Но можно сделать, чтобы какие-то куски работали вместе с другими (например, уровень работает, пока включён инвентарь). Здесь вы уже смотрите, какая часть вам нужна в данный момент, а какую надо выключить. На уровне работает объект "персонаж". Как это будет реализовываться уже зависит от вас и от ваших инструментов(т.е. будет ли это C++ или GML). Как правило, это делают через объекты и через операторы условия(if или switch).

Хочу ещё заметить, что игровой цикл это часть игры (в ней не хватает правил, наполнения и баланса). Это фундамент и он первичен. Сами понимаете, что на фундамент поставить стены проще, чем подложить фундамент под стены, так? После того как фундамент готов, вы приступаете к "стенам",т.е. объектам отвечающим за саму игру, за правила игры.
 
Те люди которые кроме Game Maker ничего не видели, прошу посмотреть на пример Druce. Он написал игровую программу игровым циклом так, как она бывает во "взрослых" языках. Это хороший пример, который заставит вас переосмыслить и понять структуру настоящей игры (хотя всё же с готовыми примесями). Что ещё хотелось бы добавить, это то что несмотря на то что структура кода кажется большой и сложной, это не так. В связке HGE + C++ вам придётся написать в 10 раз больше чтобы добится приблизительно такого же результата. Подумайте, осмыслите какой хороший инструмент Game Maker (несмотря на тормоза) и решите, а нужно ли вам создание игр.

Комментариев нет:

Отправить комментарий