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

Cocos2D-X TestCPP詳解(一)Action 上

    之前寫的博文沒有系統的介紹一系列的知識。今天,聽了號哥的知道建議後,收穫頗深。既然現在好多同學剛剛接觸 Cocos2D-X ,也尋求一些好的教材。那麼 Cocos2D-X 最好的教材就是自帶的TestCPP 莫屬了。自己也會堅持把 TestCPP 這一系列的博文寫好。讓新手可以當作教材,高手可以當作中文的API來看。

    好了,閒話少說。我們運行 TestCPP 後,排列在第一個的就是遊戲中常用的 Action 咯。由於,Action部分內容過多,今天我們先來介紹一部分。

PS:由於之前一直用的是2.0.4,被人說太老了,所以使用了最新的2.1.3。

    首先,我們打開 TestCPP 工程中 ActionsCPP 篩選器。AcionsTest的cpp就在大家眼中了。
    我們打開ActionsTest.cpp 會發現其中有很多代碼。但,我們今天主要來介紹的是 Action 。 其他的就先不介紹了。我們發現 TestCPP 中 ActionsTest 第一個Action UI 上有一串文字。     就是圖中的紅框標記處。這個位置所顯示的內容,我們後面需要用到,注意一下。

    好了,需要注意的地方我們知道了。下面我們就在 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);//設置透明度0-255

        m_grossini->setRotation( 120); //旋轉0以上向右
        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); //設置顏色藍色
    我們看到了,有三個對象:m_tamara、m_grossini、m_kathia。這三個精靈分別代表那三個小人。

    m_tamara 就是那個眼鏡妞,我們叫她 Tamara。
    m_grossini 就是那個禿瓢,我們叫他 Grossini。
    m_kathia 就是那個黑妞了,我們叫他 Kathia。

    這裏,我們只對他們三個進行了一些變色、設置位置的操作,無關 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 參數1:執行時間 參數2:目標點
    CCMoveBy::create 參數1:執行時間 參數2:移動座標點
    
    我們看到這裏有兩個動作,CCMoveTo、CCMoveBy,這兩個動作從字面上很難分開,而後的動作很多也是如此命名。CCMoveTo 是移動到指定座標點。而 CCMoveBy 呢,是以當前的座標點爲基礎,在此之上移動。CCMoveTo 最終是替換了座標,而 CCMoveBy 是把你提供的座標與原座標相加。
    runAction 創建好一個動作之後,必須要讓精靈來 runAction ,否則它是不會執行這個動作的哦。
    CCSequence 這是一個動作序列,當你想讓精靈來執行一系列動作的時候來使用它,精靈會安照參數的順序來執行你所提供的動作,當然你要以NULL來當參數的末尾。

RotateTo / RotateBy: 旋轉

  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 參數1:執行時間 參數2:旋轉角度
    CCRotateBy::create 參數1:執行時間 參數2:旋轉角度

    這裏新出現了一個函數就是 actionBy->reverse 這個函數功能就是反轉你 actionBy的動作,例如:actionBy 旋轉了60度,那麼actionBy->reverse就是一個旋轉-60度的動作,會讓精靈回到執行這個動作之前的狀態。

ScaleTo / ScaleBy: 縮放、擴大 

  CCActionInterval*    actionTo = CCScaleTo::create(2.0f, 0.5f);
  CCActionInterval*    actionBy = CCScaleBy::create(2.0f, 1.0f, 10.0f);

    CCScaleTo::create 參數1:執行時間 參數2:縮放比例
    CCScaleTo::create 參數1:執行時間 參數2:X軸縮放比例 參數3:Y軸縮放比例
    CCScaleBy::create 參數1:執行時間 參數2:縮放比例

SkewTo / SkewBy: 傾斜 (不知如何描述,自己看把。)

  CCActionInterval *actionTo = CCSkewTo::create(2, 37.2f, -37.2f);
  CCActionInterval *actionToBack = CCSkewTo::create(2, 0, 0);

    CCSkewTo::create 參數1:執行時間 參數2:X軸程度 參數3:Y軸程度 
    CCSkewBy::create 參數1:執行時間 參數2:X軸程度 參數3:Y軸程度 

RotationalSkewTo / RotationalSkewBy: 旋轉傾斜

  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));
 
    我們發現,前面我們都是執行一個 動作/動作序列。這裏我們同時執行了三個動作序列。這樣是可行的,不信你註釋下代碼試試~ 這三個動作序列會同步進行。

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
      參數1:時間 參數2:目標點 參數3:最高跳躍高度 參數4:跳躍次數
    CCJumpBy::create
      參數1:時間 參數2:移動點 參數3:最高跳躍高度 參數4:跳躍次數
    
    這裏我們發現CCRepeatForever::create 它會使當作參數的動作無限進行,每次執行完後又從第一個開始,像一些比較歡樂蹦達的NPC就可以用這個來做咯。

    好了,今天就介紹到這裏,Action的東西可不是一般的多。下次我會從貝塞爾曲線移動那塊來介紹,下次見。
    CocoStudio 討論學習羣:141444261
    Cocos2D-X  討論學習羣:244959010
更新!
Cocos2D-X TestCPP 詳解(一)Action 上
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章