Cocos2d-x 动作管理类CCActionmanager
2020-11-10 本文已影响0人
白小白152
CCActionmanager
这个类其实并不属于行为类,它的父类是 NSObject
,而不是CCAction
,但它又与CCAction
密不可分,因此在这里单独介绍下。
CCActionmanager
是个标准的单例类,它的作用顾名思义,就是管理行为类的对象。
工作原理是:当节点执行runAction
时,会把action
通过addAction
方法将对象传递给CCActionmanager
的单例,该实例再把这个action
添加到自己的行为序列中。
CCActionmanager
通过schedule
定时刷新自己的update
方法,在这个方法中去调用行为序列中每个action
的step
(会有一些筛选条件,比如暂停的行为不会update
),这些step
方法再根据自身的完成进度去update
或是结束行为。
实际上是由CCActionmanager
驱动的每个action
去更新自己的逻辑,而runAction
方法只是将行为对象添加进CCActionmanager
的更新队列罢了。当节点被清除或是行为结束时,CCActionmanager
会自动将action
从队列中剔除,无需开发者操心。
使用情景
一般情况下,不需要使用这个单例类管理动作,可以使用CCNode
类的stopAction
、stopActionByTag
和stopAllAction
等函数来管理,
但是有两种情况需要使用CCActionManager
类单例:
- 动作的执行者不是同一个节点。
- 需要暂停、重启活动时。
成员函数
addAction:为指定目标添加动作。
removeAllAction:删除所有动作。
removeAllAction是FromTarget:为指定目标删除所有动作。
removeAction:删除传入的动作。
removeActionByTag:根据标签删除动作。
getActionByTag:根据标签获得动作。
numberOfRunningActionsInTarget:获得目标的动作数。
pauseTarget:暂停目标动作。
resumeTarget:重启目标动作。
pauseAllRunningActions:暂停所有动作,返回被暂停动作目标的集合。
resumeTargets:重启所有动作,需传入被暂停动作目标的集合。
示例:
self.action_manager = cc.Director:getInstance():getActionManager()
self.action_manager:pauseTarget(self);
self.action_manager:resumeTarget(self);
self.action_manager:removeAllActionsFromTarget(self)