Построение игровой логики с событиями - PullRequest
1 голос
/ 04 декабря 2009

Я делаю игровой движок на C ++. Предполагается, что он считывает всю свою логику игрового уровня из файлов XML, поэтому мне нужен простой, но надежный способ создания и обработки событий. Пока все, что я сделал, это использовал класс Action. Это практически эквивалентно выбрасыванию обратных вызовов.

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

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

class Dependent
{
    protected:
        Dependent();
        /// Warning all connected \ref Dependent that the Dependent does not exist.
        ~Dependent();
        /// Connected Dependent \see connect(Dependent*, Dependent*)
        std::list<Dependent*>* dependents;
        /// Register a Dependent.
        void newDependent(Dependent*);
        /// Check if dependent on the given Dependent.
        bool listeningTo(const Dependent*) const;
        /// Used by a destructing connected Dependent to warn that it no longer exists.
        void stopListening(Dependent*);

    friend void connect(Dependent*, Dependent*);
};

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

Я надеюсь, что есть более элегантный способ сделать это.

1 Ответ

1 голос
/ 04 декабря 2009

Звучит так, как будто вы хотите использовать библиотеку сигналов, например boost :: сигналы или sigc .

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

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

Удачи!

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