1. 程式人生 > >Cocos2d-x學習筆記(三)淺析動作類CCAction(2)

Cocos2d-x學習筆記(三)淺析動作類CCAction(2)

有關CCAction其它動作類簡介:

(1)攝像機動作類CCOrbitCamera

 攝像機動作是環繞中心螢幕旋轉所形成的動作,其旋轉座標採用球座標描述。

 Create()函式原型CCOrbitCamera* createfloat,float,float,float,float,float,float),第一個引數表示時間間隔,第二、三個引數分別表示起始半徑和過程半徑,第四、五個引數分別表示起始Z軸夾角和過程Z軸夾角,第六、七個引數分別表示起始X軸夾角和過程X軸夾角。

(2)基本樣條動作:CCCatmullRomTo

By)和CCCardinalSplineTo(By)

遊戲物件通過一些離散的點模擬出相應的路徑,有相應的公式模擬出這條曲線,那就是基本樣條了。

1、基本樣條路徑CCCardinalSplineToBy):

Create()函式原型CCCardinalSplineTo* crete(float,CCPointArray*,float),第一個引數表示時間間隔,第二個引數表示點陣列,第三個引數表示拉力系數。前面說過,一個是相對量,一個是絕對量,注意使用相對量時應第一個點最好設定為(0,0),否則會被忽略掉。

2Catmull-Rom樣條路徑CCCatmullRomTo

By),用法類似,只是不需要拉力系數做引數。

(3)緩衝動作類CCActionEase

 在現實運動中,常常需要實現一些加減速效果,緩衝動作可以幫我們實現。主要有指數緩衝、賽因緩衝、跳躍緩衝、彈性緩衝、回震緩衝和基本緩衝六大類。一般第一個引數為緩衝動作,若有2個引數,基本動作的第二個引數為速率,彈性緩衝為震動週期。其基本呼叫形式為(CCActionInterval*(move->copy()->autorelease()……)

(4)組合動作類CCSequenceCCSpawnCCRepeatCCrepeatForever

 在遊戲中,遊戲物件有時不只是執行一個動作執行多個動作的動作序列,這時需要用動作組合在一起,用組合動作類可以實現它。

1、動作序列CCSequence

 前面也有提到過,Create()函式引數是由一系列動作及一個以NULL結尾的構成,呼叫形式一般為CCSequence::crate(ation1,ation2,,NULL);

2、合成動作CCSpawn

 CCSpawn動作使被合成的動作同時進行,其呼叫方式與動作序列一致。

3、動作重複類CCRepeatCCrepeatForever

 二者可以使動作重複進行,不同之處在於CCRepeat可以在第二個引數定義重複次數,而CCrepeatForever則一直重複。一般呼叫形式為:

CCRepeat::create((CCFiniteTimeAction*)(seq->copy()->autorelease()),nCount);

CCrepeatForever::create((CCActionInterval*)(seq->copy()->autorelease());

 

(5)跟隨動作類CCFollow

 Create()函式原型CCFollow* create(CCNode*,CCRect&),第一引數為要跟隨的動作節點(一般為執行動作的精靈類),第二個引數為運動的邊界(如果沒有傳入邊界,則視為沒有邊界)。

執行效果一般為:螢幕跟隨精靈的移動而移動。

(6)可調整速度動作類CCSpeed

 Crate()函式原型CCSpeed* create(CCActionInterval*,float),第一個引數表示延時動作(一般為動作序列或合成動作),第二個引數可理解為速率。CCSpeed的成員函式setSpeed()可設定速度,等於1原速,大於1加速,小於1減速。

(7)動作延時類CCDelayTime:

Create()函式原型CCDelayTime* create(float),引數表示間隔時間。動作延時顧名思義延後一段時間執行,可以理解為執行了一段空動作,一般放在動作序列CCSequence中才能看到效果。

(8)改變動作執行物件類CCTargetedAction

Create()函式原型CCTargetedAction.* create(CCNode*,CCFiniteTimeAction*),第一個引數表示執行動作的精靈,第二個引數為精靈執行的動作。當一個精靈執行一個動作序列時,遇到CCTargetedAction物件時會將許可權賦給第一個精靈類引數執行其動作。參照程式碼分析:

CCTargetedAction *t1 = CCTargetedAction::create(m_kathia, jump2);

CCTargetedAction *t2 = CCTargetedAction::create(m_kathia, rot2);

CCSequence* seq = (CCSequence*)CCSequence::create(jump1, t1, rot1, t2, NULL);

CCRepeatForever *always = CCRepeatForever::create(seq);

m_tamara->runAction(always);

當m_tamara執行一系列動作時,遇到t1時動作jump2由精靈m_kathia執行,t2類似。主要目的是改變動作的執行物件。

(9)函式回撥動作類CCCallFunc:

 有時候某些動作執行完後,需要執行一些資料上的處理,比如攻擊一個敵人,需要處理加減血等,這時需要使用函式回撥動作。

Create()函式原型CCCallFunc* (CCObject*,SEL_CallFunc),第一個引數為擁有回撥函式的物件,第二個引數為相應選擇器獲得相應函式名稱。CCCallFuncN、CCCallFuncND類的使用類似,CCCallFuncND有三個引數,第三個引數是資料物件。