COCOS-3.X事件分发机制-原理

一、在cocos2.x版本中,大多数事件,包括触摸、键盘等的响应机制,是通过重写父类的虚函数来实现的,这样的事件响应机制耦合度太高,导致的结果就是通用性不好、模块化不高。例如父类中关于触摸事件的虚函数:


二、而在cocos3.x版本中,原来的事件系统得到了较好的升级,演变成了一个较为独立、完善和通用的组件模块,即事件分发系统,不仅可以用来分发各种系统事件,也可以用来分发用户自定义事件。其大致工作流程如下图所示:


1、利用不同的事件订阅者订阅对应的事件,并设置事件响应回调。在cocos中,事件订阅者是EventListener类的一系列子类,包括EventListenerTouch、EventListenerMouse、EventListenerKeyboard、EventListenerAcceleration、EventListenerPhysicsContact、EventListenerCustom等;而他们所对应的事件类型,则是一个Event枚举:

/** Type Event type.*/
    enum class Type
    {
        TOUCH,
        KEYBOARD,
        ACCELERATION,
        MOUSE,
        FOCUS,
        GAME_CONTROLLER,
        CUSTOM
    };

最后设置响应事件回调则是填写对应事件订阅者内部的function类型成员变量:


2、向事件监听器提交事件订阅。cocos的事件监听器(EventDispatcher)统一管理所有的事件,包括系统事件和用户自定义事件。EventDispatcher可以从继承Node类中的_eventDispatcher成员变量获取,也可以使用Director::getInstance()->getEventDispatcher()获取;然后提交事件订阅则可以使用EventDispatcher的addEventListenerWithSceneGraphPriority(),默认以场景顺序为优先级来进行事件的处理,当然也可以使用固定优先级进行提交addEventListenerWithFixedPriority()。

3、4、当有事件发生时,事件监听器便会在事件订阅列表中查找对应事件,然后通知所有提交了该事件的订阅者。这一步EventDispatcher会进行一个查找通知操作,所以一般提交的事件订阅不宜过多,否则对事件响应的速度会产生一定影响。

5、订阅者接收到事件监听器分发的事件通知后,触发事件回调,进入对应的事件处理逻辑进行响应。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值