怎么实现暂停恢复动作,以及插入另一个动作?

例如捕鱼达人中,一条鱼沿着某条路线前进,同时鱼有一个摇摆的动画动作,以及鱼随着前进方向旋转角度.
在中间的任何时刻鱼中炮了,需要暂停鱼现有的一系列动作.插入一个鱼晃动的动作.
如果鱼死亡,晃动结束后鱼消失;如果未死亡,晃动结束后恢复前面的一系列动作.即在中炮的这个随机点上,鱼继续前进,继续摇摆,继续旋转角度.

想想好像不难耶:10:

灵活运用动作就不难。
“一条鱼沿着某条路线前进,同时鱼有一个摇摆的动画动作,以及鱼随着前进方向旋转角度”:路线简单点就用move,复杂点就用曲线模拟或者贝赛尔曲线,摇摆动画应该是repeatforever,旋转角度用贝赛尔曲线的话就在贝赛尔曲线的动作变化点上加rotation;
“在中间的任何时刻鱼中炮了,需要暂停鱼现有的一系列动作.插入一个鱼晃动的动作.”:这个是碰撞检测,在主游戏逻辑的调度事件update每帧检测是否中炮,其实并不是暂定所有动作(可以看到鱼还是移动的),只是切换了帧动画,直接从动画缓存CCAnimationCache中提取帧动画然后让它播放,因为之前的摇摆动画是repeatforever,所以播完中炮动画后还是切回来摇摆动画的;
“如果鱼死亡,晃动结束后鱼消失;如果未死亡,晃动结束后恢复前面的一系列动作.即在中炮的这个随机点上,鱼继续前进,继续摇摆,继续旋转角度. ”:在检测中炮后判断鱼的血量,血量低于0直接remove掉鱼。

— Begin quote from ____

引用第2楼yong224于2015-11-16 11:43发表的 :
灵活运用动作就不难。
“一条鱼沿着某条路线前进,同时鱼有一个摇摆的动画动作,以及鱼随着前进方向旋转角度”:路线简单点就用move,复杂点就用曲线模拟或者贝赛尔曲线,摇摆动画应该是repeatforever,旋转角度用贝赛尔曲线的话就在贝赛尔曲线的动作变化点上加rotation;
“在中间的任何时刻鱼中炮了,需要暂停鱼现有的一系列动作.插入一个鱼晃动的动作.”:这个是碰撞检测,在主游戏逻辑的调度事件update每帧检测是否中炮,其实并不是暂定所有动作(可以看到鱼还是移动的),只是切换了帧动画,直接从动画缓存CCAnimationCache中提取帧动画然后让它播放,因为之前的摇摆动画是repeatforever,所以播完中炮动画后还是切回来摇摆动画的;
“如果鱼死亡,晃动结束后鱼消失;如果未死亡,晃动结束后恢复前面的一系列动作.即在中炮的这个随机点上,鱼继续前进,继续摇摆,继续旋转角度. ”:在检测中炮后判断鱼的血量,血量低于0直接remove掉鱼。 http://www.cocoachina.com/bbs/job.php?action=topost&tid=331780&pid=1436055

— End quote

兄弟,谢谢你的回复…你提到切换帧动画,可以粗略地帮我写一下怎么切换的代码么?

可能我没有表达清楚…
我要的功能是说:

1).精灵有动作A.
sprite->runAction(A);

2).中间任一时刻暂停动作A,让精灵做动作B.
A->puase();
sprite->runAction(B);

3).动作B完成后,恢复原来的动作A.
A->resume();

切换帧动画是不用暂停上一个帧动画的。
比如:帧动画A,和帧动画B,
sprite->runAction(CCrepeatForever::create(帧动画A));
然后某一时刻(比如中弹后)
sprite->runAction(帧动画B);
由于帧动画B并不是重复播放的,所以当帧动画B播放完后会自动切换为帧动画A(当然帧动画A其实一直都在执行,只不过是帧动画B在帧动画A后添加,暂时覆盖了帧动画A)。

至于你说的暂停某一动作,没有这个方法,只有停止动作A,执行动作B,动作B执行完后,新建动作A1,执行动作A1。
传送门:http://www.cocoachina.com/bbs/read.php?tid=218307

— Begin quote from ____

引用第4楼yong224于2015-11-18 09:26发表的 回 3楼(szuzsq_) 的帖子 :
切换帧动画是不用暂停上一个帧动画的。
比如:帧动画A,和帧动画B,
sprite->runAction(CCrepeatForever::create(帧动画A));
然后某一时刻(比如中弹后)
sprite->runAction(帧动画B);
http://www.cocoachina.com/bbs/job.php?action=topost&tid=331780&pid=1437702

— End quote

兄弟,谢谢啦