经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » 游戏设计 » 查看文章
?Cocos2d-x 学习笔记(14.1) Event EventCustom EventListener
来源:cnblogs  作者:深潮  时间:2019/8/7 8:34:19  对本文有异议

1. Event EventCustom

所有事件类继承了Event。

Event中的枚举,定义了事件的类型:

  1. enum class Type
  2. {
  3. TOUCH, //触摸
  4. KEYBOARD, //键盘
  5. ACCELERATION, //加速器
  6. MOUSE, //鼠标
  7. FOCUS, //
  8. GAME_CONTROLLER, // 游戏手柄
  9. CUSTOM //用户自定义
  10. };

Event成员变量:

  1. Type _type; //事件类型
  2. bool _isStopped; //事件暂停
  3. Node* _currentTarget; //作用的node

Event构造方法:

  1. Event::Event(Type type)
  2. : _type(type)
  3. , _isStopped(false)
  4. , _currentTarget(nullptr)
    {}  

EventCustom是自定义事件。比Event多出的成员变量:

  1. void* _userData; ///< User data
  2. std::string _eventName; //自定义事件名

EventCustom构造方法事件类型Type设为CUSTOM。设置_eventName。

  1. EventCustom::EventCustom(const std::string& eventName)
  2. : Event(Type::CUSTOM)
  3. , _userData(nullptr)
  4. , _eventName(eventName)
  5. {
  6. }

3. EventListener

监听器有自己的类型ID,是对该类型ID事件的监听。事件只会被分发到同ID的监听器进行处理。

除了自定义监听器、触摸监听器,其他的监听器ID和事件类型一一对应。自定义监听器ID是自定义事件的事件名。触摸类型是一种,对应两种监听器。

监听器类有枚举,定义监听的事件类型,和Event相比将触摸拆分为单点触摸和多点触摸:

  1. enum class Type
  2. {
  3. UNKNOWN,
  4. TOUCH_ONE_BY_ONE, //单点触摸
  5. TOUCH_ALL_AT_ONCE, //多点触摸
  6. KEYBOARD,
  7. MOUSE,
  8. ACCELERATION,
  9. FOCUS,
  10. GAME_CONTROLLER,
  11. CUSTOM
  12. };

监听器成员变量: 

  1. std::function<void(Event*)> _onEvent; /// 处理传入事件的回调函数 Event callback function
  2. Type _type; /// 事件类型 Event listener type
  3. ListenerID _listenerID; /// 监听器ID Event listener ID
  4. bool _isRegistered; /// 注册 Whether the listener has been added to dispatcher.
  5.  
  6. int _fixedPriority; // 监听器优先级,数值越大优先级越高
  7. Node* _node; // 监听器关联的node scene graph based priority
  8. bool _paused; // 暂停监听器 Whether the listener is paused
  9. bool _isEnabled; // 是否启用 Whether the listener is enabled

监听器的init方法对成员变量进行初始化。

场景图监听器优先级固定为0,在add方法中自动设置。自定义优先级的监听器优先级不得为0。

监听器3个参数

监听器的暂停与否仅用于场景图优先级的监听器。自定义优先级的监听器的暂停标志一直为false。当自定义优先级监听器需要“暂停”,不接收事件时,调用setEnabled(false)即可。

4. EventListenerCustom

自定义事件的监听器有成员:

  1. std::function<void(EventCustom*)> _onCustomEvent;

用create方法创建时,要监听的事件名作为监听器ID。回调函数作为_onCustomEvent。在init时,_onEvent被设为匿名函数:

  1. auto listener = [this](Event* event){
  2. if (_onCustomEvent != nullptr)
  3. {
  4. _onCustomEvent(static_cast<EventCustom*>(event));
  5. }
  6. };

该匿名回调函数是对我们设置的回调函数_onCustomEvent的包装,将事件类型转换成EventCustom。

原文链接:http://www.cnblogs.com/deepcho/p/cocos2dx-event-eventcustom-eventlistener.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号