Cocos2d-x 3.x新事件分发机制总结
在2.x中处理事件需要用到委托代理(delegate),相信学过2.x的触摸事件的同学,都知道创建和移除的流程十分繁琐。而在3.x中由于加入了C++11的特性,而对事件的分发机制通过事件分发器EventDispatcher 来进行统一的管理。 事件监听器主要有:
【事件分发器】 事件分发器EventDispatcher,用于统一管理事件监听器的所有事件的分发。 1、_eventDispatcher _eventDispatcher是Node的属性,通过Director::getInstance()->getEventDispatcher() 获得。 _eventDispatcher的工作由三部分组成: (1)事件分发器 :EventDispatcher。 (2)事件类型 :EventTouch,EventKeyboard 等。 (3)事件监听器 :EventListenerTouch,EventListenerKeyboard 等。 监听器实现了各种触发后的逻辑,在适当时候由事件分发器分发事件类型,然后调用相应类型的监听器。 2、添加/删除监听器 添加监听器:addEventListenerWithSceneGraphPriority,addEventListenerWithFixedPriority。 删除监听器:removeEventListener,removeAllEventListeners。 3、主要函数 包含监听器的添加、删除、暂停、恢复,优先级的设置,手动分发事件等。
4、关于事件监听器的优先权 通过 addEventListenerWithSceneGraphPriority 添加的监听器,优先权为0。 通过 addEventListenerWithFixedPriority 添加的监听器,可以自定义优先权,但不能为0。
5、使用步骤 (1)获取事件分发器 :dispatcher = Director::getInstance()->getEventDispatcher(); (2)创建监听器 :auto listener = EventListenerTouchOneByOne::create(); (3)绑定响应事件函数:listener->onTouchBegan = CC_CALLBACK_2(callback,this); (4)将监听器添加到事件分发器dispatcher中:dispatcher->addEventListenerWithSceneGraphPriority(Listener,this); (5)编写回调响应函数:bool callback(Touch* touch,Event* event) { ... } 【触摸事件】 1、单点触摸:EventListenerTouchOneByOne 单点触摸监听器相关:
|