cocos2d-x 动作与动画

时间:2020-12-26 23:28:47

我想到什么就讲什么了。。,很晚了!

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();这是因为没发生碰撞时红帽子僵尸做了行走动作,,后来的无头僵尸也做了行走动作。。所以要终止这些动作;(以便实现动作间的切换)而动画不需要做任何处理就可以实现*切换!

  就这样吧!不想了