1. Event EventCustom
所有事件类继承了Event。
Event中的枚举,定义了事件的类型:
- enum class Type
- {
- TOUCH, //触摸
- KEYBOARD, //键盘
- ACCELERATION, //加速器
- MOUSE, //鼠标
- FOCUS, //
- GAME_CONTROLLER, // 游戏手柄
- CUSTOM //用户自定义
- };
Event成员变量:
- Type _type; //事件类型
- bool _isStopped; //事件暂停
- Node* _currentTarget; //作用的node
Event构造方法:
- Event::Event(Type type)
- : _type(type)
- , _isStopped(false)
- , _currentTarget(nullptr)
{}
EventCustom是自定义事件。比Event多出的成员变量:
- void* _userData; ///< User data
- std::string _eventName; //自定义事件名
EventCustom构造方法事件类型Type设为CUSTOM。设置_eventName。
- EventCustom::EventCustom(const std::string& eventName)
- : Event(Type::CUSTOM)
- , _userData(nullptr)
- , _eventName(eventName)
- {
- }
3. EventListener
监听器有自己的类型ID,是对该类型ID事件的监听。事件只会被分发到同ID的监听器进行处理。
除了自定义监听器、触摸监听器,其他的监听器ID和事件类型一一对应。自定义监听器ID是自定义事件的事件名。触摸类型是一种,对应两种监听器。
监听器类有枚举,定义监听的事件类型,和Event相比将触摸拆分为单点触摸和多点触摸:
- enum class Type
- {
- UNKNOWN,
- TOUCH_ONE_BY_ONE, //单点触摸
- TOUCH_ALL_AT_ONCE, //多点触摸
- KEYBOARD,
- MOUSE,
- ACCELERATION,
- FOCUS,
- GAME_CONTROLLER,
- CUSTOM
- };
监听器成员变量:
- std::function<void(Event*)> _onEvent; /// 处理传入事件的回调函数 Event callback function
- Type _type; /// 事件类型 Event listener type
- ListenerID _listenerID; /// 监听器ID Event listener ID
- bool _isRegistered; /// 注册 Whether the listener has been added to dispatcher.
-
- int _fixedPriority; // 监听器优先级,数值越大优先级越高
- Node* _node; // 监听器关联的node scene graph based priority
- bool _paused; // 暂停监听器 Whether the listener is paused
- bool _isEnabled; // 是否启用 Whether the listener is enabled
监听器的init方法对成员变量进行初始化。
场景图监听器优先级固定为0,在add方法中自动设置。自定义优先级的监听器优先级不得为0。
监听器3个参数
监听器的暂停与否仅用于场景图优先级的监听器。自定义优先级的监听器的暂停标志一直为false。当自定义优先级监听器需要“暂停”,不接收事件时,调用setEnabled(false)即可。
4. EventListenerCustom
自定义事件的监听器有成员:
- std::function<void(EventCustom*)> _onCustomEvent;
用create方法创建时,要监听的事件名作为监听器ID。回调函数作为_onCustomEvent。在init时,_onEvent被设为匿名函数:
- auto listener = [this](Event* event){
- if (_onCustomEvent != nullptr)
- {
- _onCustomEvent(static_cast<EventCustom*>(event));
- }
- };
该匿名回调函数是对我们设置的回调函数_onCustomEvent的包装,将事件类型转换成EventCustom。
原文链接:http://www.cnblogs.com/deepcho/p/cocos2dx-event-eventcustom-eventlistener.html