Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Programming / GameProg / RPG_Programming_2ed.pdf
Скачиваний:
240
Добавлен:
12.02.2016
Размер:
12.06 Mб
Скачать

Глава 13. Работа с картами и уровнями

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

Скриптовое размещение

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

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

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

Как вы могли предположить, можно использовать систему Mad Lib Script, представленную в главе 10, создав и включив шаблон действий и обработчик скриптов в ваш проект — тогда обработчик скрипта берет на себя задачу добавления персонажей на карту на основании скриптов, которые вы напишете для вашей игры.

Пример шаблона действий, который добавляет персонажи к карте, может выглядеть так:

"Add character # ~ to map at coordinates ~, ~, ~"

INT 0 65535

FLOAT -5000 5000

FLOAT -5000 5000

FLOAT -5000 5000

Определив это единственное действие вы можете конструировать небольшие скрипты, размещающие персонажи (с уникальным идентификационным номером) на карте, основываясь на предоставляемых вами координатах X, Y и Z. Быстрое, чистое и верное по сути использование скриптов определенно является тем путем, по которому следует идти, и именно этот метод я использую для добавления персонажей на карту в законченной ролевой игре из главы 16, «Объединяем все вместе в законченную игру».

Использование триггеров карты

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

Эти события

называются триггерами (trigger), и как только тригг

ер

 

 

 

612

netlib.narod.ru

 

Джим Адамс

срабатывает, будьте уверены, что последует ряд эффектов. Эти эффекты обычно принимают форму обрабатываемого скрипта.

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

Скартами дело обстоит по-другому. Карты бывают самых разных форм

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

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

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

Сферические триггеры

Вы определяете сферический триггер (рис. 13.1) набором координат и радиусом. У сферического триггера есть два уникальных преимущества:

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

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

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

Кубический триггер

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

netlib.narod.ru

613

Глава 13. Работа с картами и уровнями

потребностям). Определяется кубический триггер путем задания координат двух противоположных углов, как показано на рис. 13.2.

Рис. 13.2. Кубический триггер определяется координатами противоположных углов

Цилиндрический триггер

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

Рис. 13.3. Цилиндрический триггер определяется координатами центра нижней грани, радиусом и высотой

Треугольный триггер

Треугольный триггер подобен полигону в том, что оба определяются тремя точками; однако в треугольном триггере три точки определяются только их координатами X и Z. Это делает треугольник двухмерным. Чтобы треугольник работал в трехмерном мире, вы должны назначить единую координату Y для размещения всех трех точек треугольника, а также высоту, на которую треугольная область распространяется вверх. Можно думать о треугольном триггере, как о трехстороннем ящике, что показано на рис. 13.4.

614

netlib.narod.ru

Соседние файлы в папке GameProg