cocos3.x的事件模式总结
发布时间:2020-12-14 20:17:41 所属栏目:百科 来源:网络整理
导读:http://cn.cocos2d-x.org/tutorial/show?id=835 http://cn.cocos2d-x.org/tutorial/show?id=2343 Event,EventLisrener,EventDispatcher,Touch 1.Event:Type,isStoped,curTarget enum class Type { TOUCH, KEYBOARD, ACCELERATION, MOUSE, CUSTOM }; 事件的各
http://cn.cocos2d-x.org/tutorial/show?id=835 http://cn.cocos2d-x.org/tutorial/show?id=2343 Event,EventLisrener,EventDispatcher,Touch 1.Event:Type,isStoped,curTarget enum class Type { TOUCH, KEYBOARD, ACCELERATION, MOUSE, CUSTOM }; 事件的各类分别为 ,触摸事件, 键盘事件, 加速器事件,鼠标事件, 用户自定义事件。 EventCustom:自定义事件(eventName,userData) 2.EventLisrener(抽象类):Type,onEvent|..listenerID,isRegisterd,paused,isEnabled.. enum class Type { UNKNOWN, TOUCH_ONE_BY_ONE, TOUCH_ALL_AT_ONCE, CUSTOM }; 这个类型与Event的类型有一小点不同,就是将触摸事件类型分成了 One by One (一个接一个) 与 All At Once (同时一起)两种 实例:EventListenerCustom,通过create生成实例,关联基类onEvent的方式, 在init中生成一个函数回调关联到基类的onEvent,在回调中执行onEventCustom 3.EventDispatcher(各种map,vector的侦听器列表,add,remove,dispatchEvent) 场景节点优先级一般都是0,侦听器的存放顺序就是小于0,等于0,大于0的顺序,触发时间在渲染前,渲染中,渲染后 listenerMap<listenerID,EventLisrenerVector> ->保存所有事件侦听器的列表 priortyDirtyFlagMap<listenerID,DirtyFlag> ->有脏标记的侦听器的列表 nodeListenersMap<node,vector<EventLisrener>> ->node类型节点的事件侦听器列表 nodePriorityMap<node,int> ->node节点与事件级别的列表 globalZOrderNodeMap<float,vector<Node>> ->节点的Zorder与节点的指针列表 toAddedListeners ->事件分发后加入的侦听器列表 dirtyNodes ->与场景优先级侦听器相关联的node节点 isDispatch ->描述事件分发起是hi否在分发事件 internalCustomListenerIDs ->内部自定义的侦听器索引 add函数: addEventListenerWithSceneGraphPriority(listener,node) 设置优先级为0,从注释上我们已经得到这个信息了,这个方法加入的侦听器都是显示对象的,所以优先级都为0 addEventListene(listener):判断当前是否在分发信息 不在分发,强制加入 forceAddEventListener(listener) 正在分发消息那么新加入的侦听器就放到了临时数组_toAddedListeners里面 _listenerMap 用以侦听器类型(就是侦听器的ID)索引,值是一个数组,用来储存侦听同一侦听器ID的所有侦听器对象。 _priorityDirtyFlagMap 用来标记一类ID的侦听器列表是对象是否有变化,侦是侦听器ID,值为侦听级别。 _nodeListenersMap 用来记录结点类型数据的侦听器列表,通俗点说就是以结点为索引所有侦听的事件都存在这个map里面。 _dirtyNodes 现在可以理解什么是脏结点了,就是侦听器有变化的结点。
未完。。。。。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |