cocos2dx之event事件(一)

事件机制是引擎非常重要的一部分,关于事件,引擎需要解决以下几个问题:是否发生了事件?发生了什么事件?事件是否需要处理?事件给谁处理?

个人理解的事件:当出现来自鼠标,键盘,触屏,摇杆等输入源的输入时,这个事实称之为事件

无论需不需要处理事件,引擎无时无刻都在感受事件,一旦有事件发生,就会调用EventDispatcher::dispatchEvent(Event* event),来判断事件是否需要处理,给谁处理的后续问题。当在屏幕上任意位置单击鼠标后,即进入dispatchEvent,此时event的类型为TOUCH

cocos2dx之event事件(一)_第1张图片

cocos2dx之event事件(一)_第2张图片

查看调用堆栈可知,在循环中每一帧会调用pollEvents来检测外部事件.

class CC_DLL Event : public Ref
{
public:
    /** Type Event type.*/
    enum class Type
    {
        TOUCH,
        KEYBOARD,
        ACCELERATION,
        MOUSE,
        FOCUS,
        GAME_CONTROLLER,
        CUSTOM
    };
//省略非重要部分
    Type _type;     ///< Event type    
    bool _isStopped;       ///< whether the event has been stopped.
    Node* _currentTarget;  ///< Current target
}

 Event主要包含了三个重要的变量,type定义事件类型;isStopped定义该event是否已经停止,当一个event发生停止时,与其相关的Listener都要停止callback的调用;currentTarget保存与该Event相关的node

对于事件类型,由于实际项目通常只有来自触摸的输入源,所以最常用到的是TOUCH类型

TOUCH和MOUSE的区别是鼠标移动,滚动,右击等来自鼠标的操作都是MOUSE事件,触摸的方式输入的事件是TOUCH类型.


你可能感兴趣的:(cocos2dx)