溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

[Cocos2D-X] Cocos2D-X TestCPP 詳解(一)Action 上

發(fā)布時間:2020-06-27 22:09:04 來源:網(wǎng)絡(luò) 閱讀:2849 作者:s13039962531 欄目:游戲開發(fā)

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就在大家眼中了。
[Cocos2D-X] Cocos2D-X TestCPP 詳解(一)Action 上
    我們打開ActionsTest.cpp 會發(fā)現(xiàn)其中有很多代碼。但,我們今天主要來介紹的是 Action 。 其他的就先不介紹了。我們發(fā)現(xiàn) TestCPP 中 ActionsTest 第一個Action UI 上有一串文字。     就是圖中的紅框標記處。這個位置所顯示的內(nèi)容,我們后面需要用到,注意一下。
[Cocos2D-X] Cocos2D-X TestCPP 詳解(一)Action 上

    好了,需要注意的地方我們知道了。下面我們就在 VS2010 中搜索紅框標記的文字把。
[Cocos2D-X] Cocos2D-X TestCPP 詳解(一)Action 上
    我們搜索到了上面的代碼,這就是當前顯示的 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
向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI