使用gotoFrameAndPlay的正确姿势?

用CS2.1做了个帧动画, 0-90帧是 npc idle的动画, 100-170是npc移动动画

把sprite addChild加到Scene上时先gotoFrameAndPlay(0,90,true);

想实现点这个sprite,则动画变成100-180 帧的移动动画,移动到指定位置后又恢复 idle动画。


ActionTimeline *action = CSLoader::createTimeline(“npcNode.csb”);
npcSprite->runAction(action);
action->gotoFrameAndPlay(0,90,true);
//idle状态

listener->onTouchBegan = =](Touch* touch, Event* event) {

line a: action->gotoFrameAndPlay(100,170,true);

            ActionInterval *moveaction = MoveTo::create(1.5f, targetPoiont);
            npcSprite->runAction(moveaction);

line b: action->gotoFrameAndPlay(0,90,true);

getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, npcSprite);

类似这样的代码,无法实现移动时变成100-170,而是依然以idle状态移动。
如果把 line b:的恢复idle动画那段去掉,则移动和移动结束都是100-170帧的移动画面

正确的使用姿势应该是什么呢?

一般这种应该是通过两个不同的action,runAction 序列来做吧? 但这种是同一个action,通过gotoFrameAndPlay来播放动画的不同部分应该怎么做呢?

:6:有专家么“?

用可以用Sequence和CallFunc 两个action来处理。
action->gotoFrameAndPlay(0,90,true); 放在CallFunc中。

具体建议你先百度,学习下cocos2d-x里边的action的用法。

蛋疼的文档,蛋疼的编辑器
ActionTimeline* action = CSLoader::createTimeline(“MainScene.csb”);
rootNode->runAction(action);
//action->gotoFrameAndPlay(0, 30, true);

ActionTimeline* action2 = CSLoader::createTimeline(“MainScene.csb”);
rootNode->runAction(action2);
//action2->gotoFrameAndPlay(35, 85, true);

我是这样做的。两个动画,创建两个action,分别控制。