• ‎Cocos2d-x 学习笔记(14.1) Event EventCustom EventListener


    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。

  • 相关阅读:
    超详细的FreeRTOS移植全教程——基于srm32
    继续学习freertos消息队列
    FreeRTOS优化与错误排查方法
    从单片机到操作系统⑦——深入了解FreeRTOS的延时机制
    Android Pie 私人 DNS 使用教程
    「运维之美」技术周刊 ( 第 1 期 )
    「运维之美」技术周刊 ( 第 3 期 )
    用 Python 快速实现 HTTP 和 FTP 服务器
    关于ubuntu软件图标的问题
    You're currently running Fcitx with GUI 错误解决 Fcitx
  • 原文地址:https://www.cnblogs.com/deepcho/p/cocos2dx-event-eventcustom-eventlistener.html
Copyright © 2020-2023  润新知