我想到什么就讲什么了。。,很晚了!
cocos2d-x中动作分为连续性动作(即规定在一定时间内必须完成的动作,这类动作是用CCFiniteTimeAction*来声明)比如我们13章用到的:
cocos2d::CCFiniteTimeAction* _walkAction; cocos2d::CCFiniteTimeAction* _headAction;//头动画 cocos2d::CCFiniteTimeAction* _noHeadAction;//无头动画;这些都是连续性动作。。另外一类是和时间无关的动作。比如CCPlace动作:要求把精灵放置在某处;这类动作使用的不是很频繁;
在连续性动作做中有包含复合性动作,这些动作是把多个单一的连续性动作整合起来执行,比如CCSequence,,和CCSpawn等;
不过复合性动作只能整合连续性动作(即一定时间内必须执行完!);
我曾经犯过很多次错误:就是使用CCSequence来整合CCRepeatForever做动作。这是很坑爹的。。CCRepeatForever动作是无限重复的动作,这样就和时间没有关系了。所以它算不上连续性动作!
下面再来说下什么时候使用stopAllActions();
这个方法是终止一切执行的动作;这个多用在动作间的切换而不是动画间的切换;我突然间觉得这个问题解释不清楚了。
那就贴点代码:
if(sprite2->_hp==9) { sprite2->stopAllActions();//终止之前的所有动作; sprite2->runAction(CCSequence::create(((GameLayer*)this->getParent())->_jsLayer->_redCatSprite->headAninmation(),CCSpawn::create(((GameLayer*)this->getParent())->_jsLayer->_redCatSprite->noHeadAninmation(),((GameLayer*)this->getParent())->_jsLayer->noHeadJsMoveWay(),NULL),NULL)); } if(sprite2->_hp==0) { sprite2->stopAllActions(); sprite2->runAction(CCSequence::create(((GameLayer*)this->getParent())->_jsLayer->_redCatSprite->downTheGround(),CCCallFuncN::create(((GameLayer*)this->getParent())->_jsLayer,callfuncN_selector(JsLayer::preRemoveRedCat)),NULL)); }上面这两段我都使用的了sprite2->stopAllActions();这是因为没发生碰撞时红帽子僵尸做了行走动作,,后来的无头僵尸也做了行走动作。。所以要终止这些动作;(以便实现动作间的切换)而动画不需要做任何处理就可以实现*切换!
就这样吧!不想了