Сложно дать конкретный ответ, поскольку вы не указали (или не пометили) платформу, для которой он предназначен, поэтому я напишу общий ответ.
Ответ на ваш вопрос:
"Есть ли способ сделать это, сохранив соответствующее действие в функции OnActivation ()?"
Скорее всего "Нет" .
Существует семейство проверенных и верных шаблонов для решения проблемы, которую вы описываете.Это семейство шаблонов - это различные шаблоны Model-View-XXX (MVC, MVP, Document-View и т. Д.). Основная предпосылка этих шаблонов состоит в том, что существует конструкция, обычно граф объектов, которая инкапсулирует текущее состояниесистема (Модель) и набор элементов пользовательского интерфейса (Представления), которые отображают это состояние для пользователя.Всякий раз, когда Модель меняет Виды меняются в соответствии с новым состоянием.Особенности того, как меняется модель и обновляются представления, устанавливают различные шаблоны в семействе, и какой из них использовать, зависит от особенностей обработки ввода для конкретной системы.MVC хорошо подходит для интернет-приложений и многих игр, основанных на цикле, потому что пользовательский ввод имеет единственную точку входа в систему.MVP, DV и MVVM (которые, как некоторые говорят, совпадают с MVP) лучше подходят для настольных приложений, где ввод поступает в активный элемент управления в графическом интерфейсе.
Недостатком использования этих шаблонов является код для созданияза представлением редко следует код для связанного действия, но преимущества намного перевешивают этот недостаток.
В вашем случае ваша модель должна иметь свойство для текста диалога и свойство для хранения текущего обработчика ввода (государственный шаблон).Ваш основной цикл будет делать следующее:
- Получить текущий обработчик ввода для обновления модели на основе пользовательского ввода, если таковой имеется (например, изменить позицию пользовательского спрайта).
- Обновите остальную часть модели, чтобы отразить другие элементы в игре.
- Обновите интерфейс на основе текущей модели
Когда пользователь нажимает перед NPC, по умолчаниюобработчик ввода изменяется для обработки ввода для определенного диалогового окна, и универсальное представление для диалогового окна отображает текст для пользователя.
Когда пользователь выбирает действие вдиалоговое окно, обработчик возвращается к стандартному обработчику ввода, а свойство диалогового окна возвращается к пустому.
Шаги 1 и 2 составляют контроллер в шаблоне MVC, а шаг 3 представляет собой обновление представления, не зависящее от события;и наоборот, вы можете использовать шаблон Observable-Observer и иметь события выброса модели, которые наблюдаются представлениями, которые соответственно изменяются.