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 现在可以理解什么是脏结点了,就是侦听器有变化的结点。
未完。。。。。
总结以上是内存溢出为你收集整理的cocos3.x的事件模式总结全部内容,希望文章能够帮你解决cocos3.x的事件模式总结所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)