Активные объекты (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), и написать колбек для него тоже.
Пока что вы изучили только простое применение данных свойств и функций, но на базе них можно реализовать гораздо больше ситуаций, нежели только простейшие разговоры типа "Привет - привет!". Иногда ситуации и сценарии бывают такие разветвленные и комплексные, что вам надо очень внимательно отнестись к логике их написания, и хорошенечко их потом протестировать. Но это придаст гораздо больше реалистичности вашей игре.
После решения домашнего задания,
можете заглянуть в наш ответ.
Более подробно об объектах и действиях над ними, читайте в следующих разделах:
функции для работы с активными объектами
хендлер для обработки нажатия клавиши 'использовать'
функции движка для работы с объектами.
|