1、動作基本概念
ccactiong是動作類的基類,動作作用於ccnode,因此,任何乙個動作都需要ccnode物件來執行。ccaction作為乙個基類,其實質是乙個介面(抽象類),由它派生的實現類才是實際使用的動作。ccaction的絕大多數實現類都派生自ccfinitetimeaction,這個類定義了在規定的時間內完成的動作。ccfinitetimeaction定義了reverse方法,通過這個方法可以獲得乙個與原來動作相反的動作,稱為你動作,如:隱藏乙個精靈後用逆動作再顯示出來。
2、瞬時動作
ccfinitetimeaction中動作持續時間為0的特例,下面介紹一些常用的瞬時動作:
(1)ccplace該動作用於將節點放置到某個指定位置,其作用與修改節點的position屬性相同。
(2)ccflipx和ccflipy:這兩個動作分別作用於將精靈沿x軸和y軸反向顯示,其作用與設定精靈的flipx和flipy屬性相同。
(3)ccshow和cchide:這兩個動作分別用於顯示和隱藏節點,其作用與設定節點的visible屬性一樣。
(4)cccallfunc:系列動作包括cccallfunc、cccallfuncn、cccallfun***、cccallfunco四個動作,用來在動作中進行方法的呼叫,只能呼叫某個類中的例項方法,而不能呼叫普通的c函式。
cccallfunc呼叫的方法不包含引數,cccallfuncn呼叫的方法包含乙個ccnode*型別的引數,表示執行動作的物件。cccallfun***呼叫方法包含兩個引數,不僅有乙個節點引數,還有乙個自定義引數(ccnode*與void*)。cccallfunco呼叫的方法則只包含乙個ccobject*型別的引數。
3、持續性動作:在持續的一段時間裡逐漸完成的動作。大多數持續性動作都會有乙個使用者控制動作執行時間的實型引數duration
每乙個持續性動作通常都存在兩個不同的變種動作,分別具有to和by字尾:字尾為to的動作描述了節點屬性值的絕對變化,如ccmoveto將物件移動到乙個特定的位置。字尾為by的動作則描述了屬性值相對變化,如ccmoveby將物件移動一段相對位移。動作劃分:(1)位置變化動作;(2)屬性變化動作;(3)視覺特效動作;(4)控制動作。
(1)位置變化動作:提供3種位置變化動作型別。
a、ccmoveto和ccmoveby:節點做直線運動,設定了動作時間和終點位置後,節點就會在規定的時間內,從當前位置直線移動到設定的終點位置。他們初始化方法分別為:
ccmoveto::create(cctime duration,ccpoint& pos);
ccmoveby::create(cctime duration,ccpoint& pos);
duration引數表示動作持續的時間,pos引數表示移動的終點或距離,對於ccmoveto,節點會被移動到pos相應的位置,對於ccmoveby,節點會相對之前的位置移動pos的距離。
b、ccjumpto和ccjumpby:節點以一定的軌跡跳到指定位置,他們初始化的方法如下:
ccjumpto::create(cctime duration,ccpoint& pos,float height,int jumps)//pos表示跳躍的終點或距離,height表示最大高度,jumps表示跳躍的次數。
ccjumpby::create(cctime duration,ccpoint& pos,float height,int jumps)
c、ccbezierto和ccbezierby:使節點曲線運動,運動的軌跡由貝塞爾曲線描述。
每一條貝塞爾曲線都包含乙個起點和乙個終點,在一條曲線中,起點和終點都各自包含乙個控制點,而控制點到端點的連線稱作控制線,控制線決定了從端點發出的曲線的形狀,包含角度和長度兩個引數,角度決定了它所控制的曲線的方向,即這段曲線在這控制點的切線方向,長度控制曲線的曲率,控制線越長,它所控制的曲線離控制線越近。使用時我們先要建立ccbezierconfig結構體,設定好終點endposition以及兩個控制點controlpoint_1和controlpoint_2,在把結構體傳入ccbezierto或ccbezierby的初始化方法中,如:ccbezierconfig bezier;bezier.controlpoint_1 = ccp(20,150);bezier.controlpoint_2 = ccp(200,30);bezier.endposition = ccp(160,30);ccfinitetimeaction *beizeraction = ccbezierto::create(actualduration/4,bezier);
(2)屬性動作變化:通過屬性值的逐漸變化實現動畫效果。如ccscaleto,它會在一段時間內不斷的改變遊戲元素的scale屬性。
a、ccscato與ccscaleby:產生縮放效果,使節點的縮放係數隨時間線性變化,其初始化方法為:
ccscaleto::create(cctime duration,float s);s為縮放係數的最終值或變化量
ccscaleby::create(cctime duration,float s);
b、ccrotateto與ccrotateby:產生旋轉效果,初始化方法如下:
ccrotateto::create(cctime duration,float fdeltaangle);//fdeltaangle的單位是角度,正方向為順時針方向。
ccrotateby::create(cctime duration,float fdeltaangle);
c、ccfadein與ccfadeout:產生淡入淡出效果
ccfadein::create(cctime duration);
ccfadeout::create(cctime duration);
d、ccfadeto:設定一段時間內透明度的變化效果。初始化方法為:
ccfadeto::create(cctime duration,glubyte opacity);//glubyte是8位無符號整數,因此,opacity取0-255中的任意整數,與透明度相關的動作只能應用在精靈上,且子節點不會受到父節點的影響。
f、cctinitto與cctinitby:設定色調製化,這個動作較為少用,初始化為:
cctinitto::create(cctime duration,glubyte r,glubyte g,glubyte b);
cctinitby::create(float duration,glshort deltared,glshort deltagreen,glshort deltablue);
(3)視覺特效動作:實現一些特殊的視覺效果。
a、ccblink:使目標節點閃爍,初始化為:ccblink::create(cctime duration,unsigned int ublicks);//ublicks:閃爍次數
(4)控制動作:對動作進行精細控制,包括:ccdelaytime(對動作延時一定的時間)、ccrepeat(把動作重複一定次數)、ccrepeatforever(動作不斷的重複下去)等。
Cocos2d x學習筆記1
1.建立新的cocos2d x 3.0 專案 在命令列中輸入 cocos new helloworld 專案名稱 p com.ss.pku 包名字 l cpp 專案型別 d d cocos workspace 專案存放路徑 2.資料夾分析 resource 資料夾 存放資源檔案 include和so...
Cocos2d x動作學習筆記
action類如其名,它可以改變node物件的屬性,action物件是隨著時間改變node的屬性。任何乙個以node為基類的物件都有可執行的動作物件。例如,你可以在乙個時間段內將sprite精靈從乙個位置移動到另乙個位置。每個動作都有by和to兩個狀態。為什麼呢?因為它們所執行的結果是不同的。by相...
cocos2d x 學習筆記 01
最近公司事情比較少就閒下來了,玩了一款叫地下城堡的文字單機遊戲覺得非常棒,還充了些錢,萌生了做遊戲的想法。好吧做遊戲的想法其實很早就有了,只是一直有各種事情耽擱下來了,今天開始學習cocos2d x。哦對了,我選擇了 cocos2d x 3.x遊戲開發之旅 這本書來入門。配置環境 mac os x ...