Шаблон сценариев для игр - PullRequest
4 голосов
/ 07 января 2011

Я веб-разработчик и пытаюсь создать игру. После некоторых исследований не удалось найти каких-либо окончательных шаблонов дизайна для игр, кроме State Based (что, похоже, и делает каждый).

Люди говорят о скриптинге в играх, но я просто не мог найти хороший ресурс для этого или, еще лучше, хороший пример выполнения кода.

Я проверил Lua и Groovy, но я немного растерялся, как использовать эти языки сценариев, интегрированные с базовым кодом игры.

Любая помощь приветствуется (книги, сайты и т. Д.)

Ответы [ 2 ]

5 голосов
/ 07 января 2011

Существуют различные способы поддержки сценариев в играх; это скользящая шкала.

С одной стороны, вы можете запустить практически все, используя язык сценариев, так что вы определяете все свои данные, логику и т. Д. С помощью сценариев и просто имеете некоторые основные функциональные возможности движка в C / C ++. В этой схеме почти все на стороне C / C ++ * находится именно на той стороне разрыва, чтобы сделать его достаточно эффективным или потому, что оно уже написано на этом языке и будет дорогостоящим для переопределения.

С другой стороны, вы можете определить большую часть своего игрового кода и данных, определенных в C / C ++, и реализовать привязки и / или обратные вызовы, чтобы позволить некоторую настройку с помощью сценариев. Привязки (например, LuaBind ) позволяют вашим сценариям получать и устанавливать значения / вызывать функции, которые не определены в коде сценария, но на стороне C / C ++. Обратные вызовы позволяют сценариям прослушивать инициируемые игровые события; Например, у вас может быть скрипт, который вызывается, когда сущность собирается получить урон. Затем вы можете настроить / расширить свою игровую логику с помощью сценариев.

Книга Архитектура игрового движка хорошо объясняет возможные варианты, хотя в ней нет примера кода или чего-либо подобного.

как сценариев очень сильно зависит от того, какой у вас стиль реализации и какие языки ядра и сценариев вы выберете. Если вы хотите что-то более конкретное, попробуйте найти некоторые языковые варианты (например, C ++ и Lua), а затем отследить некоторые учебники, такие как этот .

, почему зависит от выбранного подхода, но обычно он разделяет функциональность / поведение / данные игрового процесса от внутренностей вашего игрового движка. Это облегчает изменение, поскольку вы можете перезагрузить сценарии во время выполнения, не перестраивая остальную часть проекта. Хорошо реализованная система сценариев также позволяет людям участвовать или модифицировать / расширять игру, не беспокоя программиста.

Конкретный пример:

Возможно, вы захотите создать функциональность, которая скажет игроку, какой урон он нанес за раунд.

Если вы делаете это на стороне C ++ / core, это означает, что программист должен загрузить очень специфический код для выполнения очень специфической функции, перестроить весь проект и развернуть новую версию. Затем они проверяют с дизайнером, что все великолепно. Если это не так, им приходится перекодировать и перестраивать, тратя много времени.

С хорошо разработанной системой сценариев это просто случай, когда вы помещаете сценарий round_damage.lua в папку сценариев. Сценарий автоматически включается и активируется при запуске игры, и каждый раз, когда игрок получает урон, запускается обработчик «OnDamageReceived». Когда раунд заканчивается, вызывается обратный вызов OnRoundEnded, и сценарий отображает сообщение.

Предоставляя богатый набор хуков, сценарист может делать все это без помощи программиста. Если они допустят ошибку или захотят попробовать что-то еще, сценарист может немедленно перезагрузить сценарий, не закрывая игру.

* Заметьте, я говорю C / C ++ для ядра движка, потому что это общий выбор, но это может быть любой язык, достаточно быстрый для ваших целей.

4 голосов
/ 10 января 2011

Вопрос, который был опубликован, касается игр, но та же логика применима к любому приложению, которое ведет себя по-разному во время выполнения в зависимости от взаимодействия с пользователем.Как говорит Марк, вы можете реализовать это в сценариях, которые интерпретирует ваше приложение, или встроить функции непосредственно в основное приложение.Почему вы хотите сделать первое?

  1. Это делает вашу игру модифицируемой;пользователи могут добавлять функции или специализировать вашу игру.
  2. Она отделяет платформу (аппаратную или ОС) от игровой логики;это позволяет различным командам работать над разными аспектами игры одновременно.Это также упрощает портирование или обновление вашей игры.
  3. Он разделяет данные приложения (файлы, сеть, пользовательский интерфейс) и игры (квесты, графика, звук).Создание приложений и игр - это разные наборы навыков, и попытаться сделать и то, и другое - это почти так же просто, как создать фильм, в котором вы одновременно и режиссер, и актер.

Итак, вы решили создатьскриптовая игра;как это сделать?Сначала решите, хотите ли вы быть режиссером (напишите движок игры) или актером (запустите сценарии).Noctrine опубликовала несколько хороших ссылок для написания игровых движков.

Если вы хотите написать сценарий игры, вам будет лучше выбрать существующий игровой движок.Neverwinter Nights - это опубликованная игра с хорошим моддинг-сообществом .Если вам нужна бесплатная игра с открытым исходным кодом и играми с возможностью написания сценариев, рассмотрите Dungeon of Despair .

Я не рекомендую пытаться самостоятельно создавать движок, язык сценариев и игровую логику.Хотя это возможно, это титанический объем работы.

...