Game Programming Patterns / Паттерны программирования в играх: 1.4. Prototype
| Английский оригинал | Перевод на русский | |
|---|---|---|
Сожалеем, но текст оригинала доступен только зарегистрированным пользователям. |
Это выглядит примерно так: GromHoll 11.10.14 в 18:32 |
|
|
Давайте подытожим: Deo 25.08.14 в 15:02 |
||
|
Что бы создать объекты используется оператор "new", который вызывает объект, представляющий тип - функцию-конструктор. GromHoll 11.10.14 в 18:35 |
||
|
Состояние хранится в самом экземпляре. Deo 25.08.14 в 22:02 |
||
|
Поведение, проходит через уровень абстракции - делегирование прототипу, и хранится в отдельном объекте, представляющему набор методов, общих для всех объектов определенного типа. Deo 25.08.14 в 22:08 |
||
|
Называйте меня психом, но это звучит почти как мое описание классов, данное ранее. Deo 25.08.14 в 22:10 |
||
|
Можно писать код в стиле прототипирования в JavaScript (без клонирования), Deo 25.08.14 в 22:12 |
||
|
но синтаксис и идиомы языка поощряют подход, основанный на классах. Deo 25.08.14 в 22:12 |
||
|
Лично я считаю, что это хорошо. Deo 25.08.14 в 22:13 |
||
|
Я, как уже сказал, нахожу код, делающий ставку на прототипы, трудным для работы, поэтому мне нравится то, что JavaScript оборачивает внутреннюю семантику в более классические вещи. Deo 25.08.14 в 22:17 |
||
|
Прототипы для Моделирования Данных GromHoll 11.10.14 в 18:37 |
||
|
Ладно, я тут говорил о том, почему мне не нравятся прототипы, поэтому эта глава навевала депрессию. Deo 25.08.14 в 22:20 |
||
|
Думаю, эта книга больше комедия, чем трагедия, так что давайте закончим главу областью, где по моему мнению прототипы, или точнее делегирование, может быть полезным. Deo 25.08.14 в 22:22 |
||
|
Если Вы сравните объём занимаемой памяти в игре ответственный за код и за данные, то заметите, что последний стабильно растёт с самого зарождения программирования. GromHoll 11.10.14 в 18:44 |
||
|
На заре игростроения, игры, чтобы уместиться на одну-две дискеты или картриджа процедурно генерировалось почти все. Deo 26.08.14 в 11:40 |
||
|
Сегодня в большинстве игр, код - это всего лишь "движок", исполняющий игру, которая полностью определяется данными. Deo 26.08.14 в 11:42 |
||
|
Это здорово, но запихивание кучи контента в файлы данных не решит волшебным образом организационные задачи в крупном проекте. Deo 26.08.14 в 15:26 |
||
|
Вообще-то, даже усложнит. Deo 26.08.14 в 15:26 |
||
|
Языки программирования используют по причине того, что в них есть инструменты для управления сложностью. Deo 26.08.14 в 15:28 |
||
|
Вместо копирования-вставки участка кода в десяти местах, мы перемещаем его в функцию, которую сможем вызывать по имени. Deo 26.08.14 в 15:37 |
||
|
Вместо копирования метода в кучу классов, мы поместим его в отдельный класс и отнаследуемся от него или используем его как "mix in". GromHoll 11.10.14 в 18:46 |
+1 | |
|
Когда объём данных в вашей игре достигает значительного размера, вы действительно захотите объединить некоторый функционал. GromHoll 11.10.14 в 18:48 |
||
|
Моделирование Данных глубокая тема, так что я не хочу подробно обсуждать её, но я хочу донести одну идею - использование прототипов и делегирования позволяет повторно использовать данные. GromHoll 11.10.14 в 18:50 |
||
|
Давайте поговорит о определении данных в бесстыдном плагиате Gauntlet, упомянутом ранее. GromHoll 11.10.14 в 18:55 |
||
|
Игровые дизайнеры нуждаются в особых атрибутах для монстров и предметов в некоторых файлах. GromHoll 11.10.14 в 18:56 |
||
|
Я имею в виду полностью оригинальную серию, ни коем образом не вдохновлённый существующими аркадными играми на нескольких игроков о последовательном исследовании подземелий. GromHoll 11.10.14 в 19:01 |
||
|
Пожалуйста, не судите меня. GromHoll 11.10.14 в 19:02 |
||
|
Один из распространённых подходов - использовать JSON и представлять объекты данных картами (или контейнероми свойств, или любым из дюжины других терминов, ведь нет ничего более программерского, чем придумывать новое название для уже существующего термина). GromHoll 11.10.14 в 19:07 |
||
|
Мы так часто изобретали этот подход, что Steve Yegge назвал его "Универсальным шаблоном проектирования". GromHoll 11.10.14 в 19:10 |
+1 | |
|
Например, гоблин в игре будет представлен как-то так: GromHoll 11.10.14 в 19:10 |
||
|
{ GromHoll 11.10.14 в 19:10 |
||
|
"name": "goblin grunt", GromHoll 11.10.14 в 19:11 |
||
|
"minHealth": 20, GromHoll 11.10.14 в 19:11 |
||
|
"maxHealth": 30, GromHoll 11.10.14 в 19:11 |
||
|
"resists": ["cold", "poison"], GromHoll 11.10.14 в 19:11 |
||
|
"weaknesses": ["fire", "light"] GromHoll 11.10.14 в 19:11 |
||
|
} GromHoll 11.10.14 в 19:11 |
||
|
Это крайне просто, и даже дизайнер, питающий отвращение к любому тексту сможет справиться с этим. GromHoll 11.10.14 в 19:13 |
||
|
А таким образом вы сможете добавить несколько ветвей в Великое Семейное Древо Гоблинов: GromHoll 11.10.14 в 19:14 |
||
|
{ GromHoll 11.10.14 в 19:15 |
||
|
"name": "goblin wizard", GromHoll 11.10.14 в 19:15 |
||
|
"minHealth": 20, GromHoll 11.10.14 в 19:16 |
||
|
"maxHealth": 30, GromHoll 11.10.14 в 19:16 |
||
|
"resists": ["cold", "poison"], GromHoll 11.10.14 в 19:16 |
||
|
"weaknesses": ["fire", "light"], GromHoll 11.10.14 в 19:16 |
||
|
"spells": ["fire ball", "lightning bolt"] GromHoll 11.10.14 в 19:16 |
||
|
} GromHoll 11.10.14 в 19:16 |
||
|
{ GromHoll 11.10.14 в 19:16 |
||
|
"name": "goblin archer", GromHoll 11.10.14 в 19:16 |
||
|
"minHealth": 20, GromHoll 11.10.14 в 19:16 |
