嘿嘿 , 我又回來了( 旁白: 滾), 我是滾回來的, 不行麼..
我們剛剛講了如何創建一個精靈, 現在我們來看看怎麼讓這個精靈發生點小變化, 這個可就需要我們大名鼎鼎的action了
我們先來看幾個常用的操作:
CCMoveTo::create( "時間","座標"); //幾秒後移動到座標點
CCMoveBy::create( "時間","座標"); //幾秒後移動到座標點
CCScaleTo::create( "時間","縮放比例"); //幾秒後縮放到指定大小(1:原大小;大於1:放大;小於1:縮小)
CCScaleBy::create( "時間","縮放比例"); //幾秒後縮放到指定大小
CCRotateTo::create( "時間","角度"); //幾秒後旋轉多少度[0,360]
CCRotateBy::create( "時間","角度"); //幾秒後旋轉多少度[0,360]
CCJumpTo::create( "時間","目標位置","高度","到目標跳動次數"); //幾秒後經過幾次跳到指定位置
CCJumpBy::create( "時間","目標位置","高度","到目標跳動次數");//幾秒後經過幾次跳到指定位置
CCCardinalSplineTo::create( "時間","控制點座標數組","平滑度"); //幾秒內按曲線運動(平滑度0最柔和)
CCCardinalSplineBy::create( "時間","控制點座標數組","平滑度");//幾秒內按曲線運動(平滑度0最柔和)
CCFadeIn::create( "時間"); //幾秒內漸顯
CCFadeOut::create( "時間"); //幾秒內漸消
.....................
太多了, 我就不一一列舉了, 大家有需要的話可以查看官方API( 旁白: 真是懶人啊)
注意哦, 返回值是一個CCActionInterval*哦, 大家要注意哈
我們繼續來看常用函數:
runAction("action對象"); //執行一個action動作對象
CCDirector::sharedDirector()->getActionManger()->pauseTarget("對象");//暫停一個對象的動作
CCDirector::sharedDirector()->getActionManager()->pauseAllRunningActions();//暫停所有對象的動作
pauseSchedulerAndActions(); //暫停所有對象的動作及其更新函數
CCDirector::sharedDirector()->getActionManager()->resumeTarget("對象");//繼續一個對象的動作
CCDirector::sharedDirector()->getActionManager()->resumeTargets("CCSet對象");//繼續所有對象的動作
resumeSchedulerAndActions(); //繼續所有對象的動作及其更新函數
stopAction("action對象");//停止對象的動作
stopActionByTag("tag值"); //停止目標對象的動作
stopAllActions(); //停止所有對象的動作
CCDirector::sharedDirector()->getActionManager()->removeAction("action對象");//刪除動作對象
CCDirector::sharedDirector()->getActionManager()->removeActionByTag("tag值");//刪除動作對象
CCDirector::sharedDirector()->getActionManager()->removeAllActions();//刪除所有動作對象
CCDirector::sharedDirector()->getActionManager()->removeAllActionsFromTarget("tag值");//刪除所有相同tag值得動作對象
( 聲明一下, 此處爲複製的, 我是不想打字的, 嘿嘿, 不要告我侵權哈)
老規矩, 我們還是來看看代碼和效果:
嗯, 由於此處版面有限, 所以我就只展示一部分( 旁白: 這也太懶了吧), 有需要的可以查官方API, 或者進羣裏討論223856254,
CCActionInterval* mt = CCMoveTo::create( 1.0f, ccp( 200, 200)); //移動到絕對位置(200, 200)
sp1->runAction( mt); //作爲sp1的動作
CCActionInterval* mb = CCMoveBy::create( 1.0f, ccp( 100, 100)); //移動到相對原來位置(100, 100)
sp3->runAction( mb);
CCActionInterval* st = CCScaleTo::create( 1.0f, 2); //放大到原來的兩倍
sp2->runAction( st);
CCActionInterval* rt = CCRotateTo::create( 1.0f, 45); //旋轉45度
sp2->runAction( rt);
CCActionInterval* jt = CCJumpTo::create( 1.0f, ccp( 300, 100), 50, 3); //經過一秒跳躍3次到達(300, 100), 每次最高距離是50px
sp2->runAction( jt);
效果如圖, 還是上節課的工程哦, 精靈都是上節課的喲
當然, 這個跳動的效果你們肯定是看不到的, 但是放大, 旋轉, 移動之類的是沒問題的, 下面 我們再來看看同時動作,順序動作:
Spawn同時動作每個動作同時執行
Sequence是順序動作每個動作依次一個一個的執行
CCSprite* sp4 = CCSprite::create( "4.png");
sp4->setPosition( ccp( 0, 0));
addChild( sp4);
CCSprite* sp5 = CCSprite::create( "5.png");
sp4->setPosition( ccp( 0, 0));
addChild( sp5);
CCFiniteTimeAction* spawn = CCSpawn::create( jt, rt, NULL); //同時動作
sp4->runAction( spawn);
CCFiniteTimeAction* squene = CCSequence::create( mt, rt, NULL); //順序動作
sp5->runAction( squene);
這裏, 我們要使用NULL來表示我們的參數傳完了哦,
效果圖:
圖片4的所有動作時一起做的, 也就是總共花費一秒時間完成
圖片5的動作時一個接一個的做的, 總共耗時2秒
這個 我實在沒辦法把這些動畫給截下來, 嘿嘿, 反正大家理解這些意思就行, 嗯, action也講來差不多了, 我們今天就到此爲止, 大家一定要多練習, 最好照着官方API全部做一次, 反正我是不提供源代碼的, 要看效果, 嘿嘿, 自己動手寫