Cocos2d-x之动作管理与CCActionManager的使用 一、动作管理类 动作管理类CCActionManager是一个管理所有动作的单例,工作原理是:当CCNode执行runAction时,该函数会 把动作通过动作管理类的addAction函数将对象传递给CCActionManager的单例,该实例再把这个动作添加到自己的 动作序列中。 动作管理单例通过定时刷新自己的update方法,在这个方法中去调用行为序列中每个动作的step(暂停的行为不 会update),这些step方法再根据自身的完成进度去update或是结束行为。 实际上是由动作管理单例驱动的每个动作去更新自己的逻辑,而runAction方法只是将行为对象添加进 CCActionManager的待执行队列。当节点被清除或是行为结束时,动作管理类会自动将动作从队列中删除,不需要程 序员的管理。 一般情况下,不需要使用这个单例来管理动作,可以使用CCNode类的stopAction、stopActionByTag和 stopActions等函数来管理、但是有两种情况需要使用CCActionManager类单例: <1> 动作的执行者不是同一个节点。 <2> 需要暂停/重启活动时。 CCActionManager类的继承关系如下图所示。 ![]() 二、CCActionManager类的主要函数 CCActionManager类的主要函数见如下图所示。 ![]() 三、CCActionManager类的使用 之前提到过,不要轻易使用动作管理类,除非是不同动作目标和需要暂停/重启动作。这里的例子就是需要暂停/ 重启动作时使用。 1、项目示例。 <1> 首先新建Cocos2D-X项目,取名为“MyCCActionManager”,然后在HelloWorldScene.h文件中声明成员函数。
<2> 在HelloWorldScene.cpp文件中的init函数中添加如下所示代码。
<3> 最后在HelloWorldScene.cpp文件中添加如下所示函数。
首先获得导演实例,然后通过调用getActionManager获得动作管理,再通过pauseTarget和resumeTarget等函数 实现暂停/重启目标的动作。 <4> 停止此动作,开始下一个动作 ![]() ![]() 其中在onEnter的最后一句话就是在1.4s后调用removeThis这个函数来进行把这一层删掉,并且开始下一层,可以看到,这个runAction是这个层对象调用的。 回调函数处理子精灵 ![]() ![]() 如果不想对整个层操作,而是对层中的精灵操作呢?这回调函数使用callfuncN_selector即可 动作挂起 ![]() ![]() 以上函数可以实现一个动作挂起,如果再扩展,就可以实现动作冷却,通过调用schedule函数来实现在30s后通过CCActionManager开始动作(需要unschedule) 2、示例效果图。 ![]() ![]() 参考代码: ![]() |
|
来自: 怎么了啊早上 > 《CCAction》