[Cocos2D-X] Cocos2D-X TestCPP 詳解(一)Action 上
Cocos2D-X TestCPP詳解(一)Action 上
之前寫的博文沒有系統(tǒng)的介紹一系列的知識。今天,聽了號哥的知道建議后,收獲頗深。既然現(xiàn)在好多同學剛剛接觸 Cocos2D-X ,也尋求一些好的教材。那么 Cocos2D-X 最好的教材就是自帶的TestCPP 莫屬了。自己也會堅持把 TestCPP 這一系列的博文寫好。讓新手可以當作教材,高手可以當作中文的API來看。
好了,閑話少說。我們運行 TestCPP 后,排列在第一個的就是游戲中常用的 Action 咯。由于,Action部分內(nèi)容過多,今天我們先來介紹一部分。
PS:由于之前一直用的是2.0.4,被人說太老了,所以使用了最新的2.1.3。
首先,我們打開 TestCPP 工程中 ActionsCPP 篩選器。AcionsTest的cpp就在大家眼中了。
我們打開ActionsTest.cpp 會發(fā)現(xiàn)其中有很多代碼。但,我們今天主要來介紹的是 Action 。 其他的就先不介紹了。我們發(fā)現(xiàn) TestCPP 中 ActionsTest 第一個Action UI 上有一串文字。 就是圖中的紅框標記處。這個位置所顯示的內(nèi)容,我們后面需要用到,注意一下。
好了,需要注意的地方我們知道了。下面我們就在 VS2010 中搜索紅框標記的文字把。
我們搜索到了上面的代碼,這就是當前顯示的 Action 所在的類,TestCPP 把 ActionsTest 里面用到的都寫在一個CPP 中了,也方便我們查看咯。
所用的代碼會在他的 OnEnter 方法中。后面就盡量少上圖了,就按照之前的方式來查找。
Manual Transformation:
m_tamara->setScaleX( 2.5f);
m_tamara->setScaleY( -1.0f);
m_tamara->setPosition( ccp(100,70) );
m_tamara->setOpacity( 180);//設(shè)置透明度0-255
m_grossini->setRotation( 120); //旋轉(zhuǎn)0以上向右
m_grossini->setPosition( ccp(s.width/2, s.height/2));
m_grossini->setColor( ccc3( 255,0,0)); //設(shè)置精靈顏色
m_kathia->setPosition( ccp(s.width-100, s.height/2));
m_kathia->setColor( ccBLUE); //設(shè)置顏色藍色
我們看到了,有三個對象:m_tamara、m_grossini、m_kathia。這三個精靈分別代表那三個小人。
m_tamara 就是那個眼鏡妞,我們叫她 Tamara。
m_grossini 就是那個禿瓢,我們叫他 Grossini。
m_kathia 就是那個黑妞了,我們叫他 Kathia。
這里,我們只對他們?nèi)齻€進行了一些變色、設(shè)置位置的操作,無關(guān) Action ,所以不過多介紹。
MoveTo / MoveBy: 移動
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)));
CCMoveTo::create 參數(shù)1:執(zhí)行時間 參數(shù)2:目標點
CCMoveBy::create 參數(shù)1:執(zhí)行時間 參數(shù)2:移動坐標點
我們看到這里有兩個動作,CCMoveTo、CCMoveBy,這兩個動作從字面上很難分開,而后的動作很多也是如此命名。CCMoveTo 是移動到指定坐標點。而 CCMoveBy 呢,是以當前的坐標點為基礎(chǔ),在此之上移動。CCMoveTo 最終是替換了坐標,而 CCMoveBy 是把你提供的坐標與原坐標相加。
runAction 創(chuàng)建好一個動作之后,必須要讓精靈來 runAction ,否則它是不會執(zhí)行這個動作的哦。
CCSequence 這是一個動作序列,當你想讓精靈來執(zhí)行一系列動作的時候來使用它,精靈會安照參數(shù)的順序來執(zhí)行你所提供的動作,當然你要以NULL來當參數(shù)的末尾。
RotateTo / RotateBy: 旋轉(zhuǎn)
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();
CCRotateTo::create 參數(shù)1:執(zhí)行時間 參數(shù)2:旋轉(zhuǎn)角度
CCRotateBy::create 參數(shù)1:執(zhí)行時間 參數(shù)2:旋轉(zhuǎn)角度
這里新出現(xiàn)了一個函數(shù)就是 actionBy->reverse 這個函數(shù)功能就是反轉(zhuǎn)你 actionBy的動作,例如:actionBy 旋轉(zhuǎn)了60度,那么actionBy->reverse就是一個旋轉(zhuǎn)-60度的動作,會讓精靈回到執(zhí)行這個動作之前的狀態(tài)。
ScaleTo / ScaleBy: 縮放、擴大
CCActionInterval* actionTo = CCScaleTo::create(2.0f, 0.5f);
CCActionInterval* actionBy = CCScaleBy::create(2.0f, 1.0f, 10.0f);
CCScaleTo::create 參數(shù)1:執(zhí)行時間 參數(shù)2:縮放比例
CCScaleTo::create 參數(shù)1:執(zhí)行時間 參數(shù)2:X軸縮放比例 參數(shù)3:Y軸縮放比例
CCScaleBy::create 參數(shù)1:執(zhí)行時間 參數(shù)2:縮放比例
SkewTo / SkewBy: 傾斜 (不知如何描述,自己看把。)
CCActionInterval *actionTo = CCSkewTo::create(2, 37.2f, -37.2f);
CCActionInterval *actionToBack = CCSkewTo::create(2, 0, 0);
CCSkewTo::create 參數(shù)1:執(zhí)行時間 參數(shù)2:X軸程度 參數(shù)3:Y軸程度
CCSkewBy::create 參數(shù)1:執(zhí)行時間 參數(shù)2:X軸程度 參數(shù)3:Y軸程度
RotationalSkewTo / RotationalSkewBy: 旋轉(zhuǎn)傾斜
CCRotateTo* actionTo = CCRotateTo::create(2, 37.2f, -37.2f);
CCRotateBy* actionBy = CCRotateBy::create(2, 0.0f, -90.0f);
Skew Comparison:歪斜(歪斜Layer)
CCSkewBy* actionTo = CCSkewBy::create(2, 360, 0);
CCSkewBy* actionToBack = CCSkewBy::create(2, -360, 0);
Skew + Rotate + Scale: 同時進行多個動作
box->runAction(CCSequence::create(actionTo, actionToBack, NULL));
box->runAction(CCSequence::create(rotateTo, rotateToBack, NULL));
box->runAction(CCSequence::create(actionScaleTo, actionScaleToBack, NULL));
我們發(fā)現(xiàn),前面我們都是執(zhí)行一個 動作/動作序列。這里我們同時執(zhí)行了三個動作序列。這樣是可行的,不信你注釋下代碼試試~ 這三個動作序列會同步進行。
JumpTo / JumpBy:跳躍
CCActionInterval* actionTo = CCJumpTo::create(2, ccp(300,300), 50, 4);
CCActionInterval* actionBy = CCJumpBy::create(2, ccp(300,0), 50, 4);
m_kathia->runAction( CCRepeatForever::create(actionUp));
CCJumpTo::create
參數(shù)1:時間 參數(shù)2:目標點 參數(shù)3:最高跳躍高度 參數(shù)4:跳躍次數(shù)
CCJumpBy::create
參數(shù)1:時間 參數(shù)2:移動點 參數(shù)3:最高跳躍高度 參數(shù)4:跳躍次數(shù)
這里我們發(fā)現(xiàn)CCRepeatForever::create 它會使當作參數(shù)的動作無限進行,每次執(zhí)行完后又從第一個開始,像一些比較歡樂蹦達的NPC就可以用這個來做咯。
好了,今天就介紹到這里,Action的東西可不是一般的多。下次我會從貝塞爾曲線移動那塊來介紹,下次見。
CocoStudio 討論學習群:141444261
Cocos2D-X 討論學習群:244959010
更新!
Cocos2D-X TestCPP 詳解(一)Action 上
http://502317120.blog.51cto.com/4062300/1194396