cocos2dX action

嘿嘿 , 我又回來了( 旁白: 滾), 我是滾回來的, 不行麼..

我們剛剛講了如何創建一個精靈, 現在我們來看看怎麼讓這個精靈發生點小變化, 這個可就需要我們大名鼎鼎的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全部做一次, 反正我是不提供源代碼的, 要看效果, 嘿嘿, 自己動手寫奮鬥




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章