Forum.iFiction.Ru

iFiction.Ru · ifHub · FAQ · IFWiki · QSP · URQ · INSTEAD · AXMA

форум об interactive fiction, текстовых приключенческих играх и всём таком...

Вы не зашли.

0    0    #1
07.03.2011 23:46

Olegus t.Gl.
Участник (+1053, -249)
Откуда: Москва
Зарегистрирован: 01.03.2001
Сообщений: 2879
Вебсайт

События при добавлении, удалении и перемещении объекта

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

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

Например, в момент вызова команды "Поместить" вызывается обработчик события "ПриДобавленииОбъекта" (с параметром "Время=Перед"). Если данный обработчик возвращает ДА, то предмет помещается в локацию. После чего вызывается обработчик события "ПриДобавленииОбъекта" (с параметром "Время=После"), чтобы отработать возможные события, которые должны произойти после появления предмета в локации.

С командой "Убрать" всё аналогично, а вот с командой "Переместить" — немного сложнее.

По идее, команда "Переместить" состоит из двух команд: "Убрать" и "Поместить", каждая из которых вызывает свои обработчики. Однако для отработки ситуации, когда игрок берёт предмет из сундука, а он у него выскальзывает из рук и падает на пол, может оказаться полезным обработчик "ПриПеремещенииОбъекта", который должен вызываться после команды "Убрать", но перед командой "Поместить", и в случае необходимости прервать команду "Переместить".

Есть у кого какие идеи на этот счёт?

Неактивен

0    0    #2
07.03.2011 23:57

Olegus t.Gl.
Участник (+1053, -249)
Откуда: Москва
Зарегистрирован: 01.03.2001
Сообщений: 2879
Вебсайт

Re: События при добавлении, удалении и перемещении объекта

Кроме того, может ли у обработчика события "ПриПеремещенииОбъекта" быть параметр "Время" (перед/после). И если есть, то когда лучше вызывать обработчик: обрамляя команды "Убрать" и "Поместить":

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

Код:

ПриПеремещенииОбъекта (перед)
    Убрать
        Поместить
            ПриПеремещенииОбъекта (после)

или же лучше так:

Код:

Убрать
    ПриПеремещенииОбъекта (перед)
        Поместить
            ПриПеремещенииОбъекта (после)

Вот.

Неактивен

0    0    #3
08.03.2011 11:32

Olegus t.Gl.
Участник (+1053, -249)
Откуда: Москва
Зарегистрирован: 01.03.2001
Сообщений: 2879
Вебсайт

Re: События при добавлении, удалении и перемещении объекта

fireton написал:

Olegus t.Gl. написал:

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

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

Разумеется я его читал (давно правда) и кое-что оттуда почерпнул. У меня весь этот функционал уже работает. Вопрос лишь в некоторых деталях, например, в каких местах в случае перемещения объекта нужно расставить точки "перехвата", чтобы было удобно влиять на процесс.

Неактивен

0    0    #4
08.03.2011 11:43

Olegus t.Gl.
Участник (+1053, -249)
Откуда: Москва
Зарегистрирован: 01.03.2001
Сообщений: 2879
Вебсайт

Re: События при добавлении, удалении и перемещении объекта

Eten написал:

Далеко мыслишь. Сомневаюсь, что на данный момент это где-нибудь реализовано…

Ну у меня это реализовано, не говоря уж про Inform и т.п.

Eten написал:

Во-первых лучше сделать работу команд сделать без обработчиков событий. И сделать это функциями или подпрограммами (смотря на чем пишем, даже на гипотетическом языке). А сами обработчики событий заменить пользовательскими функциями…

Обработчик события — это и есть пользовательская функция, вызываемая движком в определённый момент времени с определёнными параметрами.

Eten написал:

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

А зачем вызывать обработчик "для попытки отмены самого действия"? Как раз действие вызывает обработчик, который возвращает результат: можно ли продолжать процесс выполнения действия, или нужно прерваться.

Неактивен

Powered by PunBB
© copyright 2001–2024 iFiction.Ru