7. АКТИВНЫЕ ОБЪЕКТЫ
объекты, колбеки от активных объектов, статус, доступ




Колбеки от активных объектов

Активные объекты (action objects) - это динамические кисти (dynamic brushes), которые могут реагировать на нажатие клавиши 'использовать', в случае, если игрок стоит на их фоне. Они могут использоваться в головоломках, отображать персонажей игры, с которыми общается Диззи, а так же посредством них реализуются всевозможные устройства, которые надо открыть, починить или запустить.

Давайте опять заглянем в демонстрационный пример, и откроем карту в редакторе. Выберите тайл (tile) с id (идентификатором) 171, отображающий Дейзи. Откройте окно свойств кисти, и установите тип кисти dynamic (динамический), а object id (идентификатор объекта) 1000. Так же установите class (класс) объекта action (активный). Поместите эту кисть на карту по кординатам 560,232. Затем сохраните карту и запустите игру. Теперь попробуйте нажать кнопку 'использовать' , когда будете стоять перед Дейзи. Видите, ничего не случилось! Открылось обычное меню с выбором предметов. А это все потому, что в скрипте вы не написали колбек, обрабатывающий данное событие.

Теперь откройте файл game.gs, и добавьте в конце скрипта следующую функцию:



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

ActionObject_ID()

Этот фоновой колбек запрашивается из хендлера обработки нажатия клавиши 'использовать' (action handler), когда игрок нажимает 'использовать' на фоне активного объекта. Активный объект - это динамическая кисть с классом action и присвоенным номером id.Значение id используется в имени функции для привязки к конкретному объекту. Таким образом, нужный колбек будет вызван для строго определенного объекта.

Обработчики активных объектов вы должны добавить в файл game.gs.



Свойство 'Статус'

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

ObjFind( id )

Эта функция движка используется для поиска на карте динамической кисти по ее уникальному id-номеру. Если кисть с заданным id существует, функция возвращает целочисленный индекс (index) кисти во внутреннем списке динамических кистей. Этот индекс, в свою очередь, используется другими функциями доступа к объектам. Если же кисти с заданным id не существует, функция возвращает -1.

ObjGet( idx, property )

Эта функция движка используется для получения целочисленного значения какого-либо свойства динамической кисти. Ей передается внутренний индекс кисти (idx), полученный с помощью функции ObjFind. А также целочисленное значение, обозначающее номер свойства кисти, обычно представленное в виде предопределенных названий, типа O_X, O_Y, O_ID, O_STATUS, и т.д.

ObjSet( idx, property, value )

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


Откройте файл game.gs, и отредактируйте колбек активного объекта, который вы добавляли ранее. Замените функцию на следующую:



Как вы видите, после первого диалога, свойство status изменилось с 0 (по умолчанию) на 1. Когда вы начнете говорить с Дейзи опять, программа увидит, что свойство status не равно нулю, и отобразит второй диалог.


Домашняя работа

Попробуйте добавить в игру двух персонажей - Дейзи и Дензила.

Сделайте так, чтобы при первом разговоре, Дейзи попросила вас найти Дензила и спросить, как он себя чувствует. Затем, после того, как вы поговорите и с ним, возвратитесь к Дейзи с ответом.
Используйте свойство status, чтобы запомнить состояние вашего общения, как описано в этой главе.
Заметим, что вам необходимо использовать другой id для динамической кисти Дензила (например, 1001), и написать колбек для него тоже.

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

После решения домашнего задания,
можете заглянуть в наш ответ.

Более подробно об объектах и действиях над ними, читайте в следующих разделах:
функции для работы с активными объектами
хендлер для обработки нажатия клавиши 'использовать'
функции движка для работы с объектами.





 

Hosted by uCoz