用事件构建游戏逻辑

时间:2009-12-04 01:05:56

标签: c++ design-patterns events pointers

我正在使用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 个答案:

答案 0 :(得分:1)

听起来您想要使用信号库,例如boost::signalssigc

这些库中的任何一个都允许您的任何对象知道何时发生诸如点击之类的事件。

当信号对象或侦听对象被破坏时,他们也可以自动清理。

祝你好运!