Cocos2d-x學習筆記(三)淺析動作類CCAction(2)
有關CCAction其它動作類簡介:
(1)攝像機動作類CCOrbitCamera:
攝像機動作是環繞中心螢幕旋轉所形成的動作,其旋轉座標採用球座標描述。
Create()函式原型CCOrbitCamera* create(float,float,float,float,float,float,float),第一個引數表示時間間隔,第二、三個引數分別表示起始半徑和過程半徑,第四、五個引數分別表示起始Z軸夾角和過程Z軸夾角,第六、七個引數分別表示起始X軸夾角和過程X軸夾角。
(2)基本樣條動作:CCCatmullRomTo
遊戲物件通過一些離散的點模擬出相應的路徑,有相應的公式模擬出這條曲線,那就是基本樣條了。
1、基本樣條路徑CCCardinalSplineTo(By):
Create()函式原型CCCardinalSplineTo* crete(float,CCPointArray*,float),第一個引數表示時間間隔,第二個引數表示點陣列,第三個引數表示拉力系數。前面說過,一個是相對量,一個是絕對量,注意使用相對量時應第一個點最好設定為(0,0),否則會被忽略掉。
2、Catmull-Rom樣條路徑CCCatmullRomTo
(3)緩衝動作類CCActionEase:
在現實運動中,常常需要實現一些加減速效果,緩衝動作可以幫我們實現。主要有指數緩衝、賽因緩衝、跳躍緩衝、彈性緩衝、回震緩衝和基本緩衝六大類。一般第一個引數為緩衝動作,若有2個引數,基本動作的第二個引數為速率,彈性緩衝為震動週期。其基本呼叫形式為(CCActionInterval*)(move->copy()->autorelease()……)。
(4)組合動作類CCSequence、CCSpawn和CCRepeat、CCrepeatForever:
在遊戲中,遊戲物件有時不只是執行一個動作執行多個動作的動作序列,這時需要用動作組合在一起,用組合動作類可以實現它。
1、動作序列CCSequence:
前面也有提到過,Create()函式引數是由一系列動作及一個以NULL結尾的構成,呼叫形式一般為CCSequence::crate(ation1,ation2,…,NULL);
2、合成動作CCSpawn:
CCSpawn動作使被合成的動作同時進行,其呼叫方式與動作序列一致。
3、動作重複類CCRepeat、CCrepeatForever:
二者可以使動作重複進行,不同之處在於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有三個引數,第三個引數是資料物件。