1、ActionManual中設定三個精靈的放縮,旋轉,顔色和位置
m_tamara->setScaleX( 2.5f);
m_tamara->setScaleY( -1.0f);
m_tamara->setPosition( ccp(100,70) );
m_tamara->setOpacity( 128);
m_grossini->setRotation( 120);
m_grossini->setPosition( ccp(s.width/2, s.height/2));
m_grossini->setColor( ccc3( 255,0,0));
m_kathia->setPosition( ccp(s.width-100, s.height/2));
m_kathia->setColor( ccBLUE);
2、ActionMove移動處理
centerSprites(3);
CCSize s = CCDirector::sharedDirector()->getWinSize();
-- 分别建立CCMoveTo,CCMoveBy動作
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)));
3、ActionScale放縮處理
centerSprites(3);
-- 建立CCScaleTo,CCScaleBy動作
CCActionInterval* actionTo = CCScaleTo::create(2.0f, 0.5f);
CCActionInterval* actionBy = CCScaleBy::create(2.0f, 1.0f, 10.0f);
CCActionInterval* actionBy2 = CCScaleBy::create(2.0f, 5.0f, 1.0f);
m_grossini->runAction( actionTo);
m_tamara->runAction( CCSequence::create(actionBy, actionBy->reverse(), NULL));
m_kathia->runAction( CCSequence::create(actionBy2, actionBy2->reverse(), NULL));
4、建立CCSkewTo動作,參數對應變換時間,x扭曲,y扭曲
// static CCSkewTo* create(float t, float sx, float sy);
// static CCSkewBy* create(float t, float deltaSkewX, float deltaSkewY);
// CCSequence* CCSequence::create(CCFiniteTimeAction *pAction1, ...) 建立可變數目的一系列動作
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));
5、建立ActionRotationalSkew變換,fDuration時間内,X方向旋轉變化fDeltaAngleX,Y方向旋轉變化fDeltaAngleY
// CCRotateTo* CCRotateTo::create(float fDuration, float fDeltaAngleX, float fDeltaAngleY)
// CCRotateBy* CCRotateBy::create(float fDuration, float fDeltaAngleX, float fDeltaAngleY)
CCRotateTo* actionTo = CCRotateTo::create(2, 37.2f, -37.2f);
CCRotateTo* actionToBack = CCRotateTo::create(2, 0, 0);
CCRotateBy* actionBy = CCRotateBy::create(2, 0.0f, -90.0f);
CCRotateBy* actionBy2 = CCRotateBy::create(2, 45.0f, 45.0f);
CCRotateBy* actionByBack = (CCRotateBy*)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));
6、ActionRotationalSkewVSStandardSkew旋轉扭曲與标準扭曲對比
CCSize s = CCDirector::sharedDirector()->getWinSize();
CCSize boxSize = CCSizeMake(100.0f, 100.0f);
// 建立一個CCLayerColor層顔色:ccc4(255,255,0,255),設定錨點,内容大小,開啟錨點有效,然後把它加入到場景中
CCLayerColor *box = CCLayerColor::create(ccc4(255,255,0,255));
box->setAnchorPoint(ccp(0.5,0.5));
box->setContentSize( boxSize );
box->ignoreAnchorPointForPosition(false);
box->setPosition(ccp(s.width/2, s.height - 100 - box->getContentSize().height/2));
this->addChild(box);
// 添加描述性文字,1:顯示字元串,2:字型名稱,3:字型大小
// CCLabelTTF * CCLabelTTF::create(const char *string, const char *fontName, float fontSize)
CCLabelTTF *label = CCLabelTTF::create("Standard cocos2d Skew", "Marker Felt", 16);
label->setPosition(ccp(s.width/2, s.height - 100 + label->getContentSize().height));
this->addChild(label);
// 建立動作序列 ,對應Standard cocos2d Skew
CCSkewBy* actionTo = CCSkewBy::create(2, 360, 0);
CCSkewBy* actionToBack = CCSkewBy::create(2, -360, 0);
box->runAction(CCSequence::create(actionTo, actionToBack, NULL));
box = CCLayerColor::create(ccc4(255,255,0,255));
box->setAnchorPoint(ccp(0.5,0.5));
box->setContentSize(boxSize);
box->ignoreAnchorPointForPosition(false);
box->setPosition(ccp(s.width/2, s.height - 250 - box->getContentSize().height/2));
this->addChild(box);
label = CCLabelTTF::create("Rotational Skew", "Marker Felt", 16);
label->setPosition(ccp(s.width/2, s.height - 250 + label->getContentSize().height/2));
this->addChild(label);
// 建立動作序列,對應Rotational Skew
CCRotateBy* actionTo2 = CCRotateBy::create(2, 360, 0);
CCRotateBy* actionToBack2 = CCRotateBy::create(2, -360, 0);
box->runAction(CCSequence::create(actionTo2, actionToBack2, NULL));
7、ActionSkewRotateScale建立不同動作的組合
CCSize boxSize = CCSizeMake(100.0f, 100.0f);
// 建立一個box層用來執行動畫序列
CCLayerColor *box = CCLayerColor::create(ccc4(255, 255, 0, 255));
box->setAnchorPoint(ccp(0, 0));
box->setPosition(ccp(190, 110));
box->setContentSize(boxSize);
// 建立兩個小格子,紅色左邊,藍色右邊
static float markrside = 10.0f;
CCLayerColor *uL = CCLayerColor::create(ccc4(255, 0, 0, 255));
box->addChild(uL);
uL->setContentSize(CCSizeMake(markrside, markrside));
uL->setPosition(ccp(0.f, boxSize.height - markrside));
uL->setAnchorPoint(ccp(0, 0));
CCLayerColor *uR = CCLayerColor::create(ccc4(0, 0, 255, 255));
box->addChild(uR);
uR->setContentSize(CCSizeMake(markrside, markrside));
uR->setPosition(ccp(boxSize.width - markrside, boxSize.height - markrside));
uR->setAnchorPoint(ccp(0, 0));
addChild(box);
// 建立扭曲,旋轉,放縮的動作序列
CCActionInterval *actionTo = CCSkewTo::create(2, 0.f, 2.f);
CCActionInterval *rotateTo = CCRotateTo::create(2, 61.0f);
CCActionInterval *actionScaleTo = CCScaleTo::create(2, -0.44f, 0.47f);
CCActionInterval *actionScaleToBack = CCScaleTo::create(2, 1.0f, 1.0f);
CCActionInterval *rotateToBack = CCRotateTo::create(2, 0);
CCActionInterval *actionToBack = CCSkewTo::create(2, 0, 0);
// 這裡讓顔色層同時執行三個動畫,runAction會把動作對象和主角傳給動畫管理器,這些動畫會存入相應的動畫集,動畫管理器會在每一幀更新相應的動畫,
// 雖然他們是動畫序列但本身仍然是動畫,是以多次調用runAction會将多個動畫或動畫序列同時播放
box->runAction(CCSequence::create(actionTo, actionToBack, NULL));
box->runAction(CCSequence::create(rotateTo, rotateToBack, NULL));
box->runAction(CCSequence::create(actionScaleTo, actionScaleToBack, NULL));
8、旋轉動作序列,時間-旋轉角度
// CCRotateTo* CCRotateTo::create(float fDuration, float fDeltaAngle)
// CCRotateBy* CCRotateBy::create(float fDuration, float fDeltaAngle)
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));
9、跳動動畫序列,時間-位置點-跳躍高度-跳躍次數(to:跳到position,by:相對于目前位置跳轉position标示的相對位置)
// CCJumpTo* CCJumpTo::create(float duration, const CCPoint& position, float height, int jumps)
// CCJumpBy* CCJumpBy::create(float duration, const CCPoint& position, float height, unsigned int jumps)
CCActionInterval* actionTo = CCJumpTo::create(2, ccp(300,300), 50, 4);
CCActionInterval* actionBy = CCJumpBy::create(2, ccp(300,0), 50, 4);
CCActionInterval* actionUp = CCJumpBy::create(2, ccp(0,0), 80, 4);
CCActionInterval* actionByBack = actionBy->reverse();
m_tamara->runAction( actionTo);
m_grossini->runAction( CCSequence::create(actionBy, actionByBack, NULL));
m_kathia->runAction( CCRepeatForever::create(actionUp));
10、貝塞爾曲線動作序列ActionBezier
// CCBezierBy* CCBezierBy::create(float t, const ccBezierConfig& c) 時間-貝塞爾參數建立貝塞爾曲線動作序列
// CCRepeatForever *CCRepeatForever::create(CCActionInterval *pAction) 根據CCActionInterval對象建立永久性動作
// 設定貝塞爾曲線的控制參數,控制點1-控制點2-結束點
ccBezierConfig bezier;
bezier.controlPoint_1 = ccp(0, s.height/2);
bezier.controlPoint_2 = ccp(300, -s.height/2);
bezier.endPosition = ccp(300,100);
CCActionInterval* bezierForward = CCBezierBy::create(3, bezier);
CCActionInterval* bezierBack = bezierForward->reverse();
CCAction* rep = CCRepeatForever::create(CCSequence::create( bezierForward, bezierBack, NULL));
m_grossini->runAction( rep);
11、閃爍動畫序列ActionBlink 時間-閃爍次數
// CCBlink* CCBlink::create(float duration, unsigned int uBlinks)
CCActionInterval* action1 = CCBlink::create(2, 2);
CCActionInterval* action2 = CCBlink::create(2, 10);
m_tamara->runAction( action1);
m_kathia->runAction(action2);
12、消隐動作序列CCFadeIn
// CCFadeIn* CCFadeIn::create(float d) 淡入(時間)
// CCFadeOut* CCFadeOut::create(float d) 淡出(時間)
CCActionInterval* action1 = CCFadeIn::create(1.0f);
CCActionInterval* action1Back = action1->reverse();
CCActionInterval* action2 = CCFadeOut::create(1.0f);
CCActionInterval* action2Back = action2->reverse();
m_tamara->runAction( CCSequence::create( action1, action1Back, NULL));
m_kathia->runAction( CCSequence::create( action2, action2Back, NULL));
13、色調調節CCTintTo/CCTintBy
// static CCTintTo* create(float duration, GLubyte red, GLubyte green, GLubyte blue); 時間-rgb顔色
// static CCTintBy* create(float duration, GLshort deltaRed, GLshort deltaGreen, GLshort deltaBlue); 時間-rgb顔色
CCActionInterval* action1 = CCTintTo::create(2, 255, 0, 255);
CCActionInterval* action2 = CCTintBy::create(2, -127, -255, -127);
CCActionInterval* action2Back = action2->reverse();
m_tamara->runAction( action1);
m_kathia->runAction( CCSequence::create( action2, action2Back, NULL));
14、ActionAnimate動畫效果
// static CCAnimation* create(void); 建立動畫效果
// void addSpriteFrameWithFileName(const char *pszFileName); 根據檔案名建立精靈幀,并加入到動畫序列中,有一定的時延
// static CCAnimate* create(CCAnimation *pAnimation); 根據動畫建立動作序列,能恢複到最初的精靈幀
// void addAnimationsWithFile(const char* plist); 根據給定的plist檔案添加一個動畫序列
// CCAnimation* animationByName(const char* name); 根據檔案名擷取之前添加的動畫序列
// 定義一個來建立保護成員變量,和它的一套擷取設定方,友善快捷的設定對象的屬性
// #define CC_SYNTHESIZE(varType, varName, funName)\
// protected: varType varName;\
// public: virtual varType get##funName(void) const { return varName; }\
// public: virtual void set##funName(varType var){ varName = var; }
CCAnimation* animation = CCAnimation::create();
for( int i=1;i<15;i++)
{
char szName[100] = {0};
sprintf(szName, "Images/grossini_dance_%02d.png", i);
animation->addSpriteFrameWithFileName(szName);
}
// 設定每個精靈幀的時延為2.8f / 14.0f,并恢複到最初的精靈幀
animation->setDelayPerUnit(2.8f / 14.0f);
animation->setRestoreOriginalFrame(true);
//根據動畫建立動作序列用來執行實際的動作
CCAnimate* action = CCAnimate::create(animation);
m_grossini->runAction(CCSequence::create(action, action->reverse(), NULL));
//從plist檔案建立動畫效果
CCAnimationCache *cache = CCAnimationCache::sharedAnimationCache();
cache->addAnimationsWithFile("animations/animations-2.plist");
CCAnimation *animation2 = cache->animationByName("dance_1");
CCAnimate* action2 = CCAnimate::create(animation2);
m_tamara->runAction(CCSequence::create(action2, action2->reverse(), NULL));
//設定循環4次
CCAnimation *animation3 = (CCAnimation *)animation2->copy()->autorelease();
animation3->setLoops(4);
CCAnimate* action3 = CCAnimate::create(animation3);
m_kathia->runAction(action3);
15、動作序列建立
// CCSequence* CCSequence::create(CCFiniteTimeAction *pAction1, ...) 建立可變動個數的動作序列
CCFiniteTimeAction* action = CCSequence::create(
CCMoveBy::create( 2, ccp(240,0)),
CCRotateBy::create( 2, 540),
NULL);
m_grossini->runAction(action);
動作完成之後處理不同的函數
// static CCPlace * create(const CCPoint& pos); 建立節點在pos位置
// static CCShow * create(); 建立節點,并初始化
// static CCCallFunc * create(CCObject* pSelectorTarget, SEL_CallFunc selector); 建立動作附帶的回調函數,無參
// static CCCallFuncN * create(CCObject* pSelectorTarget, SEL_CallFuncN selector); 建立動作附帶的回調函數,節點對象
// static CCCallFuncND * create(CCObject* pSelectorTarget, SEL_CallFuncND selector, void* d); 建立動作附帶的回調函數,節點對象-資料
CCFiniteTimeAction* action = CCSequence::create(
CCPlace::create(ccp(200,200)),
CCShow::create(),
CCMoveBy::create(1, ccp(100,0)),
CCCallFunc::create(this, callfunc_selector(ActionSequence2::callback1)),
CCCallFuncN::create(this, callfuncN_selector(ActionSequence2::callback2)),
CCCallFuncND::create(this, callfuncND_selector(ActionSequence2::callback3), (void*)0xbebabeba),
NULL);
m_grossini->runAction(action);
對應的三個回調函數,我們可在裡面進行相應的處理
void ActionSequence2::callback1()
void ActionSequence2::callback2(CCNode* sender)
void ActionSequence2::callback3(CCNode* sender, void* data)
16、連續的動作序列
// static CCSpawn* create(CCFiniteTimeAction *pAction1, ...); 傳入動作序列,他會同時執行這幾個動作
CCAction* action = CCSpawn::create(
CCJumpBy::create(2, ccp(300,0), 50, 4),
CCRotateBy::create( 2, 720),
NULL);
m_grossini->runAction(action);
17、逆序動作序列ActionReverse
// virtual CCActionInterval* reverse(void); 傳回這個動作序列的逆序列
CCActionInterval* jump = CCJumpBy::create(2, ccp(300,0), 50, 4);
CCFiniteTimeAction* action = CCSequence::create( jump, jump->reverse(), NULL);
m_grossini->runAction(action);
18、重複性的序列動作
// static CCRepeat* create(CCFiniteTimeAction *pAction, unsigned int times); 要重複的動作序列-次數
// static CCRepeatForever* create(CCActionInterval *pAction); 一直持續性的動作序列
CCActionInterval* a1 = CCMoveBy::create(1, ccp(150,0));
CCActionInterval* action1 = CCRepeat::create(
CCSequence::create( CCPlace::create(ccp(60,60)), a1, NULL) ,
3);
CCAction* action2 = CCRepeatForever::create(
CCSequence::create((CCActionInterval*)(a1->copy()->autorelease()), a1->reverse(), NULL)
);
m_kathia->runAction(action1);
m_tamara->runAction(action2);
19、延時性的動作序列
// static CCDelayTime* create(float d); 延遲的時間,機關:秒
CCActionInterval* move = CCMoveBy::create(1, ccp(150,0));
CCFiniteTimeAction* action = CCSequence::create( move, CCDelayTime::create(2), move, NULL);
m_grossini->runAction(action);
20、逆序的一組動作序列
// 這裡的CCSequence本質上還是一個動作序列,雖然他包括了一組的動作序列,是以我們可以對他直接取逆序操作
CCActionInterval* move1 = CCMoveBy::create(1, ccp(250,0));
CCActionInterval* move2 = CCMoveBy::create(1, ccp(0,50));
CCFiniteTimeAction* seq = CCSequence::create( move1, move2, move1->reverse(), NULL);
CCFiniteTimeAction* action = CCSequence::create( seq, seq->reverse(), NULL);
m_grossini->runAction(action);
// 一組動作序列包括IntervalAction和InstantActions兩種
// class CC_DLL CCToggleVisibility : public CCActionInstant 轉變節點的可見性,new出來的要自動釋放(顯示調用autorelease)
CCActionInterval* move1 = CCMoveBy::create(1, ccp(250,0));
CCActionInterval* move2 = CCMoveBy::create(1, ccp(0,50));
CCToggleVisibility* tog1 = new CCToggleVisibility();
CCToggleVisibility* tog2 = new CCToggleVisibility();
tog1->autorelease();
tog2->autorelease();
CCFiniteTimeAction* seq = CCSequence::create( move1, tog1,tog2, move2, move1->reverse(), NULL);
CCActionInterval* action = CCRepeat::create(CCSequence::create( seq, seq->reverse(), NULL), 3);
m_kathia->runAction(action);
// class CC_DLL CCHide : public CCActionInstant 用來隐藏一個節點
CCActionInterval* move_tamara = CCMoveBy::create(1, ccp(100,0));
CCActionInterval* move_tamara2 = CCMoveBy::create(1, ccp(50,0));
CCActionInstant* hide = CCHide::create();
CCFiniteTimeAction* seq_tamara = CCSequence::create( move_tamara, hide, move_tamara2, NULL);
CCFiniteTimeAction* seq_back = seq_tamara->reverse();
m_tamara->runAction( CCSequence::create( seq_tamara, seq_back, NULL));
21、建立一個球面坐标軌迹進行的旋轉動作序列
// 參數:旋轉軌迹的時間差-起始半徑-半徑差-起始z角-旋轉z角差-起始x角-旋轉x角差
// static CCOrbitCamera* create(float t, float radius, float deltaRadius, float angleZ, float deltaAngleZ, float angleX, float deltaAngleX);
CCActionInterval* orbit1 = CCOrbitCamera::create(2,1, 0, 0, 180, 0, 0);
CCSequence* action1 = CCSequence::create(
orbit1,
orbit1->reverse(),
NULL);
m_kathia->runAction(CCRepeatForever::create(action1));
CCActionInterval* move = CCMoveBy::create(3, ccp(100,-100));
CCActionInterval* move_back = move->reverse();
CCSequence* seq = CCSequence::create(move, move_back, NULL);
CCAction* rfe = CCRepeatForever::create(seq);
m_kathia->runAction(rfe);
22、移除節點動作
// static CCRemoveSelf * create(bool isNeedCleanUp = true); 移除自身,并預設清空自身
CCFiniteTimeAction* action = CCSequence::create(
CCMoveBy::create( 2, ccp(240,0)),
CCRotateBy::create( 2, 540),
CCScaleTo::create(1,0.1f),
CCRemoveSelf::create(),
NULL);
m_grossini->runAction(action);
23、ActionRepeatForever重複動作放在動作的毀掉函數中
CCFiniteTimeAction* action = CCSequence::create(
CCDelayTime::create(1),
CCCallFuncN::create( this, callfuncN_selector(ActionRepeatForever::repeatForever) ),
NULL);
m_grossini->runAction(action);
// 回調加入永遠執行的旋轉動作
void ActionRepeatForever::repeatForever(CCNode* pSender)
{
CCRepeatForever *repeat = CCRepeatForever::create( CCRotateBy::create(1.0f, 360) );
pSender->runAction(repeat);
}
// 旋轉的重複動作
CCActionInterval* act1 = CCRotateTo::create(1, 90);
CCActionInterval* act2 = CCRotateTo::create(1, 0);
CCActionInterval* seq = CCSequence::create(act1, act2, NULL);
CCAction* rep1 = CCRepeatForever::create(seq);
m_tamara->runAction(rep1);
24、建立跟随動作CCFollow
// static CCFollow* create(CCNode *pFollowedNode, const CCRect& rect = CCRectZero); 建立跟随動作序列,在指定的矩形區域中
CCSize s = CCDirector::sharedDirector()->getWinSize();
m_grossini->setPosition(ccp(-200, s.height / 2));
// 建立相對移動的動作序列
CCActionInterval* move = CCMoveBy::create(2, ccp(s.width * 3, 0));
CCActionInterval* move_back = move->reverse();
CCSequence* seq = CCSequence::create(move, move_back, NULL);
CCAction* rep = CCRepeatForever::create(seq);
m_grossini->runAction(rep);
// 在指定的區域CCRectMake跟随精靈m_grossini,
this->runAction(CCFollow::create(m_grossini, CCRectMake(0, 0, s.width * 2 - 100, s.height)));
// 繪制精靈移動的部分舉行區域
void ActionFollow::draw()
{
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
float x = winSize.width*2 - 100;
float y = winSize.height;
CCPoint vertices[] = { ccp(5,5), ccp(x-5,5), ccp(x-5,y-5), ccp(5,y-5) };
ccDrawPoly(vertices, 4, true);
}
25、建立指定節點對象的動作序列,可以使兩個對象按照順序示範動作序列
// static CCTargetedAction* create(CCNode* pTarget, CCFiniteTimeAction* pAction); 根據一個節點對象和動作序列建立,把動作序列綁定到節點對象
CCJumpBy* jump1 = CCJumpBy::create(2,CCPointZero,100,3);
CCJumpBy* jump2 = (CCJumpBy*)jump1->copy()->autorelease();
CCRotateBy* rot1 = CCRotateBy::create(1, 360);
CCRotateBy* rot2 = (CCRotateBy*)rot1->copy()->autorelease();
// 把jump2和rot2動作序列綁定到精靈m_kathia
CCTargetedAction *t1 = CCTargetedAction::create(m_kathia, jump2);
CCTargetedAction *t2 = CCTargetedAction::create(m_kathia, rot2);
CCSequence* seq = (CCSequence*)CCSequence::create(jump1, t1, rot1, t2, NULL);
CCRepeatForever *always = CCRepeatForever::create(seq);
m_tamara->runAction(always);
26、添加震動的精靈動作序列
// static CCTargetedAction* create(CCNode* pTarget, CCFiniteTimeAction* pAction); 根據一個節點對象和動作序列建立,把動作序列綁定到節點對象
CCJumpBy* jump1 = CCJumpBy::create(2,CCPointZero,100,3);
CCJumpBy* jump2 = (CCJumpBy*)jump1->copy()->autorelease();
CCRotateBy* rot1 = CCRotateBy::create(1, 360);
CCRotateBy* rot2 = (CCRotateBy*)rot1->copy()->autorelease();
// 把jump2和rot2動作序列綁定到精靈m_kathia
CCTargetedAction *t1 = CCTargetedAction::create(m_kathia, jump2);
CCTargetedAction *t2 = CCTargetedAction::create(m_kathia, rot2);
CCSequence* seq = (CCSequence*)CCSequence::create(jump1, t1, rot1, t2, NULL);
CCRepeatForever *always = CCRepeatForever::create(seq);
m_tamara->runAction(always);
27、添加暫停,重新執行動作序列處理
// 在3秒暫停旋轉動作,5s恢複動作序列
m_tamara->runAction(CCRepeatForever::create(CCRotateBy::create(3, 360)));
m_grossini->runAction(CCRepeatForever::create(CCRotateBy::create(3, -360)));
m_kathia->runAction(CCRepeatForever::create(CCRotateBy::create(3, 360)));
this->schedule(schedule_selector(PauseResumeActions::pause), 3, false, 0);
this->schedule(schedule_selector(PauseResumeActions::resume), 5, false, 0);
void PauseResumeActions::pause(float dt)
{
// 暫停所有的運作動作
CCLog("Pausing");
CCDirector *director = CCDirector::sharedDirector();
CC_SAFE_RELEASE(m_pPausedTargets);
m_pPausedTargets = director->getActionManager()->pauseAllRunningActions();
CC_SAFE_RETAIN(m_pPausedTargets);
}
void PauseResumeActions::resume(float dt)
{
// 恢複所有的動作序列的執行
CCLog("Resuming");
CCDirector *director = CCDirector::sharedDirector();
director->getActionManager()->resumeTargets(m_pPausedTargets);
}