个人制作网站多少钱,装修装饰网站建设,企业网站优化服务主要围绕哪些要素,记事本做网站怎么调整图片间距PS#xff1a;只是看源码学习过程中把认为重要的内容以笔记的形式记录下来。
【1】HashTimerEntry#xff1a;用于保存指定target的事件定时器相关参数的数据结构。
【2】_hashForTimers#xff1a;targetId作为key#xff0c;HashTimerEntry【2】对象作为value的hash数组…PS只是看源码学习过程中把认为重要的内容以笔记的形式记录下来。
【1】HashTimerEntry用于保存指定target的事件定时器相关参数的数据结构。
【2】_hashForTimerstargetId作为keyHashTimerEntry【2】对象作为value的hash数组。
【3】ListEntry用于保存指定target的update定时器相关参数的数据结构
【4】_hashForUpdatestargetId作为keyListEntry【4】对象作为value的hash数组。
【5】proto.initWithCallback初始化各种变量以下是各种变量的解释 this._lock用于在执行trigger【7】时上锁。 this._scheduler定时器本身。 this._target要注册的目标对象。 this._callback回调函数。 this._elapsed运行的总时间。就是把每次update的dt相加。 this._interval每次执行定时器的时间间隔。 this._delay多久后定时器才开始生效。使用schedule注册默认不设置此参数默认为0 this._useDelaydelay大于0就是use了delay。 this._repeat重复多少次。使用schedule注册默认不设置此参数默认cc.macro.REPEAT_FOREVER this._runForever是否一直循环播放。
【6】proto.update执行定时器逻辑这个类的最核心函数啦~ 1.if (this._elapsed -1) 因为初始化时_elapsed值就是-1所以我理解为第一次update是不会执行逻辑直接跳过的。 2.如果是一直循环的函数的话只要大于时间间隔就执行trigger【7】。 3.如果使用了Delay的话要等Delay时间到了才开始执行trigger【7】。 4.如果设置了_interval则_elapsed _interval才trigger。 5.如果不是一直循环的话调用次数超过了_repeat就移除定时器。
【7】proto.trigger调用回调函数。
【8】_timeScale时间间隔缩放比例。 默认值为1在update时会根据这个比例缩放dt(帧时间差值。可以通过这个值做成快进或者慢动作等效果。
【9】enableForTarget():如果对象不存在_id的话给对象添加一个唯一的_id。 需要使用定时器之前最好都调用一下这个函数来保证target对象存在_id。
【10】schedule()设置一个新的定时器。 1.如果callback不是function的话就把target和callback对调这步的目的没看懂…… 2.如果不传入repeat或者delay参数的话默认repeat是cc.macro.REPEAT_FOREVERdelay为0 3.通过targetId作为key从_hashForTimers获取对象element如果对象不存在则创建。 4.创建一个callbackTimer并且进行初始化然后把timer丢到element的timers队列中。
【11】scheduleUpdate()创建一个带优先级的定时器。 1.通过targetId作为key从_hashForUpdates获取对象element如果element存在则仅当优优先级发生变化且 _updateHashLocked为false时才删除原有element对象再创建新的。 2.创建element对象。 3.根据优先级大于小于或等于0把element放进对应队列中_updates0List、_updatesNegList、_updatesPosList 4.最后再把element放进_hashForUpdates。
PS在CCDirector类里面就是通过此接口注册各大管理器的定时器。
【12】unschedule():取消定时器。 1.通过targetId获取element对象。 2.遍历element对象的timers如果timer的_callback和传入的callback一致的话则从timers里面移除此timer等于移除了这个callback的监听咯。 3.如果timers为空这个target的所有监听都清空了就可以从数组中移除整个element。 PS对target下的其他callback没影响只会移除指定的callback
【13】unscheduleUpdate()取消指定target的update定时器 1.通过targetId获取element对象。 2.如果element被lock了则做一个标记此标记用于在下一次update移除此target的update 3.如果没被lock则立刻移除此target的update。
【14】unscheduleAllForTarget()取消target的所有定时器。 其实简单理解就是【12】和【13】的复合体取消target的update还有清空所有注册的callback其实就是直接移除element就OK了。
【15】isScheduled()检查这个target是否存在一个callback回调的定时器。 逻辑大致上也就等于【12】的前两步只是移除timer改成return true or false而已。
【16】element.paused elementUpdate.entry.paused 两个paused代表着整个target的状态是否暂停。通过pauseTarget()和resumeTarget()能对值进行修改不过调用这两个方法都是同时设置这两个变量的开关让整个target的所有update达到同时开关所有定时器的目的。而isTargetPaused()方法则会返回其中一个paused作为target是否暂停的依据因为两个变量同时设置的所以返回其中一个作为结果也就OK了
【17】优先级 定时器类还有很多通过优先级去处理的方法逻辑不算复杂用得也较少就没细看了……