2.0以上版本action问题

2.0以前的版本,当一个ccsprite运行一个ccrepeatforever的动作后,如果再次run一个action,则之前无限循环的动作会停止,播放完新action后继续播放之前的循环动画。
可是2.0以后的版本似乎如果ccsprite运行了一个CCRepeatForever的action后,当再次run一个action后,会同时运行两个动画。这是为什么呢?比如我写个例子:

            CCSprite* spr = CCSprite::create("spr.png");//创建一个精灵
	spr->setPosition(ccp(size.width/2, size.height/2));//设置坐标
	this->addChild(spr,3,3);//添加到layer
	spr->runAction(CCRepeatForever::create(CCRotateBy::create(1.0f, 60.0f)));//运行一个无限循环动作,让精灵每一秒旋转60度


            然后定义一个按钮,在按钮的回调中定义新动作如下:
           CCSprite* spr = (CCSprite*)this->getChildByTag(3);
       if (spr)
       {
	        spr->runAction(CCMoveBy::create(2.0f, ccp(20.0f,0.0f)));
       }

如果是老版本的cocos2d-x,则精灵会先停止旋转然后位移,移动后则恢复旋转,为什么2.0以上的版本会同时旋转并位移呢。怎么避免这种同时运行action。

学习了,还有CCSpawn这么个东西.

同时动作有CCSpawn可以实现,并且现在的问题是即便调用CCDirector::sharedDirector()->getActionManager()->addAction(newaction, spr, true);也不能停止之前CCRepeatForever的动作。

2.0的做法应该是对的,旋转和位移本来就是两个无关联的动作,否则要同时运行旋转和位移的需求就理不到了…你可以在回调时使用stopActionByTag()停止这前的那个动作.然后重新整合CCMoveBy,CCRepeatForever为序列动作来运行.

学习了,还有CCSpawn这么个东西.

2.0的做法应该是对的,旋转和位移本来就是两个无关联的动作,否则要同时运行旋转和位移的需求就理不到了…你可以在回调时使用stopActionByTag()停止这前的那个动作.然后重新整合CCMoveBy,CCRepeatForever为序列动作来运行.