Game Programming Patterns / Паттерны программирования в играх: 3.1 Bytecode

← →
Английский оригинал Перевод на русский

Сожалеем, но текст оригинала доступен только зарегистрированным пользователям.

Цель

zwyagel 01.05.14 в 13:09

1

Дать поведению гибкость данных путём кодирования его в виде инструкций виртуальной машины.

Mingun 04.05.14 в 07:15

0

Мотивация

zwyagel 01.05.14 в 13:09

1

Создание игр может быть увлекательным делом, однако же оно не такое простое.

Mingun 04.05.14 в 07:18

0

Современные игры требуют огромных, сложных кодовых баз.

Mingun 04.05.14 в 07:18

0

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

Mingun 04.05.14 в 07:24

0

Я работал над игрой, которая состояла из шести миллионов строк кода на языке C++ .

zwyagel 01.05.14 в 13:11

0

Для сравнения, ПО, контролирующее марсоход Curiosity, насчитывает меньше половины этой величины.

Mingun 04.05.14 в 07:17

0

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

Mingun 04.05.14 в 07:26

0

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

Mingun 04.05.14 в 07:28

0

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

Mingun 04.05.14 в 07:31

0

Мы гордимся своим мастерством, но всё имеет свою цену.

Mingun 04.05.14 в 07:32

0

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

Mingun 04.05.14 в 07:35

0

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

Mingun 04.05.14 в 07:39

0

В дополнение к этим проблемам, игры имеют ещё одно неприятное ограничение: разработка должна проходить с удовольствием.

Mingun 04.05.14 в 07:41

0

Игроки требуют ощущений от игры, как от романа, но она всё ещё должна быть хорошо сбалансирована.

Mingun 04.05.14 в 07:43

0

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

Mingun 04.05.14 в 07:46

0

Бой заклинаниями!

Mingun 04.05.14 в 08:04

0

Предположим, мы работает над магическим файтингом.

Mingun 04.05.14 в 07:50

0

Пара волшебников принимают боевую стойку и бросаются друг в друга заклинаниями до тех пор, пока не будет объявлен победитель.

Mingun 04.05.14 в 07:53

0

Мы могли бы определить эти заклинания в коде, но это означало бы, что необходимо каждый раз привлекать инженера для изменения каждого заклинания.

Mingun 04.05.14 в 07:54

0

Когда дизайнер захочет подправить несколько цифр, и посмотреть, что получится, нужно будет перекомпилировать всю игру, перезагружать её и снова возвращаться к бою.

Mingun 04.05.14 в 07:56

0

Как и большинство сегодняшних игр, нам так же необходимо иметь возможность обновлять её после распространения, как для правки ошибок, так и для добавления нового содержимого.

Mingun 04.05.14 в 07:59

0

Если все заклинания жёстко заданы в коде, обновление будет означать фактическую правку исполняемого файла игры.

Mingun 04.05.14 в 08:00

0

Давайте пойдём немного дальше и скажем, что мы также хотим поддерживать модификацию игры.

Mingun 04.05.14 в 08:01

0

Мы хотим позволить игрокам создавать их собственные заклинания.

Mingun 04.05.14 в 08:01

0

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

Mingun 04.05.14 в 08:02

0

Хуже того, если они допустили ошибку в своём заклинании, это может обрушить игру на машинах других игроков.

Mingun 04.05.14 в 08:03

0

Данные > код

Mingun 04.05.14 в 08:04

0

Понятно, что язык реализации нашего движка не подходит для этих целей.

Mingun 04.05.14 в 08:05

0

Нам нужно, чтобы заклинания были безопасно отгорожены от ядра игры.

Mingun 04.05.14 в 08:06

0

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

Mingun 04.05.14 в 08:08

0

Не знаю, как насчёт вас, но для меня это звучит как что-то, очень похожее на данные.

Mingun 04.05.14 в 08:08

0

Если бы мы смогли определить наше поведение в отдельных файлах с данными, которые игровой движок загружал и в некотором роде «выполнял», мы бы достигли всех наших целей.

Mingun 04.05.14 в 08:10

0

Нам просто нужно понять, что значит «выполнить» применительно к данным.

Mingun 04.05.14 в 08:11

0

Как сделать некоторые байты в файле выражающими поведение?

Mingun 04.05.14 в 08:13

0

Есть несколько способов.

Mingun 04.05.14 в 08:13

0

Я думаю, оценить сильные и слабые стороны этого шаблона нам поможет сравнение с другим шаблоном: Интерпретатор.

Mingun 04.05.14 в 08:16

0

Шаблон Интерпретатор

Mingun 04.05.14 в 08:16

0

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

Mingun 04.05.14 в 08:18

0

Вместо этого я втисну сюда кратчайшее введение.

Mingun 04.05.14 в 08:19

0

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

Mingun 04.05.14 в 08:21

0

Скажем, для примера, он поддерживает арифметические выражения вроде таких:

Mingun 04.05.14 в 08:22

0

(1 + 2) * (3 - 4)

Mingun 04.05.14 в 08:22

0

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

Mingun 04.05.14 в 08:23

0

Числовые литералы будут объектами:

Mingun 04.05.14 в 08:24

0

В основном, это просто маленькие обёртки над сырыми значениями.

Mingun 04.05.14 в 08:25

0

Операторы также будут объектами и они будут ссылаться на свои операнды.

Mingun 04.05.14 в 08:26

0

Если принять во внимание скобки и приоритет, это выражение магическим образом превращается в маленькое дерево объектов:

Mingun 04.05.14 в 08:27

0

Что это за «магия»?

Mingun 04.05.14 в 08:28

0
Минутку...

Следующая страница →