龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

Cocos2d-x人物动作类实例(2)

时间:2014-09-13 02:37来源:网络整理 作者:网络 点击:
分享到:
下面是实现的源代码。 void HelloWorld::move(CCObject* pSender){//通过tag获得添加的精灵CCSprite * sprite = (CCSprite *)this-getChildByTag(0);CCMenuItemToggle * toggleMenu = (CCMenuIte

动作类 动作类

下面是实现的源代码。

动作类 动作类

void HelloWorld::move(CCObject* pSender)
{
	//通过tag获得添加的精灵
	CCSprite * sprite = (CCSprite *)this->getChildByTag(0);
	CCMenuItemToggle * toggleMenu = (CCMenuItemToggle *)pSender;

	//第一个参数传入重复的动作,第二个参数传入重复的次数
	CCRepeat * repeat = CCRepeat::create(rotateBy,4);
	//永远重复执行一个动作
	CCRepeatForever * repeatForever = CCRepeatForever::create(rotateBy);

	if(toggleMenu->getSelectedIndex() == 1)
	{
		//通过runAction精灵执行动作
		sprite->runAction(repeatForever);
	}
	else if(toggleMenu->getSelectedIndex() == 0)
	{

	}
}


下面再列举一下基本常用的瞬时动作和延续动作。
瞬时动作:
放置Place:效果类似于 setPosition = ccp(x, y)。
隐藏Hide:效果类似于setVisible:false。
显示Show:效果类似于setVisible:true。
可见切换:ToggleVisibility。
延时动作:
移动到CCMoveTo
移动CCMoveBy
跳跃到CCJumpTo设置终点位置和跳跃的高度和次数。
跳跃CCJumpBy设置终点位置和跳跃的高度和次数。
贝塞尔CCBezierBy支持 3 次贝塞尔曲线:P0-起点,P1-起点切线方向,P2-终点切线方向,P3-终点。
放大到CCScaleTo设置放大倍数,是浮点型。
放大CCScaleBy
旋转到CCRotateTo
旋转CCRotateBy
闪烁CCBlink设定闪烁次数
色调变化到CCTintTo
色调变换CCTintBy
变暗到CCFadeTo
由无变亮CCFadeIn
由亮变无CCFadeOut
每个函数的具体用法请大家自行试验。
接下来说一下同步动作序列和顺序动作序列。同步动作序列,就是几个动作同时执行,顺序动作序列,就是传入的几个动作按照顺序顺序执行。以下是他们的继承关系图。

动作类 动作类

接下来看一下实现的源代码

动作类 动作类

void HelloWorld::move(CCObject* pSender)
{
	//通过tag获得添加的精灵
	CCSprite * sprite = (CCSprite *)this->getChildByTag(0);
	CCMenuItemToggle * toggleMenu = (CCMenuItemToggle *)pSender;

	//创建如下几个动作

	CCMoveBy * move = CCMoveBy::create(2.0,ccp(100,0));
	CCRotateBy * rotate = CCRotateBy::create(2.0,720);

	CCFiniteTimeAction * moveBack = move->reverse();
	CCFiniteTimeAction * rotateBack = rotate->reverse();

	CCFlipY * flip = CCFlipY::create(true);

	//同步动作序列,传入的几个动作同时执行,执行的整个时间是最长的一个动作的执行时间,参数类型是CCFiniteTimeAction
	//传入的动作(动作的实质就是改变节点的属性)所影响的属性不要有冲突
	CCSpawn * spawn = CCSpawn::create(move,rotate,NULL);
	CCSpawn * spawnBack = CCSpawn::create(moveBack,rotateBack,NULL);

	//顺序动作序列,传入的几个动作按照传入的顺序顺序执行,执行的整体时间是所有动作的时间之和
	CCSequence * sequence = CCSequence::create(move,rotate,flip,NULL);
	CCSequence * sequenceBack = CCSequence::create(moveBack,rotateBack,flip->reverse(),NULL);

	if(toggleMenu->getSelectedIndex() == 1)
	{
		sprite->runAction(spawn);
		//sprite->runAction(sequence);
	}
	else if(toggleMenu->getSelectedIndex() == 0)
	{
		sprite->runAction(spawnBack);
		//sprite->runAction(sequenceBack);
	}
}
精彩图集

赞助商链接