greensock的tween源码阅读笔记

对于一个处于gc状态的tween,
如果这个gc状态是由kill触发的,那么直接从masterList删除
否则的话,被tweenlite的垃圾回收删除!


对于一个不是立即启动的tween,它被添加到timeline的时机是???
tweencore里面有一个add方法???
在tweenlite里面又有add方法???

对于一个延迟的delaycall,它的active一直是false,理论上是不会被调用的啊???
答:在timeline的render方法中,除了根据active判断,还有另外一个判断条件!!!

tweenlite作为一个独立的tween需要被insert到roottimeline中
timeline作为容器类的tween也需要被insert到roottimeline中,
但roottimeline也是一个timeline但它作为一个root,是不能被insert的


public function renderTime(time:Number, suppressEvents:Boolean=false, force:Boolean=false):void {
参数time表示从tween启动的时候到当前所经历的时间!


public function complete(skipRender:Boolean=false, suppressEvents:Boolean=false):void {
当skipRender为flase的时候,会调用renderTime,并把totalDurationTime作为参数,
就是想做最后一个渲染(渲染的结果就是这个tween的预想详解),然后直接结束这个tween!

suppressEvents表示是否跳过这个tween上的事件

一般,如果在tween还没有完成的时候,调用complete方法,那么onComplete方法是不会被执行的。
但对于delaycall这种类型的缓动,当调用complete时,onComplete方法是会被运行的!!
即是,duration为0的tween,在complete被调用时,onComplete参数会被运行!!

而对于非autoRemoveChildren的timeline,当上面的某个tween被complete时,这个tween是不会被移除的!!
换句话说,这个tween就不是处于gc状态,不会被回收!

也是说,一个tween的是否结束,是在renderTime函数中,感觉time和totalDurationTime的比较得到的!!
而renderTime发现这个tween已经执行完成,又会回调complete函数!

就是说,在complete和render之间又存在一个循环调用!!

虽然理论上complete函数是public的,但根据这个设计,外部应该是不能调用complete函数的,
而应该调用kill方法!

cachedOrphan
属性只有在tween被insert或者被remove的时候被修改
设置enable属性时,会被用到!
如果是timeline设置某个tween的enable属性,那么ignoreTimeline参数一般都是true,
因为timeline在设置enable的过冲中肯定会修改链表。
如果是tween自己设置enable属性,那么ignoreTimeline参数一般都是设置false
即:
一个tween在不在timeline中,也可能有timeline控制,也可能由tween自身控制
tween 和 timeline 可以互相控制彼此,在操作对方的时候,就保证对方不再来操作自己,不然会死循环!

未完待续...

原文地址:https://www.cnblogs.com/tianlanliao/p/3460267.html