有关cocos2d中Action的一些思考
更新日期:
项目中有使用cocos2d中的MoveBy,BezierBy等类。
又或使用了其派生的类,由于一些特殊的需求不得不暂停这些动作。
开始相当然的以为比较容易,在仔细的看完了源码过后才真正的解决了问题,又引发了一些思考。
关于Sequence
首先最常用的create方法自不必说,都知道要在最后加上nullptr。
又或者细心的你用到了createWithTwoActions方法。
了解到了这些,如果你足够聪明或者再细心一点,就能知道Sequence的内部机制了。
其实每一个Sequence中只有两个Action,其中第二个可能又是一个Sequence。
create方法也是调用了多次createWithTwoActions方法。
到这里我猜想你一定在想Spawn,去源码中看看吧!
ActionManager
首先在设计模式上Action作为Node的修饰者,Node执行runAction方法,
设置Action的target并交由单例ActionManager去管理。
ActionManager中使用了HashTable管理所有的Action(3.x以后为数不多还在使用hashtable的地方)
并且由定时器控制每次update执行所有Action的step方法(是step!不是update!)
Action
一定要看仔细看源码!每帧开始被调用的不是update而是step。
update方法是根据当前动作的完成度来更新Node(这个完成度0.0~1.0,完成度是相对于时间的)。
如果为了实现某种功能继承了Action或其派生类需要override step还是update函数一定要考虑清楚。
如果让一个动作执行到某一时刻就可以使用update来完成!