本系列学习教程使用的是cocos2d-x-2.1.4(最新版为3.0alpha0-pre) ,PC开发环境Windows7,C++开发环境VS2010
这一期我们要学习到的基本动作有移动动作、缩放动作、旋转动作以及扭曲动作。
一、基本动作
1、CCAction的子类CCFiniteTimeAction分为瞬时动作(CCActionInstant)和延时动作(CCActionInterval),其中瞬
时动作(CCActionInstant)的子类见下图所示。
瞬时动作,顾名思义,就是直接调用结果的动作,这中间不产生任何动画效果。
2、延时动作(CCActionInterval)则不同,它会形成动画过程,其子类见下图所示。
二、移动动作
1、首先看CCMoveTo和CCMoveBy的使用。
<1> CCMoveTo
CCMoveTo::create(float duration,const CCPoint& position)
作用:创建一个移动的动作。
参数1:移动到目标坐标所需的时间(秒)。
参数2:目标坐标。
<2> CCMoveBy
CCMoveBy::create(float duration,const CCPoint& position)
作用:创建一个移动的动作。
参数1:移动到目标坐标所需的时间(秒)。
参数2:目标坐标。
CCMoveBy支持reverse()函数,可以获取其反向动作。
2、示例代码如下所示。
首先新建Cocos2D-X项目,然后在HelloWorldScene.cpp文件的init函数中添加如下代码。
bool HelloWorld::init()
{
bool bRet = false;
do
{
CC_BREAK_IF(! CCLayer::init());
//获得尺寸大小
CCSize s = CCDirector::sharedDirector()->getWinSize();
//创建精灵
CCSprite* m_grossini = CCSprite::create("grossini.png");
CCSprite* m_tamara = CCSprite::create("grossinis_sister1.png");
CCSprite* m_kathia = CCSprite::create("grossinis_sister2.png");
//设置精灵的位置
m_grossini->setPosition( ccp(s.width/2, s.height/2));
m_tamara->setPosition( ccp(s.width/4, s.height/2));
m_kathia->setPosition( ccp(3 * s.width/4, s.height/2));
//添加精灵到图层
addChild(m_grossini, 1);
addChild(m_tamara, 2);
addChild(m_kathia, 3);
//创建移动的动作
CCActionInterval* actionTo = CCMoveTo::create(2, ccp(s.width-40, s.height-40));
CCActionInterval* actionBy = CCMoveBy::create(2, ccp(80,80));
CCActionInterval* actionByBack = actionBy->reverse();
//给精灵添加移动的动作
m_tamara->runAction( actionTo);
m_grossini->runAction( CCSequence::create(actionBy, actionByBack, NULL));
m_kathia->runAction(CCMoveTo::create(1, ccp(40,40)));
bRet = true;
} while (0);
return bRet;
}
3、移动示例效果图。
三、缩放动作
1、首先看看CCScaleTo和CCScaleBy的使用方法。
<1> CCScaleTo
CCScaleTo::create(float duration,float s)
作用:创建一个缩放的动作。
参数1:达到缩放大小所需的时间(秒)。
参数2:缩放的比例。其值=1:原大小,其值>1:方法,其值<1:缩放。
<2> CCScaleBy
CCScaleBy::create(float duration,float s)
作用:创建一个缩放的动作。
参数1:达到缩放大小所需的时间(秒)。
参数2:缩放的比例。
CCScaleBy支持reverse()函数,可以获取其反向动作。
2、示例代码如下所示。
首先新建Cocos2D-X项目,然后在HelloWorldScene.cpp文件的init函数中添加如下代码。
bool HelloWorld::init()
{
bool bRet = false;
do
{
CC_BREAK_IF(! CCLayer::init());
//获得尺寸大小
CCSize s = CCDirector::sharedDirector()->getWinSize();
//创建精灵
CCSprite* m_grossini = CCSprite::create("grossini.png");
CCSprite* m_tamara = CCSprite::create("grossinis_sister1.png");
CCSprite* m_kathia = CCSprite::create("grossinis_sister2.png");
//设置精灵的位置
m_grossini->setPosition( ccp(s.width/2, s.height/2));
m_tamara->setPosition( ccp(s.width/4, s.height/2));
m_kathia->setPosition( ccp(3 * s.width/4, s.height/2));
//添加精灵到图层
addChild(m_grossini, 1);
addChild(m_tamara, 2);
addChild(m_kathia, 3);
CCActionInterval* actionTo = CCRotateTo::create( 2, 45);
CCActionInterval* actionTo2 = CCRotateTo::create( 2, -45);
CCActionInterval* actionTo0 = CCRotateTo::create(2 , 0);
m_tamara->runAction( CCSequence::create(actionTo, actionTo0, NULL));
CCActionInterval* actionBy = CCRotateBy::create(2 , 360);
CCActionInterval* actionByBack = actionBy->reverse();
m_grossini->runAction( CCSequence::create(actionBy, actionByBack, NULL));
m_kathia->runAction( CCSequence::create(actionTo2, actionTo0->copy()->autorelease(), NULL));
bRet = true;
} while (0);
return bRet;
}
3、缩放示例效果图。
四、扭曲动作
1、先来看看CCSkewTo和CCSkewBy的使用方法。
<1> CCSkewTo
CCSkewTo::create(float t,float sx,float sy)
作用:创建一个倾斜的动作。
参数1:倾斜到特定角度所需的时间(秒)。
参数2:x轴的倾斜角度。
参数3:y轴的倾斜角度。
<2> CCSkewBy
CCSkewBy::create(float t,float sx,float sy)
作用:创建一个倾斜的动作。
参数1:倾斜到特定角度所需的时间(秒)。
参数2:x轴的倾斜角度。
参数3:y轴的倾斜角度。
CCSkewBy支持reverse()函数,可以获取其反向动作。
2、示例代码如下所示。
首先新建Cocos2D-X项目,然后在HelloWorldScene.cpp文件的init函数中添加如下代码。
bool HelloWorld::init()
{
bool bRet = false;
do
{
CC_BREAK_IF(! CCLayer::init());
//获得尺寸大小
CCSize s = CCDirector::sharedDirector()->getWinSize();
//创建精灵
CCSprite* m_grossini = CCSprite::create("grossini.png");
CCSprite* m_tamara = CCSprite::create("grossinis_sister1.png");
CCSprite* m_kathia = CCSprite::create("grossinis_sister2.png");
//设置精灵的位置
m_grossini->setPosition( ccp(s.width/2, s.height/2));
m_tamara->setPosition( ccp(s.width/4, s.height/2));
m_kathia->setPosition( ccp(3 * s.width/4, s.height/2));
//添加精灵到图层
addChild(m_grossini, 1);
addChild(m_tamara, 2);
addChild(m_kathia, 3);
//创建扭曲的动作
CCActionInterval *actionTo = CCSkewTo::create(2, 37.2f, -37.2f);
CCActionInterval *actionToBack = CCSkewTo::create(2, 0, 0);
CCActionInterval *actionBy = CCSkewBy::create(2, 0.0f, -90.0f);
CCActionInterval *actionBy2 = CCSkewBy::create(2, 45.0f, 45.0f);
CCActionInterval *actionByBack = actionBy->reverse();
//给精灵添加动作
m_tamara->runAction(CCSequence::create(actionTo, actionToBack, NULL));
m_grossini->runAction(CCSequence::create(actionBy, actionByBack, NULL));
m_kathia->runAction(CCSequence::create(actionBy2, actionBy2->reverse(), NULL));
bRet = true;
} while (0);
return bRet;
}
3、扭曲示例效果图。
五、旋转动作
1、先来看看CCRotateTo和CCRotateBy的使用方法。
<1> CCRotateTo
CCRotateTo::create(float duration,float fDeltaAngle)
作用:创建一个旋转的动作。
参数1:旋转到特定角度所需的时间(秒)。
参数2:旋转的角度,范围是[0,360]。
<2> CCSRotateBy
CCRotateBy::create(float duration,float fDeltaAngle)
作用:创建一个旋转的动作。
参数1:旋转到特定角度所需的时间(秒)。
参数2:旋转的角度,范围是[0,360]。
CCRotateBy支持reverse()函数,可以获取其反向动作。
2、示例代码如下所示。
首先新建Cocos2D-X项目,然后在HelloWorldScene.cpp文件的init函数中添加如下代码。
bool HelloWorld::init()
{
bool bRet = false;
do
{
CC_BREAK_IF(! CCLayer::init());
//获得尺寸大小
CCSize s = CCDirector::sharedDirector()->getWinSize();
//创建精灵
CCSprite* m_grossini = CCSprite::create("grossini.png");
CCSprite* m_tamara = CCSprite::create("grossinis_sister1.png");
CCSprite* m_kathia = CCSprite::create("grossinis_sister2.png");
//设置精灵的位置
m_grossini->setPosition( ccp(s.width/2, s.height/2));
m_tamara->setPosition( ccp(s.width/4, s.height/2));
m_kathia->setPosition( ccp(3 * s.width/4, s.height/2));
//添加精灵到图层
addChild(m_grossini, 1);
addChild(m_tamara, 2);
addChild(m_kathia, 3);
CCActionInterval* actionTo = CCRotateTo::create( 2, 45);
CCActionInterval* actionTo2 = CCRotateTo::create( 2, -45);
CCActionInterval* actionTo0 = CCRotateTo::create(2 , 0);
m_tamara->runAction( CCSequence::create(actionTo, actionTo0, NULL));
CCActionInterval* actionBy = CCRotateBy::create(2 , 360);
CCActionInterval* actionByBack = actionBy->reverse();
m_grossini->runAction( CCSequence::create(actionBy, actionByBack, NULL));
m_kathia->runAction( CCSequence::create(actionTo2, actionTo0->copy()->autorelease(), NULL));
bRet = true;
} while (0);
return bRet;
}
3、旋转示例效果图。