cocos2d 動作概念的整理

 原本計劃是把動作的概念理清,並分類介紹如何使用,但是網上看到幾篇寫得比較詳細,而且都有實例,在此就轉載一下,並表示一下感謝。

//////////////////這一段轉自Cocos2d-x官方中文文檔 v3.x////////////////////////////

動作類(Action)是所有動作的基類,它創建的一個對象代表一個動作。動作作用於Node,因此每個動作都需要由Node對象執行。動作類(Action)作爲基類,實際上是一個接口,動作類的大多數實現類都派生於有限時間動作類(FiniteTimeAction)。

在實際開發中我們通常用到兩類動作-即時動作和持續動作,它們均繼承於有限時間動作類。

即時動作

即時動作只能夠立刻完成的動作,這類動作是在下一幀立刻完成的動作,如設定位置、設定縮放等。把它們包裝成動作後,可以與其他動作類組合爲複雜動作。

下面介紹一些常用即時動作

Place

該動作用於將節點放置到某個指定位置,其作用與修改節點的position屬性相同。例如,將節點放到屏幕座標(10, 10)處的代碼如下:

<span class="pln" style="color: rgb(255, 255, 255);">    </span><span class="kwd" style="color: rgb(226, 137, 100);">auto</span><span class="pln" style="color: rgb(255, 255, 255);"> placeAction </span><span class="pun" style="color: rgb(255, 255, 255);">=</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="typ" style="color: rgb(137, 189, 255);">Place</span><span class="pun" style="color: rgb(255, 255, 255);">::</span><span class="pln" style="color: rgb(255, 255, 255);">create</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="typ" style="color: rgb(137, 189, 255);">Point</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="lit" style="color: rgb(51, 135, 204);">10</span><span class="pun" style="color: rgb(255, 255, 255);">,</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="lit" style="color: rgb(51, 135, 204);">10</span><span class="pun" style="color: rgb(255, 255, 255);">));</span>

FlipX和FlipY

這兩個動作分別用於將精力沿X軸和Y軸反向顯示,其作用與設置精靈的FlipX和FlipY屬性相同,將其包裝成動作是爲了便於與其他動作進行組合。

下面代碼將一個精靈移動到一端後反向顯示再進行移回原點的動作:

<span class="pln" style="color: rgb(255, 255, 255);">    </span><span class="kwd" style="color: rgb(226, 137, 100);">auto</span><span class="pln" style="color: rgb(255, 255, 255);"> flipxAction </span><span class="pun" style="color: rgb(255, 255, 255);">=</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="typ" style="color: rgb(137, 189, 255);">FlipX</span><span class="pun" style="color: rgb(255, 255, 255);">::</span><span class="pln" style="color: rgb(255, 255, 255);">create</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="kwd" style="color: rgb(226, 137, 100);">true</span><span class="pun" style="color: rgb(255, 255, 255);">);</span><span class="pln" style="color: rgb(255, 255, 255);">
    </span><span class="kwd" style="color: rgb(226, 137, 100);">auto</span><span class="pln" style="color: rgb(255, 255, 255);"> moveTo </span><span class="pun" style="color: rgb(255, 255, 255);">=</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="typ" style="color: rgb(137, 189, 255);">MoveTo</span><span class="pun" style="color: rgb(255, 255, 255);">::</span><span class="pln" style="color: rgb(255, 255, 255);">create</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="lit" style="color: rgb(51, 135, 204);">0.4f</span><span class="pun" style="color: rgb(255, 255, 255);">,</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="typ" style="color: rgb(137, 189, 255);">Point</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="lit" style="color: rgb(51, 135, 204);">0</span><span class="pun" style="color: rgb(255, 255, 255);">,</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="lit" style="color: rgb(51, 135, 204);">0</span><span class="pun" style="color: rgb(255, 255, 255);">));</span><span class="pln" style="color: rgb(255, 255, 255);">
    </span><span class="kwd" style="color: rgb(226, 137, 100);">auto</span><span class="pln" style="color: rgb(255, 255, 255);"> action </span><span class="pun" style="color: rgb(255, 255, 255);">=</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="typ" style="color: rgb(137, 189, 255);">Sequence</span><span class="pun" style="color: rgb(255, 255, 255);">::</span><span class="pln" style="color: rgb(255, 255, 255);">create</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="pln" style="color: rgb(255, 255, 255);">moveTo</span><span class="pun" style="color: rgb(255, 255, 255);">,</span><span class="pln" style="color: rgb(255, 255, 255);"> flipxAction</span><span class="pun" style="color: rgb(255, 255, 255);">,</span><span class="pln" style="color: rgb(255, 255, 255);"> moveTo</span><span class="pun" style="color: rgb(255, 255, 255);">-></span><span class="pln" style="color: rgb(255, 255, 255);">reverse</span><span class="pun" style="color: rgb(255, 255, 255);">(),</span><span class="pln" style="color: rgb(255, 255, 255);"> NULL</span><span class="pun" style="color: rgb(255, 255, 255);">);</span>

其中Sequence是動作序列,後面將詳細介紹,reverse的作用是獲得原動作的逆動作。

Show和Hide

這兩個動作分別用於顯示和隱藏節點,其作用與設置節點的visible屬性作用一樣。例如,爲了使精靈完成移動後隱藏起來,可以用如下代碼:

<span class="pln" style="color: rgb(255, 255, 255);">    </span><span class="kwd" style="color: rgb(226, 137, 100);">auto</span><span class="pln" style="color: rgb(255, 255, 255);"> hideAction </span><span class="pun" style="color: rgb(255, 255, 255);">=</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="typ" style="color: rgb(137, 189, 255);">Hide</span><span class="pun" style="color: rgb(255, 255, 255);">::</span><span class="pln" style="color: rgb(255, 255, 255);">create</span><span class="pun" style="color: rgb(255, 255, 255);">();</span><span class="pln" style="color: rgb(255, 255, 255);">
    </span><span class="kwd" style="color: rgb(226, 137, 100);">auto</span><span class="pln" style="color: rgb(255, 255, 255);"> moveTo </span><span class="pun" style="color: rgb(255, 255, 255);">=</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="typ" style="color: rgb(137, 189, 255);">MoveTo</span><span class="pun" style="color: rgb(255, 255, 255);">::</span><span class="pln" style="color: rgb(255, 255, 255);">create</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="lit" style="color: rgb(51, 135, 204);">0.4f</span><span class="pun" style="color: rgb(255, 255, 255);">,</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="typ" style="color: rgb(137, 189, 255);">Point</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="lit" style="color: rgb(51, 135, 204);">0</span><span class="pun" style="color: rgb(255, 255, 255);">,</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="lit" style="color: rgb(51, 135, 204);">0</span><span class="pun" style="color: rgb(255, 255, 255);">));</span><span class="pln" style="color: rgb(255, 255, 255);">
    </span><span class="kwd" style="color: rgb(226, 137, 100);">auto</span><span class="pln" style="color: rgb(255, 255, 255);"> action </span><span class="pun" style="color: rgb(255, 255, 255);">=</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="typ" style="color: rgb(137, 189, 255);">Sequence</span><span class="pun" style="color: rgb(255, 255, 255);">::</span><span class="pln" style="color: rgb(255, 255, 255);">create</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="pln" style="color: rgb(255, 255, 255);">moveTo</span><span class="pun" style="color: rgb(255, 255, 255);">,</span><span class="pln" style="color: rgb(255, 255, 255);"> hideAction</span><span class="pun" style="color: rgb(255, 255, 255);">,</span><span class="pln" style="color: rgb(255, 255, 255);"> NULL</span><span class="pun" style="color: rgb(255, 255, 255);">);</span>

CallFunc

CallFunc系列動作包括CallFunc、CallFuncN兩個動作,用來在動作中進行方法調用。在遊戲中爲了節約內存資源,我們可以在動作完成後調用相應函數清理內存,如下代碼:

<span class="pln" style="color: rgb(255, 255, 255);">    </span><span class="kwd" style="color: rgb(226, 137, 100);">auto</span><span class="pln" style="color: rgb(255, 255, 255);"> actionMoveDone </span><span class="pun" style="color: rgb(255, 255, 255);">=</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="typ" style="color: rgb(137, 189, 255);">CallFuncN</span><span class="pun" style="color: rgb(255, 255, 255);">::</span><span class="pln" style="color: rgb(255, 255, 255);">create</span><span class="pun" style="color: rgb(255, 255, 255);">([&](</span><span class="typ" style="color: rgb(137, 189, 255);">Ref</span><span class="pun" style="color: rgb(255, 255, 255);">*</span><span class="pln" style="color: rgb(255, 255, 255);"> sender</span><span class="pun" style="color: rgb(255, 255, 255);">){</span><span class="pln" style="color: rgb(255, 255, 255);">
        log</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="str" style="color: rgb(101, 176, 66);">"Clear memory"</span><span class="pun" style="color: rgb(255, 255, 255);">);</span><span class="pln" style="color: rgb(255, 255, 255);">
    </span><span class="pun" style="color: rgb(255, 255, 255);">});</span><span class="pln" style="color: rgb(255, 255, 255);">
    </span><span class="kwd" style="color: rgb(226, 137, 100);">auto</span><span class="pln" style="color: rgb(255, 255, 255);"> moveTo </span><span class="pun" style="color: rgb(255, 255, 255);">=</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="typ" style="color: rgb(137, 189, 255);">MoveTo</span><span class="pun" style="color: rgb(255, 255, 255);">::</span><span class="pln" style="color: rgb(255, 255, 255);">create</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="lit" style="color: rgb(51, 135, 204);">0.4f</span><span class="pun" style="color: rgb(255, 255, 255);">,</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="typ" style="color: rgb(137, 189, 255);">Point</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="lit" style="color: rgb(51, 135, 204);">0</span><span class="pun" style="color: rgb(255, 255, 255);">,</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="lit" style="color: rgb(51, 135, 204);">0</span><span class="pun" style="color: rgb(255, 255, 255);">));</span><span class="pln" style="color: rgb(255, 255, 255);">
    </span><span class="kwd" style="color: rgb(226, 137, 100);">auto</span><span class="pln" style="color: rgb(255, 255, 255);"> action </span><span class="pun" style="color: rgb(255, 255, 255);">=</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="typ" style="color: rgb(137, 189, 255);">Sequence</span><span class="pun" style="color: rgb(255, 255, 255);">::</span><span class="pln" style="color: rgb(255, 255, 255);">create</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="pln" style="color: rgb(255, 255, 255);">moveTo</span><span class="pun" style="color: rgb(255, 255, 255);">,</span><span class="pln" style="color: rgb(255, 255, 255);"> actionMoveDone</span><span class="pun" style="color: rgb(255, 255, 255);">,</span><span class="pln" style="color: rgb(255, 255, 255);"> NULL</span><span class="pun" style="color: rgb(255, 255, 255);">);</span>

持續動作

屬性變化動作

屬性變化動作通過屬性值的逐漸變化來實現動畫效果。需要注意的是XXTo和XXBy的區別在於XXTo是表示最終值,而XXBy則表示向量-改變值。

MoveTo和MoveBy

用於使節點做直線運動,設置了動作時間和終點位置,在規定時間內會移動到終點,它們的初始化方法如下:

<span class="pln" style="color: rgb(255, 255, 255);">    </span><span class="typ" style="color: rgb(137, 189, 255);">MoveTo</span><span class="pun" style="color: rgb(255, 255, 255);">::</span><span class="pln" style="color: rgb(255, 255, 255);">create</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="kwd" style="color: rgb(226, 137, 100);">float</span><span class="pln" style="color: rgb(255, 255, 255);"> duration</span><span class="pun" style="color: rgb(255, 255, 255);">,</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="kwd" style="color: rgb(226, 137, 100);">const</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="typ" style="color: rgb(137, 189, 255);">Point</span><span class="pun" style="color: rgb(255, 255, 255);">&</span><span class="pln" style="color: rgb(255, 255, 255);"> position</span><span class="pun" style="color: rgb(255, 255, 255);">);</span><span class="pln" style="color: rgb(255, 255, 255);">
    </span><span class="typ" style="color: rgb(137, 189, 255);">MoveBy</span><span class="pun" style="color: rgb(255, 255, 255);">::</span><span class="pln" style="color: rgb(255, 255, 255);">create</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="kwd" style="color: rgb(226, 137, 100);">float</span><span class="pln" style="color: rgb(255, 255, 255);"> duration</span><span class="pun" style="color: rgb(255, 255, 255);">,</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="kwd" style="color: rgb(226, 137, 100);">const</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="typ" style="color: rgb(137, 189, 255);">Point</span><span class="pun" style="color: rgb(255, 255, 255);">&</span><span class="pln" style="color: rgb(255, 255, 255);"> position</span><span class="pun" style="color: rgb(255, 255, 255);">);</span>

MoveTo的position值表示最後位置,而MoveBy的position則表示移動的位置。

JumpTo和JumpBy

使節點以一定的軌跡跳躍到指定位置,它們的初始化方法如下:

<span class="pln" style="color: rgb(255, 255, 255);">    </span><span class="typ" style="color: rgb(137, 189, 255);">JumpTo</span><span class="pun" style="color: rgb(255, 255, 255);">::</span><span class="pln" style="color: rgb(255, 255, 255);">create</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="kwd" style="color: rgb(226, 137, 100);">float</span><span class="pln" style="color: rgb(255, 255, 255);"> duration</span><span class="pun" style="color: rgb(255, 255, 255);">,</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="kwd" style="color: rgb(226, 137, 100);">const</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="typ" style="color: rgb(137, 189, 255);">Point</span><span class="pun" style="color: rgb(255, 255, 255);">&</span><span class="pln" style="color: rgb(255, 255, 255);"> position</span><span class="pun" style="color: rgb(255, 255, 255);">,</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="kwd" style="color: rgb(226, 137, 100);">float</span><span class="pln" style="color: rgb(255, 255, 255);"> height</span><span class="pun" style="color: rgb(255, 255, 255);">,</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="kwd" style="color: rgb(226, 137, 100);">int</span><span class="pln" style="color: rgb(255, 255, 255);"> jumps</span><span class="pun" style="color: rgb(255, 255, 255);">);</span><span class="pln" style="color: rgb(255, 255, 255);">
    </span><span class="typ" style="color: rgb(137, 189, 255);">JumpBy</span><span class="pun" style="color: rgb(255, 255, 255);">::</span><span class="pln" style="color: rgb(255, 255, 255);">create</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="kwd" style="color: rgb(226, 137, 100);">float</span><span class="pln" style="color: rgb(255, 255, 255);"> duration</span><span class="pun" style="color: rgb(255, 255, 255);">,</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="kwd" style="color: rgb(226, 137, 100);">const</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="typ" style="color: rgb(137, 189, 255);">Point</span><span class="pun" style="color: rgb(255, 255, 255);">&</span><span class="pln" style="color: rgb(255, 255, 255);"> position</span><span class="pun" style="color: rgb(255, 255, 255);">,</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="kwd" style="color: rgb(226, 137, 100);">float</span><span class="pln" style="color: rgb(255, 255, 255);"> height</span><span class="pun" style="color: rgb(255, 255, 255);">,</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="kwd" style="color: rgb(226, 137, 100);">int</span><span class="pln" style="color: rgb(255, 255, 255);"> jumps</span><span class="pun" style="color: rgb(255, 255, 255);">);</span>

BezierTo和BezierBy

使節點進行曲線運動,運動的軌跡由貝塞爾曲線描述。

每條貝塞爾曲線都包含一個起點和一個終點。在一條曲線中,起點和終點各自包含一個控制點,而控制點到端點的連線稱作控制線。控制點決定了曲線的形狀,包含角度和長度兩個參數。如下圖:

bezier

使用時,我們要先創建ccBezierConfig結構體,設置好終點endPosition以及兩個兩個控制點controlPoint_1和controlPoint_2後,再把結構體傳入BezierTo或BezierBy的初始化方法中:

<span class="pln" style="color: rgb(255, 255, 255);">    ccBezierConfig bezier</span><span class="pun" style="color: rgb(255, 255, 255);">;</span><span class="pln" style="color: rgb(255, 255, 255);">
    bezier</span><span class="pun" style="color: rgb(255, 255, 255);">.</span><span class="pln" style="color: rgb(255, 255, 255);">controlPoint_1 </span><span class="pun" style="color: rgb(255, 255, 255);">=</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="typ" style="color: rgb(137, 189, 255);">Point</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="lit" style="color: rgb(51, 135, 204);">0</span><span class="pun" style="color: rgb(255, 255, 255);">,</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="lit" style="color: rgb(51, 135, 204);">0</span><span class="pun" style="color: rgb(255, 255, 255);">);</span><span class="pln" style="color: rgb(255, 255, 255);">
    bezier</span><span class="pun" style="color: rgb(255, 255, 255);">.</span><span class="pln" style="color: rgb(255, 255, 255);">controlPoint_2 </span><span class="pun" style="color: rgb(255, 255, 255);">=</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="typ" style="color: rgb(137, 189, 255);">Point</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="lit" style="color: rgb(51, 135, 204);">100</span><span class="pun" style="color: rgb(255, 255, 255);">,</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="lit" style="color: rgb(51, 135, 204);">100</span><span class="pun" style="color: rgb(255, 255, 255);">);</span><span class="pln" style="color: rgb(255, 255, 255);">
    bezier</span><span class="pun" style="color: rgb(255, 255, 255);">.</span><span class="pln" style="color: rgb(255, 255, 255);">endPosition </span><span class="pun" style="color: rgb(255, 255, 255);">=</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="typ" style="color: rgb(137, 189, 255);">Point</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="lit" style="color: rgb(51, 135, 204);">50</span><span class="pun" style="color: rgb(255, 255, 255);">,</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="lit" style="color: rgb(51, 135, 204);">100</span><span class="pun" style="color: rgb(255, 255, 255);">);</span><span class="pln" style="color: rgb(255, 255, 255);">
    </span><span class="kwd" style="color: rgb(226, 137, 100);">auto</span><span class="pln" style="color: rgb(255, 255, 255);"> bezierAction </span><span class="pun" style="color: rgb(255, 255, 255);">=</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="typ" style="color: rgb(137, 189, 255);">BezierTo</span><span class="pun" style="color: rgb(255, 255, 255);">::</span><span class="pln" style="color: rgb(255, 255, 255);">create</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="lit" style="color: rgb(51, 135, 204);">0.5f</span><span class="pun" style="color: rgb(255, 255, 255);">,</span><span class="pln" style="color: rgb(255, 255, 255);"> bezier</span><span class="pun" style="color: rgb(255, 255, 255);">);</span>

ScaleTo和ScaleBy

產生縮放效果,使節點的縮放係數隨時間線性變化,對應初始化方法爲:

<span class="pln" style="color: rgb(255, 255, 255);">    </span><span class="typ" style="color: rgb(137, 189, 255);">ScaleTo</span><span class="pun" style="color: rgb(255, 255, 255);">::</span><span class="pln" style="color: rgb(255, 255, 255);">create</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="kwd" style="color: rgb(226, 137, 100);">float</span><span class="pln" style="color: rgb(255, 255, 255);"> duration</span><span class="pun" style="color: rgb(255, 255, 255);">,</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="kwd" style="color: rgb(226, 137, 100);">float</span><span class="pln" style="color: rgb(255, 255, 255);"> s</span><span class="pun" style="color: rgb(255, 255, 255);">);</span><span class="pln" style="color: rgb(255, 255, 255);">
    </span><span class="typ" style="color: rgb(137, 189, 255);">ScaleBy</span><span class="pun" style="color: rgb(255, 255, 255);">::</span><span class="pln" style="color: rgb(255, 255, 255);">create</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="kwd" style="color: rgb(226, 137, 100);">float</span><span class="pln" style="color: rgb(255, 255, 255);"> duration</span><span class="pun" style="color: rgb(255, 255, 255);">,</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="kwd" style="color: rgb(226, 137, 100);">float</span><span class="pln" style="color: rgb(255, 255, 255);"> s</span><span class="pun" style="color: rgb(255, 255, 255);">);</span>

RotateTo和RotateBy

產生旋轉效果,對應初始化方法爲:

<span class="pln" style="color: rgb(255, 255, 255);">    </span><span class="typ" style="color: rgb(137, 189, 255);">RotateTo</span><span class="pun" style="color: rgb(255, 255, 255);">::</span><span class="pln" style="color: rgb(255, 255, 255);">create</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="kwd" style="color: rgb(226, 137, 100);">float</span><span class="pln" style="color: rgb(255, 255, 255);"> duration</span><span class="pun" style="color: rgb(255, 255, 255);">,</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="kwd" style="color: rgb(226, 137, 100);">float</span><span class="pln" style="color: rgb(255, 255, 255);"> deltaAngle</span><span class="pun" style="color: rgb(255, 255, 255);">);</span><span class="pln" style="color: rgb(255, 255, 255);">
    </span><span class="typ" style="color: rgb(137, 189, 255);">RotateBy</span><span class="pun" style="color: rgb(255, 255, 255);">::</span><span class="pln" style="color: rgb(255, 255, 255);">create</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="kwd" style="color: rgb(226, 137, 100);">float</span><span class="pln" style="color: rgb(255, 255, 255);"> duration</span><span class="pun" style="color: rgb(255, 255, 255);">,</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="kwd" style="color: rgb(226, 137, 100);">float</span><span class="pln" style="color: rgb(255, 255, 255);"> deltaAngle</span><span class="pun" style="color: rgb(255, 255, 255);">);</span>

視覺特效動作

該類用來實現特殊視覺效果

FadeIn, FadeOut和FateTo

產生淡入淡出效果,和透明變化效果,對應的初始化方法爲:

<span class="pln" style="color: rgb(255, 255, 255);">    </span><span class="typ" style="color: rgb(137, 189, 255);">FadeIn</span><span class="pun" style="color: rgb(255, 255, 255);">::</span><span class="pln" style="color: rgb(255, 255, 255);">create</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="kwd" style="color: rgb(226, 137, 100);">float</span><span class="pln" style="color: rgb(255, 255, 255);"> d</span><span class="pun" style="color: rgb(255, 255, 255);">);</span><span class="pln" style="color: rgb(255, 255, 255);">    </span><span class="pun" style="color: rgb(255, 255, 255);">淡入</span><span class="pln" style="color: rgb(255, 255, 255);">
    </span><span class="typ" style="color: rgb(137, 189, 255);">FadeOut</span><span class="pun" style="color: rgb(255, 255, 255);">::</span><span class="pln" style="color: rgb(255, 255, 255);">create</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="kwd" style="color: rgb(226, 137, 100);">float</span><span class="pln" style="color: rgb(255, 255, 255);"> d</span><span class="pun" style="color: rgb(255, 255, 255);">);</span><span class="pln" style="color: rgb(255, 255, 255);">   </span><span class="pun" style="color: rgb(255, 255, 255);">淡出</span><span class="pln" style="color: rgb(255, 255, 255);"> 
    </span><span class="typ" style="color: rgb(137, 189, 255);">FadeTo</span><span class="pun" style="color: rgb(255, 255, 255);">::</span><span class="pln" style="color: rgb(255, 255, 255);">create</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="kwd" style="color: rgb(226, 137, 100);">float</span><span class="pln" style="color: rgb(255, 255, 255);"> duration</span><span class="pun" style="color: rgb(255, 255, 255);">,</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="typ" style="color: rgb(137, 189, 255);">GLubyte</span><span class="pln" style="color: rgb(255, 255, 255);"> opacity</span><span class="pun" style="color: rgb(255, 255, 255);">);</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="pun" style="color: rgb(255, 255, 255);">一定時間內透明度變化</span>

TintTo和TintBy

設置色調變化,這個動作較少使用,初始化方法爲:

<span class="pln" style="color: rgb(255, 255, 255);">    </span><span class="typ" style="color: rgb(137, 189, 255);">TintTo</span><span class="pun" style="color: rgb(255, 255, 255);">::</span><span class="pln" style="color: rgb(255, 255, 255);">create</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="kwd" style="color: rgb(226, 137, 100);">float</span><span class="pln" style="color: rgb(255, 255, 255);"> duration</span><span class="pun" style="color: rgb(255, 255, 255);">,</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="typ" style="color: rgb(137, 189, 255);">GLubyte</span><span class="pln" style="color: rgb(255, 255, 255);"> red</span><span class="pun" style="color: rgb(255, 255, 255);">,</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="typ" style="color: rgb(137, 189, 255);">GLubyte</span><span class="pln" style="color: rgb(255, 255, 255);"> green</span><span class="pun" style="color: rgb(255, 255, 255);">,</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="typ" style="color: rgb(137, 189, 255);">GLubyte</span><span class="pln" style="color: rgb(255, 255, 255);"> blue</span><span class="pun" style="color: rgb(255, 255, 255);">);</span><span class="pln" style="color: rgb(255, 255, 255);">
    </span><span class="typ" style="color: rgb(137, 189, 255);">TintBy</span><span class="pun" style="color: rgb(255, 255, 255);">::</span><span class="pln" style="color: rgb(255, 255, 255);">create</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="kwd" style="color: rgb(226, 137, 100);">float</span><span class="pln" style="color: rgb(255, 255, 255);"> duration</span><span class="pun" style="color: rgb(255, 255, 255);">,</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="typ" style="color: rgb(137, 189, 255);">GLubyte</span><span class="pln" style="color: rgb(255, 255, 255);"> red</span><span class="pun" style="color: rgb(255, 255, 255);">,</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="typ" style="color: rgb(137, 189, 255);">GLubyte</span><span class="pln" style="color: rgb(255, 255, 255);"> green</span><span class="pun" style="color: rgb(255, 255, 255);">,</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="typ" style="color: rgb(137, 189, 255);">GLubyte</span><span class="pln" style="color: rgb(255, 255, 255);"> blue</span><span class="pun" style="color: rgb(255, 255, 255);">);</span>

red, green, blue的取值範圍爲0~255

Blink

使節點閃爍,其初始化方法爲:

<span class="pln" style="color: rgb(255, 255, 255);">    </span><span class="typ" style="color: rgb(137, 189, 255);">Blink</span><span class="pun" style="color: rgb(255, 255, 255);">::</span><span class="pln" style="color: rgb(255, 255, 255);">create</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="kwd" style="color: rgb(226, 137, 100);">float</span><span class="pln" style="color: rgb(255, 255, 255);"> duration</span><span class="pun" style="color: rgb(255, 255, 255);">,</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="kwd" style="color: rgb(226, 137, 100);">int</span><span class="pln" style="color: rgb(255, 255, 255);"> blinks</span><span class="pun" style="color: rgb(255, 255, 255);">);</span>

其中blinks爲閃爍次數

Animation

以幀動畫形式實現動畫效果,以下代碼用兩種方法實現精靈幀動畫效果:

<span class="pln" style="color: rgb(255, 255, 255);">    </span><span class="com" style="color: rgb(174, 174, 174); font-style: italic;">//手動創建動畫</span><span class="pln" style="color: rgb(255, 255, 255);">
    </span><span class="kwd" style="color: rgb(226, 137, 100);">auto</span><span class="pln" style="color: rgb(255, 255, 255);"> animation </span><span class="pun" style="color: rgb(255, 255, 255);">=</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="typ" style="color: rgb(137, 189, 255);">Animation</span><span class="pun" style="color: rgb(255, 255, 255);">::</span><span class="pln" style="color: rgb(255, 255, 255);">create</span><span class="pun" style="color: rgb(255, 255, 255);">();</span><span class="pln" style="color: rgb(255, 255, 255);">
    </span><span class="kwd" style="color: rgb(226, 137, 100);">for</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="kwd" style="color: rgb(226, 137, 100);">int</span><span class="pln" style="color: rgb(255, 255, 255);"> i</span><span class="pun" style="color: rgb(255, 255, 255);">=</span><span class="lit" style="color: rgb(51, 135, 204);">1</span><span class="pun" style="color: rgb(255, 255, 255);">;</span><span class="pln" style="color: rgb(255, 255, 255);">i</span><span class="pun" style="color: rgb(255, 255, 255);"><</span><span class="lit" style="color: rgb(51, 135, 204);">15</span><span class="pun" style="color: rgb(255, 255, 255);">;</span><span class="pln" style="color: rgb(255, 255, 255);">i</span><span class="pun" style="color: rgb(255, 255, 255);">++)</span><span class="pln" style="color: rgb(255, 255, 255);">
    </span><span class="pun" style="color: rgb(255, 255, 255);">{</span><span class="pln" style="color: rgb(255, 255, 255);">
        </span><span class="kwd" style="color: rgb(226, 137, 100);">char</span><span class="pln" style="color: rgb(255, 255, 255);"> szName</span><span class="pun" style="color: rgb(255, 255, 255);">[</span><span class="lit" style="color: rgb(51, 135, 204);">100</span><span class="pun" style="color: rgb(255, 255, 255);">]</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="pun" style="color: rgb(255, 255, 255);">=</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="pun" style="color: rgb(255, 255, 255);">{</span><span class="lit" style="color: rgb(51, 135, 204);">0</span><span class="pun" style="color: rgb(255, 255, 255);">};</span><span class="pln" style="color: rgb(255, 255, 255);">
        sprintf</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="pln" style="color: rgb(255, 255, 255);">szName</span><span class="pun" style="color: rgb(255, 255, 255);">,</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="str" style="color: rgb(101, 176, 66);">"sprite_%02d.png"</span><span class="pun" style="color: rgb(255, 255, 255);">,</span><span class="pln" style="color: rgb(255, 255, 255);"> i</span><span class="pun" style="color: rgb(255, 255, 255);">);</span><span class="pln" style="color: rgb(255, 255, 255);">
        animation</span><span class="pun" style="color: rgb(255, 255, 255);">-></span><span class="pln" style="color: rgb(255, 255, 255);">addSpriteFrameWithFile</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="pln" style="color: rgb(255, 255, 255);">szName</span><span class="pun" style="color: rgb(255, 255, 255);">);</span><span class="pln" style="color: rgb(255, 255, 255);">
    </span><span class="pun" style="color: rgb(255, 255, 255);">}</span><span class="pln" style="color: rgb(255, 255, 255);">

    animation</span><span class="pun" style="color: rgb(255, 255, 255);">-></span><span class="pln" style="color: rgb(255, 255, 255);">setDelayPerUnit</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="lit" style="color: rgb(51, 135, 204);">2.8f</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="pun" style="color: rgb(255, 255, 255);">/</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="lit" style="color: rgb(51, 135, 204);">14.0f</span><span class="pun" style="color: rgb(255, 255, 255);">);</span><span class="pln" style="color: rgb(255, 255, 255);">
    animation</span><span class="pun" style="color: rgb(255, 255, 255);">-></span><span class="pln" style="color: rgb(255, 255, 255);">setRestoreOriginalFrame</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="kwd" style="color: rgb(226, 137, 100);">true</span><span class="pun" style="color: rgb(255, 255, 255);">);</span><span class="pln" style="color: rgb(255, 255, 255);">

    </span><span class="kwd" style="color: rgb(226, 137, 100);">auto</span><span class="pln" style="color: rgb(255, 255, 255);"> action </span><span class="pun" style="color: rgb(255, 255, 255);">=</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="typ" style="color: rgb(137, 189, 255);">Animate</span><span class="pun" style="color: rgb(255, 255, 255);">::</span><span class="pln" style="color: rgb(255, 255, 255);">create</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="pln" style="color: rgb(255, 255, 255);">animation</span><span class="pun" style="color: rgb(255, 255, 255);">);</span><span class="pln" style="color: rgb(255, 255, 255);">
    sprite</span><span class="pun" style="color: rgb(255, 255, 255);">-></span><span class="pln" style="color: rgb(255, 255, 255);">runAction</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="typ" style="color: rgb(137, 189, 255);">Sequence</span><span class="pun" style="color: rgb(255, 255, 255);">::</span><span class="pln" style="color: rgb(255, 255, 255);">create</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="pln" style="color: rgb(255, 255, 255);">action</span><span class="pun" style="color: rgb(255, 255, 255);">,</span><span class="pln" style="color: rgb(255, 255, 255);"> action</span><span class="pun" style="color: rgb(255, 255, 255);">-></span><span class="pln" style="color: rgb(255, 255, 255);">reverse</span><span class="pun" style="color: rgb(255, 255, 255);">(),</span><span class="pln" style="color: rgb(255, 255, 255);"> NULL</span><span class="pun" style="color: rgb(255, 255, 255);">));</span><span class="pln" style="color: rgb(255, 255, 255);">


    </span><span class="com" style="color: rgb(174, 174, 174); font-style: italic;">//文件創建動畫</span><span class="pln" style="color: rgb(255, 255, 255);">
    </span><span class="kwd" style="color: rgb(226, 137, 100);">auto</span><span class="pln" style="color: rgb(255, 255, 255);"> cache </span><span class="pun" style="color: rgb(255, 255, 255);">=</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="typ" style="color: rgb(137, 189, 255);">AnimationCache</span><span class="pun" style="color: rgb(255, 255, 255);">::</span><span class="pln" style="color: rgb(255, 255, 255);">getInstance</span><span class="pun" style="color: rgb(255, 255, 255);">();</span><span class="pln" style="color: rgb(255, 255, 255);">
    cache</span><span class="pun" style="color: rgb(255, 255, 255);">-></span><span class="pln" style="color: rgb(255, 255, 255);">addAnimationsWithFile</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="str" style="color: rgb(101, 176, 66);">"animation.plist"</span><span class="pun" style="color: rgb(255, 255, 255);">);</span><span class="pln" style="color: rgb(255, 255, 255);">
    </span><span class="kwd" style="color: rgb(226, 137, 100);">auto</span><span class="pln" style="color: rgb(255, 255, 255);"> animation2 </span><span class="pun" style="color: rgb(255, 255, 255);">=</span><span class="pln" style="color: rgb(255, 255, 255);"> cache</span><span class="pun" style="color: rgb(255, 255, 255);">-></span><span class="pln" style="color: rgb(255, 255, 255);">getAnimation</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="str" style="color: rgb(101, 176, 66);">"dance_1"</span><span class="pun" style="color: rgb(255, 255, 255);">);</span><span class="pln" style="color: rgb(255, 255, 255);">

    </span><span class="kwd" style="color: rgb(226, 137, 100);">auto</span><span class="pln" style="color: rgb(255, 255, 255);"> action2 </span><span class="pun" style="color: rgb(255, 255, 255);">=</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="typ" style="color: rgb(137, 189, 255);">Animate</span><span class="pun" style="color: rgb(255, 255, 255);">::</span><span class="pln" style="color: rgb(255, 255, 255);">create</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="pln" style="color: rgb(255, 255, 255);">animation2</span><span class="pun" style="color: rgb(255, 255, 255);">);</span><span class="pln" style="color: rgb(255, 255, 255);">
    sprite</span><span class="pun" style="color: rgb(255, 255, 255);">-></span><span class="pln" style="color: rgb(255, 255, 255);">runAction</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="typ" style="color: rgb(137, 189, 255);">Sequence</span><span class="pun" style="color: rgb(255, 255, 255);">::</span><span class="pln" style="color: rgb(255, 255, 255);">create</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="pln" style="color: rgb(255, 255, 255);">action2</span><span class="pun" style="color: rgb(255, 255, 255);">,</span><span class="pln" style="color: rgb(255, 255, 255);"> action2</span><span class="pun" style="color: rgb(255, 255, 255);">-></span><span class="pln" style="color: rgb(255, 255, 255);">reverse</span><span class="pun" style="color: rgb(255, 255, 255);">(),</span><span class="pln" style="color: rgb(255, 255, 255);"> NULL</span><span class="pun" style="color: rgb(255, 255, 255);">));</span>

動畫創建後需要一個動畫播放器來播放這些動畫,這個播放器就是Animate。

複合動作

通常在開發中我們需要將各種動作組合起來再讓節點執行,複合動作的作用就是將各種動作組合在一起。而且,複合動作本身也是動作。因此可以作爲一個普通動作嵌入到其他動作中。

注意:Sequence動作不能嵌入其他複合動作內使用,DelayTime不屬於複合動作,但是只能在複合動作內使用。

DelayTime

延時動作其實什麼都不做,提供一段空白期,它只有一個初始化方法:

<span class="pln" style="color: rgb(255, 255, 255);">    </span><span class="typ" style="color: rgb(137, 189, 255);">DelayTime</span><span class="pun" style="color: rgb(255, 255, 255);">::</span><span class="pln" style="color: rgb(255, 255, 255);">create</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="kwd" style="color: rgb(226, 137, 100);">float</span><span class="pln" style="color: rgb(255, 255, 255);"> d</span><span class="pun" style="color: rgb(255, 255, 255);">);</span>

d表示需要延時的時間。

Repeat/RepeatForever

反覆執行某個動作,通常我們用Repeat和RepeatForever這兩個方法執行:

<span class="pln" style="color: rgb(255, 255, 255);">    </span><span class="typ" style="color: rgb(137, 189, 255);">Repeat</span><span class="pun" style="color: rgb(255, 255, 255);">::</span><span class="pln" style="color: rgb(255, 255, 255);">create</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="typ" style="color: rgb(137, 189, 255);">FiniteTimeAction</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="pun" style="color: rgb(255, 255, 255);">*</span><span class="pln" style="color: rgb(255, 255, 255);">action</span><span class="pun" style="color: rgb(255, 255, 255);">,</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="kwd" style="color: rgb(226, 137, 100);">unsigned</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="kwd" style="color: rgb(226, 137, 100);">int</span><span class="pln" style="color: rgb(255, 255, 255);"> times</span><span class="pun" style="color: rgb(255, 255, 255);">);</span><span class="pln" style="color: rgb(255, 255, 255);">
    </span><span class="typ" style="color: rgb(137, 189, 255);">RepeatForever</span><span class="pun" style="color: rgb(255, 255, 255);">::</span><span class="pln" style="color: rgb(255, 255, 255);">create</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="typ" style="color: rgb(137, 189, 255);">ActionInterval</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="pun" style="color: rgb(255, 255, 255);">*</span><span class="pln" style="color: rgb(255, 255, 255);">action</span><span class="pun" style="color: rgb(255, 255, 255);">);</span>

Spawn

使一批動作同時執行,他的兩個初始化方法:

<span class="pln" style="color: rgb(255, 255, 255);">    </span><span class="typ" style="color: rgb(137, 189, 255);">Spawn</span><span class="pun" style="color: rgb(255, 255, 255);">::</span><span class="pln" style="color: rgb(255, 255, 255);">create</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="typ" style="color: rgb(137, 189, 255);">FiniteTimeAction</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="pun" style="color: rgb(255, 255, 255);">*</span><span class="pln" style="color: rgb(255, 255, 255);">action1</span><span class="pun" style="color: rgb(255, 255, 255);">,</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="pun" style="color: rgb(255, 255, 255);">...);</span><span class="pln" style="color: rgb(255, 255, 255);">
    </span><span class="typ" style="color: rgb(137, 189, 255);">Spawn</span><span class="pun" style="color: rgb(255, 255, 255);">::</span><span class="pln" style="color: rgb(255, 255, 255);">create</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="kwd" style="color: rgb(226, 137, 100);">const</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="typ" style="color: rgb(137, 189, 255);">Vector</span><span class="pun" style="color: rgb(255, 255, 255);"><</span><span class="typ" style="color: rgb(137, 189, 255);">FiniteTimeAction</span><span class="pun" style="color: rgb(255, 255, 255);">*>&</span><span class="pln" style="color: rgb(255, 255, 255);"> arrayOfActions</span><span class="pun" style="color: rgb(255, 255, 255);">);</span>

Sequence

讓各種動作有序執行,以下爲它的兩個初始化方法:

<span class="pln" style="color: rgb(255, 255, 255);">    </span><span class="typ" style="color: rgb(137, 189, 255);">Sequence</span><span class="pun" style="color: rgb(255, 255, 255);">::</span><span class="pln" style="color: rgb(255, 255, 255);">create</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="typ" style="color: rgb(137, 189, 255);">FiniteTimeAction</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="pun" style="color: rgb(255, 255, 255);">*</span><span class="pln" style="color: rgb(255, 255, 255);">action1</span><span class="pun" style="color: rgb(255, 255, 255);">,</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="pun" style="color: rgb(255, 255, 255);">...);</span><span class="pln" style="color: rgb(255, 255, 255);">
    </span><span class="typ" style="color: rgb(137, 189, 255);">Sequence</span><span class="pun" style="color: rgb(255, 255, 255);">::</span><span class="pln" style="color: rgb(255, 255, 255);">create</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="kwd" style="color: rgb(226, 137, 100);">const</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="typ" style="color: rgb(137, 189, 255);">Vector</span><span class="pun" style="color: rgb(255, 255, 255);"><</span><span class="typ" style="color: rgb(137, 189, 255);">FiniteTimeAction</span><span class="pun" style="color: rgb(255, 255, 255);">*>&</span><span class="pln" style="color: rgb(255, 255, 255);"> arrayOfActions</span><span class="pun" style="color: rgb(255, 255, 255);">);</span>

變速動作

變速動作和符合動作類似,也是一種特殊的動作,它可以把任何動作按照改變後的速度執行。

Speed

用於線性的改變某個動作的速度,爲了改變一個動作的速度,首先需要將目標動作包裝到Speed動作中:

<span class="pln" style="color: rgb(255, 255, 255);">    </span><span class="kwd" style="color: rgb(226, 137, 100);">auto</span><span class="pln" style="color: rgb(255, 255, 255);"> repeat </span><span class="pun" style="color: rgb(255, 255, 255);">=</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="typ" style="color: rgb(137, 189, 255);">RepeatForever</span><span class="pun" style="color: rgb(255, 255, 255);">::</span><span class="pln" style="color: rgb(255, 255, 255);">create</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="pln" style="color: rgb(255, 255, 255);">animation</span><span class="pun" style="color: rgb(255, 255, 255);">);</span><span class="pln" style="color: rgb(255, 255, 255);">
    </span><span class="kwd" style="color: rgb(226, 137, 100);">auto</span><span class="pln" style="color: rgb(255, 255, 255);"> speed </span><span class="pun" style="color: rgb(255, 255, 255);">=</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="typ" style="color: rgb(137, 189, 255);">Speed</span><span class="pun" style="color: rgb(255, 255, 255);">::</span><span class="pln" style="color: rgb(255, 255, 255);">create</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="pln" style="color: rgb(255, 255, 255);">repeat</span><span class="pun" style="color: rgb(255, 255, 255);">,</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="lit" style="color: rgb(51, 135, 204);">0.5f</span><span class="pun" style="color: rgb(255, 255, 255);">);</span><span class="pln" style="color: rgb(255, 255, 255);">
    sprite</span><span class="pun" style="color: rgb(255, 255, 255);">-></span><span class="pln" style="color: rgb(255, 255, 255);">run</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="pln" style="color: rgb(255, 255, 255);">speed</span><span class="pun" style="color: rgb(255, 255, 255);">);</span>

第二個參數爲變速比例,設置爲0.5f則速度爲原來一半。

ActionEase

Speed雖然能改變動作的速度,但是隻能按比例改變速度,ActionEase可以實現動作的速度由快到慢、速度隨時間改變的勻速運動。該類包含5類運動,指數緩衝、Sine緩衝、彈性緩衝、跳躍緩衝和回震緩衝。每類運動都包含3個不同時期的變換:In、Out和InOut。

以下以InSine爲例:

<span class="pln" style="color: rgb(255, 255, 255);">    </span><span class="kwd" style="color: rgb(226, 137, 100);">auto</span><span class="pln" style="color: rgb(255, 255, 255);"> sineIn </span><span class="pun" style="color: rgb(255, 255, 255);">=</span><span class="pln" style="color: rgb(255, 255, 255);"> </span><span class="typ" style="color: rgb(137, 189, 255);">EaseSineIn</span><span class="pun" style="color: rgb(255, 255, 255);">::</span><span class="pln" style="color: rgb(255, 255, 255);">create</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="pln" style="color: rgb(255, 255, 255);">action</span><span class="pun" style="color: rgb(255, 255, 255);">);</span><span class="pln" style="color: rgb(255, 255, 255);">
    sprite</span><span class="pun" style="color: rgb(255, 255, 255);">-></span><span class="pln" style="color: rgb(255, 255, 255);">runAction</span><span class="pun" style="color: rgb(255, 255, 255);">(</span><span class="pln" style="color: rgb(255, 255, 255);">sineIn</span><span class="pun" style="color: rgb(255, 255, 255);">);</span>

*****************這一段轉自ArmyShen的http://www.cnblogs.com/ArmyShen/p/3239677.html**************

1、動作基本概念

CCAction是動作的基類,所有的動作都派生自此類。CCAction的一個對象就是一個動作,動作或動畫只能由CCNode來執行

CCSprite* sp = CCSprite::create("Icon.png");//創建一個精靈
sp->setPosition( ccp(20, 20) );//設置精靈初始位置
this->addChild(sp, 0);//添加精靈到場景中
CCAction *action = CCMoveTo::create(1.0f, ccp(0,0));//創建一個CCMoveTo動作,1s之內移動到ccp(0, 0)位置
sp->runAction(action);//執行動作

同一時間段內,一個動作只能由一個CCNode來執行,如果想N個CCNode同時執行一個動作,要使用copy複製動作:

CCAction *action = CCMoveTo::create(4.0f, ccp(0,0));
sp1->runAction((CCAction *)action->copy());

CCAction有一個派生類CCFiniteTimeAction,這個類中定義了一個reverse方法,此方法的作用是逆置動作,就是原動作的相反動作。絕大數我們使用的動作類都派生自CCFiniteTimeAction,如最常用的CCActionInterval(持續性動作)、CCActionInstant(瞬時動作),這兩個類又分別派生出許多我們實際用到的動作類。

 

2、瞬時動作

瞬時動作就是立刻完成的動作,其持續的動作時間爲0,這些動作的實現可以通過設置CCNode的屬性來完成,通過動作的封裝,使其可以和其他動作組合成複雜的動作。

常用的瞬時動作:

1)CCPlace -- 將該節點放置到某個位置,和設置CCNode中的Position屬性效果相同

CCFiniteTimeAction *action = CCPlace::create(ccp(0,0));
sp->runAction(action);

2)CCFlipX和CCFlipY -- 將節點沿X和Y反向顯示,與CCNode中的FlipX和FlipY效果相同

//CCFiniteTimeAction *action = CCFlipX::create(true);
CCFiniteTimeAction *action = CCFlipY::create(true);
sp->runAction(action);

3)CCShow和CCHide -- 分別用於顯示和隱藏節點,和Visible效果相同

//CCFiniteTimeAction *action1 = CCHide::create();
CCFiniteTimeAction *action2 = CCShow::create();
sp->runAction(action2);

3、動作回調函數

當一個CCNode執行完某個Action後,我們可能需要做一些其他的工作,這時,可以使用動作回調函數來完成這項功能。在一個動作完成之後隨即調用動作回調函數,這種類型的函數有4種形式可供我們選擇使用:

1)CCCallFunc:無參回調函數

複製代碼
//創建一個在1s內移動到ccp(0, 0)位置的動作
CCFiniteTimeAction *action = CCMoveTo::create(1, ccp(0,0));
//創建一個在1s內移動到ccp(size.width/2, size.height/2)位置的動作
CCFiniteTimeAction *action1 = CCMoveTo::create(1, ccp(size.width/2, size.height/2));
//創建不帶參數的動作回調,當動作執行完成後,調用該函數
CCFiniteTimeAction *action2 = CCCallFunc::create(this, callfunc_selector(HelloWorld::actionCallBack));
//循環執行動作
sp->runAction(CCRepeatForever::create(CCSequence::create(action, action1,action2, NULL)));

void HelloWorld::actionCallBack()
{
    //設置背景顯示/隱藏
    if(m_SpBackground->isVisible())
    {
        m_SpBackground->setVisible(false);
    }
    else
    {
        m_SpBackground->setVisible(true);
    }
}
複製代碼

2)CCCallFuncN:帶一個CCNode*參數回調函數,“N”表示CCNode

複製代碼
//創建帶一個CCNode*參數的動作回調,當動作執行完成後,調用並向該函數傳遞執行動作的那個CCNode對象
CCFiniteTimeAction *action2 = CCCallFuncN::create(this, callfuncN_selector(HelloWorld::actionCallBack));

void HelloWorld::actionCallBack(cocos2d::CCNode *node)
{
    //參數node就是執行動作的那個對象,這裏測試每次動作執行完成後,設置這個對象的縮放值
    CCAssert(node, "node is null");
    if (node->getScaleX() > 1.0f || node->getScaleY() > 1.0f)
    {
        node->setScale(1.0f);
    }
    else
    {
        node->setScale(2.0f);
    }
}
複製代碼

3)CCCallFuncND:帶一個CCNode*和一個void*參數的回調函數,“N”表示CCNode,"D"表示Data

複製代碼
//創建帶一個CCNode*和一個Void*參數的動作回調,當動作執行完成後,調用並向該函數傳遞執行動作的那個CCNode對象和用戶自定義的數據對象m_nCount
CCFiniteTimeAction *action2 = CCCallFuncND::create(this, callfuncND_selector(HelloWorld::actionCallBack),(void*)&m_nCount);

void HelloWorld::actionCallBack(cocos2d::CCNode *node, int *i)
{
    CCAssert(node, "node is null");
    //i是我們自己傳遞進來的m_nCount
    printf("%d\n", *i);
    //每執行一次動作,讓計數器加1
    m_nCount++;
    //這個node就是執行動作的那個對象,每次動作執行完成後,設置這個對象的縮放值
    if (node->getScaleX() > 1.0f || node->getScaleY() > 1.0f)
    {
        node->setScale(1.0f);
    }
    else
    {
        node->setScale(2.0f);
    }
}
複製代碼

4)CCCallFunO:帶一個CCObject*參數的回調函數,"O"表示CCObject

複製代碼
//創建帶一個CCObject*參數的動作回調,當動作執行完成後,調用並向該函數傳遞CCObject對象m_SpBackground
CCFiniteTimeAction *action2 = CCCallFuncO::create(this, callfuncO_selector(HelloWorld::actionCallBack), m_SpBackground);

void HelloWorld::actionCallBack(cocos2d::CCObject *obj)
{
    CCAssert(obj, "obj is null");
    //obj是我們傳遞進來的m_SpBackground,是一個CCSprite類型
    CCNode *node = (CCNode*)obj;
    //測試設置背景的顯示/隱藏
    if (node->isVisible())
    {
        node->setVisible(false);
    }
    else
    {
        node->setVisible(true);
    }
}
複製代碼

4、持續性動作

持續性動作:指持續一段時間逐漸完成的動作。

1)位置變化動作

常用的位置變化動作有:CCMoveTo / CCMoveBy(節點直線運動)、CCJumpTo / CCJumpBy(節點跳躍運動)、CCBezierTo / CCBezierBy(節點曲線運動)

以To結尾的持續性動作,設置節點座標位置的絕對變化。簡單的講就是將節點從位置A直接移動到位置B,移動參照位置應該是當前場景,比如說節點現在在場景A(100,100)的位置,使用To結尾的動作,可以將節點直接移動到場景的B(0, 0)位置。

以By結尾的持續性動作和To最大的不同就是移動參照位置的不同。以By結尾的動作,是設置節點位置的相對變化。比方說節點現在在場景中的位置是A(100, 100),使用By結尾的動作移動到B(200, 200),此時並不是把節點從位置A移動到位置B,而是以這個節點的自身爲參照,移動B這麼多的像素,再簡單點講就是使用By結尾的動作時,節點始終把自己的移動初始位置看做(0, 0),與它的實際場景位置無關,x軸、y軸分別移動N個像素距離。

CCMoveTo / CCMoveBy(節點直線運動)

//duration -- 動作持續時長
//deltaPosition -- 移動位置(To)、移動距離(By)
CCMoveTo::create(float duration, const CCPoint& deltaPosition);
CCMoveBy::create(float duration, const CCPoint& deltaPosition);

CCJumpTo / CCJumpBy(節點跳躍運動)

//duration -- 動作持續時長
//deltaPosition -- 移動位置(To)、移動距離(By)
//height -- 跳躍高度
//jumps -- 跳躍次數
CCJumpTo::create(float duration, const CCPoint& position, float height, unsigned int jumps);
CCJumpBy::create(float duration, const CCPoint& position, float height, unsigned int jumps);

CCBezierTo / CCBezierBy(節點曲線運動)

使用貝塞爾曲線讓節點做曲線運動,需先創建ccBezierConfig結構體,設置曲線的第一第二控制點和結束位置

複製代碼
ccBezierConfig con;
con.controlPoint_1 = ccp(100, 100);
con.controlPoint_2 = ccp(200, 200);
con.endPosition = ccp(0, 0);
CCActionInterval *action1 = CCBezierTo::create(3, con);
//CCActionInterval *action1 = CCBezierBy::create(3, con);
sp->runAction(CCSequence::create(action1, NULL));
複製代碼

2)屬性變化動作

CCScalsTo / CCScaleBy(節點縮放)

複製代碼
//設置CCSprite類型節點sp的縮放值
sp->setScale(0.25);
//在規定時間內將節點sp以原始比例縮放2倍大小,也就是說按照setScale(1)的比例縮放2倍,忽略節點之前的縮放
CCFiniteTimeAction *action = CCScaleTo::create(0.5, 2);
//在規定時間內將節點sp按照當前比例縮放2倍大小,也就是按照setScale(0.25)的比例縮放2倍
CCFiniteTimeAction *action = CCScaleBy::create(0.5, 2);
sp->runAction(CCSequence::create(action, NULL));
複製代碼

CCRotateTo / CCRotateBy(節點旋轉)

sp->setRotation(45);
//在規定時間內將節點sp以原始角度進行旋轉,也就是按照setRotation(0)的角度進行旋轉,忽略之前的旋轉角度
CCFiniteTimeAction *action = CCRotateTo::create(1, 0);
//在規定時間內將節點sp以現有角度進行旋轉,也就是在setRotation(45)的角度基礎上進行疊加旋轉
//CCFiniteTimeAction *action = CCRotateBy::create(1,10);

CCFadeIn / CCFadeOut(淡入淡出)

//這兩種效果都實現了reverse方法
//淡入
CCFadeIn::create(float d)
//淡出
CCFadeOut::create(float d)

CCFadeTo(一段時間內的透明度變化,只能用於CCSprite)

//duration -- 動作執行時長
//opacity --透明度(0~255)
CCFadeTo::create(float duration, GLubyte opacity)

CCTintBy / CCTintTo(色調變化,與CCFadeTo類似)

//duration -- 執行時長
//r、g、b顏色值,取值範圍0~255
CCTintTo::create(float duration, GLubyte red, GLubyte green, GLubyte blue)
CCTintBy::create(float duration, GLubyte red, GLubyte green, GLubyte blue)

CCBlink(節點閃爍)

//時間長度
//uBlinks -- 閃爍次數
CCBlink::create(float duration, unsigned int uBlinks)

5、複合動作

1)重複動作 -- CCRepeatForever / CCRepeat

使一個Action重複被執行

複製代碼
//無限重複執行動作
CCRepeatForever* create(CCActionInterval *pAction);
//重複執行times次
CCRepeat* create(CCFiniteTimeAction *pAction, unsigned int times);

//例如
CCActionInterval *action = CCMoveBy::create(1, ccp(110,110));
CCActionInterval *action1 = action->reverse();
//無限重複執行動作
sp->runAction(CCRepeatForever::create(CCSequence::create(action, action1, NULL)));
複製代碼

2)並列動作 -- CCSpawn

使一個CCNode同時執行一批動作,並列動作必須是能夠同時執行並繼承自CCFiniteTimeAction的動作,合併之後,動作執行完成時間按照最大的一個動作執行時間計算

複製代碼
//CCScaleTo動作
CCActionInterval *action1 = CCScaleTo::create(1, 0.5);

//CCRotateTo動作
CCActionInterval *action2 = CCRotateTo::create(2, 180);
    
//創建並列動作(使一個CCNode同時執行縮放和旋轉動作),按照CCRotateTo(2秒)執行時間計算
CCActionInterval *act =  CCSpawn::create(action1, action2, NULL);
    
//執行動作
sp->runAction(act);
複製代碼

3)序列動作 -- CCSequence

序列動作就是使一個CCNode順序執行一批動作

複製代碼
//CCMoveBy動作
CCActionInterval *action = CCMoveBy::create(1, ccp(110,110));
CCActionInterval *action_back = action->reverse();

//創建序列動作
CCActionInterval *act = CCSequence::create(action, action_back, NULL);
    
//執行動作
sp->runAction(act);
複製代碼

4)延時動作 -- CCDelayTime

複製代碼
//CCMoveBy動作
CCActionInterval *action = CCMoveBy::create(1, ccp(110,110));
CCActionInterval *action_back = action->reverse();
    
//創建CCDelayTime
CCDelayTime *delayTime = CCDelayTime::create(5);

//創建序列動作,使action和action_back動作之間停頓5秒後再執行
CCActionInterval *act = CCSequence::create(action, delayTime, action_back, NULL);
    
//執行動作
sp->runAction(act);
複製代碼

6、變速動作

1)CCSpeed動作

線性改變某個動作的速度

複製代碼
//CCMoveBy動作
CCActionInterval *action = CCMoveBy::create(1, ccp(100,100));
CCActionInterval *action_back = action->reverse();

//創建CCSpeed
CCSpeed *speed = CCSpeed::create(CCSequence::create(action, action_back, NULL), 1);
    
//執行動作
sp->runAction(speed);
    
//設置動作速度
speed->setSpeed(10);
複製代碼

2)CCActionEase系列動作

 CCActionEase系列動作繼承關係圖

CCActionEase系列動作有相似的名字:CCEaseXxxxInCCEaseXxxxOutCCEaseXxxxInOut

In -- 表示動作執行先快後慢
Out -- 表示動作執行先慢後快
InOut -- 表示動作執行快-慢-快

使用CCActionEase系列創建動作,可以使動作的運動軌跡變得多樣化,效果很不錯

複製代碼
//CCMoveBy動作
CCActionInterval *action = CCMoveTo::create(1, ccp(size.width/2, 30));

//創建CCEaseBounceOut(彈跳 -- 類似皮球落地的動作)
CCEaseBounceOut *backbi = CCEaseBounceOut::create(action);
    
//執行動作
sp->runAction(backbi);
複製代碼

爲了進一步瞭解一下CCCallFunc的的使用,下面引用多一篇好文章

-----------------------這一段引用自just_do_it2009的http://blog.csdn.net/just_do_it2009/article/details/8891651------------

CCCallFunc CCCallFuncN CCCallFuncND的區別和使用

CCCallFunc CCCallFuncN CCCallFuncND都用來創建帶有回調函數的動作,區別主要在於回調函數是否帶有參數

CCCallFunc

CCCallFunc是執行對應的回調函數,其中回調函數不可帶參數。一般使用靜態成員函數create創建實例,create聲明如下:

<span class="kwd" style="color: rgb(0, 0, 136);">static</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="typ" style="color: rgb(102, 0, 102);">CCCallFunc</span><span class="pun" style="color: rgb(102, 102, 0);">*</span><span class="pln" style="color: rgb(0, 0, 0);"> create	</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="pln" style="color: rgb(0, 0, 0);">	</span><span class="typ" style="color: rgb(102, 0, 102);">CCObject</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="pun" style="color: rgb(102, 102, 0);">*</span><span class="pln" style="color: rgb(0, 0, 0);"> 	pSelectorTarget</span><span class="pun" style="color: rgb(102, 102, 0);">,</span><span class="pln" style="color: rgb(0, 0, 0);">
SEL_CallFunc 	selector
</span><span class="pun" style="color: rgb(102, 102, 0);">)</span>

回調函數通過execute方法執行,CCCallFunc中的execute的實現如下:

<span class="kwd" style="color: rgb(0, 0, 136);">void</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="typ" style="color: rgb(102, 0, 102);">CCCallFunc</span><span class="pun" style="color: rgb(102, 102, 0);">::</span><span class="pln" style="color: rgb(0, 0, 0);">execute</span><span class="pun" style="color: rgb(102, 102, 0);">()</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="pun" style="color: rgb(102, 102, 0);">{</span><span class="pln" style="color: rgb(0, 0, 0);">
    </span><span class="kwd" style="color: rgb(0, 0, 136);">if</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="pln" style="color: rgb(0, 0, 0);">m_pCallFunc</span><span class="pun" style="color: rgb(102, 102, 0);">)</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="pun" style="color: rgb(102, 102, 0);">{</span><span class="pln" style="color: rgb(0, 0, 0);">
        </span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="pln" style="color: rgb(0, 0, 0);">m_pSelectorTarget</span><span class="pun" style="color: rgb(102, 102, 0);">->*</span><span class="pln" style="color: rgb(0, 0, 0);">m_pCallFunc</span><span class="pun" style="color: rgb(102, 102, 0);">)();</span><span class="pln" style="color: rgb(0, 0, 0);">
    </span><span class="pun" style="color: rgb(102, 102, 0);">}</span><span class="pln" style="color: rgb(0, 0, 0);">
	</span><span class="kwd" style="color: rgb(0, 0, 136);">if</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="pln" style="color: rgb(0, 0, 0);">m_nScriptHandler</span><span class="pun" style="color: rgb(102, 102, 0);">)</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="pun" style="color: rgb(102, 102, 0);">{</span><span class="pln" style="color: rgb(0, 0, 0);">
		</span><span class="typ" style="color: rgb(102, 0, 102);">CCScriptEngineManager</span><span class="pun" style="color: rgb(102, 102, 0);">::</span><span class="pln" style="color: rgb(0, 0, 0);">sharedManager</span><span class="pun" style="color: rgb(102, 102, 0);">()-></span><span class="pln" style="color: rgb(0, 0, 0);">getScriptEngine</span><span class="pun" style="color: rgb(102, 102, 0);">()-></span><span class="pln" style="color: rgb(0, 0, 0);">executeCallFuncActionEvent</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="kwd" style="color: rgb(0, 0, 136);">this</span><span class="pun" style="color: rgb(102, 102, 0);">);</span><span class="pln" style="color: rgb(0, 0, 0);">
	</span><span class="pun" style="color: rgb(102, 102, 0);">}</span><span class="pln" style="color: rgb(0, 0, 0);">
</span><span class="pun" style="color: rgb(102, 102, 0);">}</span>

通過(m_pSelectorTarget->*m_pCallFunc)();可以看到回調函數不包含參數

CCCallFuncN

CCCallFuncN也是執行對應的回調函數,其中回調函數帶一個參數。一般使用靜態成員函數create創建實例,create聲明如下:

<span class="kwd" style="color: rgb(0, 0, 136);">static</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="typ" style="color: rgb(102, 0, 102);">CCCallFuncN</span><span class="pun" style="color: rgb(102, 102, 0);">*</span><span class="pln" style="color: rgb(0, 0, 0);"> create	</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="pln" style="color: rgb(0, 0, 0);">	</span><span class="typ" style="color: rgb(102, 0, 102);">CCObject</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="pun" style="color: rgb(102, 102, 0);">*</span><span class="pln" style="color: rgb(0, 0, 0);"> 	pSelectorTarget</span><span class="pun" style="color: rgb(102, 102, 0);">,</span><span class="pln" style="color: rgb(0, 0, 0);">
SEL_CallFuncN 	selector
</span><span class="pun" style="color: rgb(102, 102, 0);">)</span>

回調函數通過execute方法執行,CCCallFuncN中的execute的實現如下:

<span class="kwd" style="color: rgb(0, 0, 136);">void</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="typ" style="color: rgb(102, 0, 102);">CCCallFuncN</span><span class="pun" style="color: rgb(102, 102, 0);">::</span><span class="pln" style="color: rgb(0, 0, 0);">execute</span><span class="pun" style="color: rgb(102, 102, 0);">()</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="pun" style="color: rgb(102, 102, 0);">{</span><span class="pln" style="color: rgb(0, 0, 0);">
    </span><span class="kwd" style="color: rgb(0, 0, 136);">if</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="pln" style="color: rgb(0, 0, 0);">m_pCallFuncN</span><span class="pun" style="color: rgb(102, 102, 0);">)</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="pun" style="color: rgb(102, 102, 0);">{</span><span class="pln" style="color: rgb(0, 0, 0);">
        </span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="pln" style="color: rgb(0, 0, 0);">m_pSelectorTarget</span><span class="pun" style="color: rgb(102, 102, 0);">->*</span><span class="pln" style="color: rgb(0, 0, 0);">m_pCallFuncN</span><span class="pun" style="color: rgb(102, 102, 0);">)(</span><span class="pln" style="color: rgb(0, 0, 0);">m_pTarget</span><span class="pun" style="color: rgb(102, 102, 0);">);</span><span class="pln" style="color: rgb(0, 0, 0);">
    </span><span class="pun" style="color: rgb(102, 102, 0);">}</span><span class="pln" style="color: rgb(0, 0, 0);">
	</span><span class="kwd" style="color: rgb(0, 0, 136);">if</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="pln" style="color: rgb(0, 0, 0);">m_nScriptHandler</span><span class="pun" style="color: rgb(102, 102, 0);">)</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="pun" style="color: rgb(102, 102, 0);">{</span><span class="pln" style="color: rgb(0, 0, 0);">
		</span><span class="typ" style="color: rgb(102, 0, 102);">CCScriptEngineManager</span><span class="pun" style="color: rgb(102, 102, 0);">::</span><span class="pln" style="color: rgb(0, 0, 0);">sharedManager</span><span class="pun" style="color: rgb(102, 102, 0);">()-></span><span class="pln" style="color: rgb(0, 0, 0);">getScriptEngine</span><span class="pun" style="color: rgb(102, 102, 0);">()-></span><span class="pln" style="color: rgb(0, 0, 0);">executeCallFuncActionEvent</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="kwd" style="color: rgb(0, 0, 136);">this</span><span class="pun" style="color: rgb(102, 102, 0);">,</span><span class="pln" style="color: rgb(0, 0, 0);"> m_pTarget</span><span class="pun" style="color: rgb(102, 102, 0);">);</span><span class="pln" style="color: rgb(0, 0, 0);">
	</span><span class="pun" style="color: rgb(102, 102, 0);">}</span><span class="pln" style="color: rgb(0, 0, 0);">
</span><span class="pun" style="color: rgb(102, 102, 0);">}</span>

通過(m_pSelectorTarget->*m_pCallFuncN)(m_pTarget);可以看到回調函數包含一個參數。

CCCallFuncND

CCCallFuncND也是執行對應的回調函數,其中回調函數可帶兩個參數。一般使用靜態成員函數create創建實例,create聲明如下:

<span class="kwd" style="color: rgb(0, 0, 136);">static</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="typ" style="color: rgb(102, 0, 102);">CCCallFuncND</span><span class="pun" style="color: rgb(102, 102, 0);">*</span><span class="pln" style="color: rgb(0, 0, 0);"> create	</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="pln" style="color: rgb(0, 0, 0);">	</span><span class="typ" style="color: rgb(102, 0, 102);">CCObject</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="pun" style="color: rgb(102, 102, 0);">*</span><span class="pln" style="color: rgb(0, 0, 0);"> 	pSelectorTarget</span><span class="pun" style="color: rgb(102, 102, 0);">,</span><span class="pln" style="color: rgb(0, 0, 0);">
SEL_CallFuncND 	selector</span><span class="pun" style="color: rgb(102, 102, 0);">,</span><span class="pln" style="color: rgb(0, 0, 0);">
</span><span class="kwd" style="color: rgb(0, 0, 136);">void</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="pun" style="color: rgb(102, 102, 0);">*</span><span class="pln" style="color: rgb(0, 0, 0);"> 	d
</span><span class="pun" style="color: rgb(102, 102, 0);">)</span>

回調函數通過execute方法執行,CCCallFuncND中的execute的實現如下:

<span class="kwd" style="color: rgb(0, 0, 136);">void</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="typ" style="color: rgb(102, 0, 102);">CCCallFuncND</span><span class="pun" style="color: rgb(102, 102, 0);">::</span><span class="pln" style="color: rgb(0, 0, 0);">execute</span><span class="pun" style="color: rgb(102, 102, 0);">()</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="pun" style="color: rgb(102, 102, 0);">{</span><span class="pln" style="color: rgb(0, 0, 0);">
    </span><span class="kwd" style="color: rgb(0, 0, 136);">if</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="pln" style="color: rgb(0, 0, 0);">m_pCallFuncND</span><span class="pun" style="color: rgb(102, 102, 0);">)</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="pun" style="color: rgb(102, 102, 0);">{</span><span class="pln" style="color: rgb(0, 0, 0);">
        </span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="pln" style="color: rgb(0, 0, 0);">m_pSelectorTarget</span><span class="pun" style="color: rgb(102, 102, 0);">->*</span><span class="pln" style="color: rgb(0, 0, 0);">m_pCallFuncND</span><span class="pun" style="color: rgb(102, 102, 0);">)(</span><span class="pln" style="color: rgb(0, 0, 0);">m_pTarget</span><span class="pun" style="color: rgb(102, 102, 0);">,</span><span class="pln" style="color: rgb(0, 0, 0);"> m_pData</span><span class="pun" style="color: rgb(102, 102, 0);">);</span><span class="pln" style="color: rgb(0, 0, 0);">
    </span><span class="pun" style="color: rgb(102, 102, 0);">}</span><span class="pln" style="color: rgb(0, 0, 0);">
</span><span class="pun" style="color: rgb(102, 102, 0);">}</span>

通過(m_pSelectorTarget->*m_pCallFuncND)(m_pTarget, m_pData);可以看到回調函數包含兩個參數。

CCCallFunc CCCallFuncN CCCallFuncND實例對比

<span class="pln" style="color: rgb(0, 0, 0);">testCallFunc</span><span class="pun" style="color: rgb(102, 102, 0);">.</span><span class="pln" style="color: rgb(0, 0, 0);">h</span><span class="pun" style="color: rgb(102, 102, 0);">中代碼</span><span class="pln" style="color: rgb(0, 0, 0);">
</span><span class="kwd" style="color: rgb(0, 0, 136);">class</span><span class="pln" style="color: rgb(0, 0, 0);"> testCallFunc </span><span class="pun" style="color: rgb(102, 102, 0);">:</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="kwd" style="color: rgb(0, 0, 136);">public</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="typ" style="color: rgb(102, 0, 102);">CCLayer</span><span class="pln" style="color: rgb(0, 0, 0);">
</span><span class="pun" style="color: rgb(102, 102, 0);">{</span><span class="pln" style="color: rgb(0, 0, 0);">
</span><span class="kwd" style="color: rgb(0, 0, 136);">protected</span><span class="pun" style="color: rgb(102, 102, 0);">:</span><span class="pln" style="color: rgb(0, 0, 0);">
    </span><span class="typ" style="color: rgb(102, 0, 102);">CCSprite</span><span class="pun" style="color: rgb(102, 102, 0);">*</span><span class="pln" style="color: rgb(0, 0, 0);">    sprite1</span><span class="pun" style="color: rgb(102, 102, 0);">;</span><span class="pln" style="color: rgb(0, 0, 0);">
    </span><span class="typ" style="color: rgb(102, 0, 102);">CCSprite</span><span class="pun" style="color: rgb(102, 102, 0);">*</span><span class="pln" style="color: rgb(0, 0, 0);">    sprite2</span><span class="pun" style="color: rgb(102, 102, 0);">;</span><span class="pln" style="color: rgb(0, 0, 0);">
    </span><span class="typ" style="color: rgb(102, 0, 102);">CCSprite</span><span class="pun" style="color: rgb(102, 102, 0);">*</span><span class="pln" style="color: rgb(0, 0, 0);">    sprite3</span><span class="pun" style="color: rgb(102, 102, 0);">;</span><span class="pln" style="color: rgb(0, 0, 0);">
</span><span class="kwd" style="color: rgb(0, 0, 136);">public</span><span class="pun" style="color: rgb(102, 102, 0);">:</span><span class="pln" style="color: rgb(0, 0, 0);">
    </span><span class="kwd" style="color: rgb(0, 0, 136);">virtual</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="kwd" style="color: rgb(0, 0, 136);">void</span><span class="pln" style="color: rgb(0, 0, 0);"> onEnter</span><span class="pun" style="color: rgb(102, 102, 0);">();</span><span class="pln" style="color: rgb(0, 0, 0);">

    </span><span class="kwd" style="color: rgb(0, 0, 136);">void</span><span class="pln" style="color: rgb(0, 0, 0);"> callback1</span><span class="pun" style="color: rgb(102, 102, 0);">();</span><span class="pln" style="color: rgb(0, 0, 0);">
    </span><span class="kwd" style="color: rgb(0, 0, 136);">void</span><span class="pln" style="color: rgb(0, 0, 0);"> callback2</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="typ" style="color: rgb(102, 0, 102);">CCNode</span><span class="pun" style="color: rgb(102, 102, 0);">*</span><span class="pln" style="color: rgb(0, 0, 0);"> sender</span><span class="pun" style="color: rgb(102, 102, 0);">);</span><span class="pln" style="color: rgb(0, 0, 0);">
    </span><span class="kwd" style="color: rgb(0, 0, 136);">void</span><span class="pln" style="color: rgb(0, 0, 0);"> callback3</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="typ" style="color: rgb(102, 0, 102);">CCNode</span><span class="pun" style="color: rgb(102, 102, 0);">*</span><span class="pln" style="color: rgb(0, 0, 0);"> sender</span><span class="pun" style="color: rgb(102, 102, 0);">,</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="kwd" style="color: rgb(0, 0, 136);">void</span><span class="pun" style="color: rgb(102, 102, 0);">*</span><span class="pln" style="color: rgb(0, 0, 0);"> data</span><span class="pun" style="color: rgb(102, 102, 0);">);</span><span class="pln" style="color: rgb(0, 0, 0);">
</span><span class="pun" style="color: rgb(102, 102, 0);">};</span><span class="pln" style="color: rgb(0, 0, 0);">

testCallFunc</span><span class="pun" style="color: rgb(102, 102, 0);">.</span><span class="pln" style="color: rgb(0, 0, 0);">cpp</span><span class="pun" style="color: rgb(102, 102, 0);">中代碼</span><span class="pln" style="color: rgb(0, 0, 0);">

</span><span class="kwd" style="color: rgb(0, 0, 136);">void</span><span class="pln" style="color: rgb(0, 0, 0);"> testCallFunc</span><span class="pun" style="color: rgb(102, 102, 0);">::</span><span class="pln" style="color: rgb(0, 0, 0);">onEnter</span><span class="pun" style="color: rgb(102, 102, 0);">()</span><span class="pln" style="color: rgb(0, 0, 0);">
</span><span class="pun" style="color: rgb(102, 102, 0);">{</span><span class="pln" style="color: rgb(0, 0, 0);">
    </span><span class="com" style="color: rgb(136, 0, 0);">//CCCallFunc的使用</span><span class="pln" style="color: rgb(0, 0, 0);">
    </span><span class="typ" style="color: rgb(102, 0, 102);">CCFiniteTimeAction</span><span class="pun" style="color: rgb(102, 102, 0);">*</span><span class="pln" style="color: rgb(0, 0, 0);">  action </span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="typ" style="color: rgb(102, 0, 102);">CCSequence</span><span class="pun" style="color: rgb(102, 102, 0);">::</span><span class="pln" style="color: rgb(0, 0, 0);">create</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="pln" style="color: rgb(0, 0, 0);">
        </span><span class="typ" style="color: rgb(102, 0, 102);">CCMoveBy</span><span class="pun" style="color: rgb(102, 102, 0);">::</span><span class="pln" style="color: rgb(0, 0, 0);">create</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="lit" style="color: rgb(0, 102, 102);">2</span><span class="pun" style="color: rgb(102, 102, 0);">,</span><span class="pln" style="color: rgb(0, 0, 0);"> ccp</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="lit" style="color: rgb(0, 102, 102);">200</span><span class="pun" style="color: rgb(102, 102, 0);">,</span><span class="lit" style="color: rgb(0, 102, 102);">0</span><span class="pun" style="color: rgb(102, 102, 0);">)),</span><span class="pln" style="color: rgb(0, 0, 0);">
        </span><span class="typ" style="color: rgb(102, 0, 102);">CCCallFunc</span><span class="pun" style="color: rgb(102, 102, 0);">::</span><span class="pln" style="color: rgb(0, 0, 0);">create</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="kwd" style="color: rgb(0, 0, 136);">this</span><span class="pun" style="color: rgb(102, 102, 0);">,</span><span class="pln" style="color: rgb(0, 0, 0);"> callfunc_selector</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="pln" style="color: rgb(0, 0, 0);">testCallFunc</span><span class="pun" style="color: rgb(102, 102, 0);">::</span><span class="pln" style="color: rgb(0, 0, 0);">callback1</span><span class="pun" style="color: rgb(102, 102, 0);">)),</span><span class="pln" style="color: rgb(0, 0, 0);">
        NULL</span><span class="pun" style="color: rgb(102, 102, 0);">);</span><span class="pln" style="color: rgb(0, 0, 0);">

    </span><span class="com" style="color: rgb(136, 0, 0);">//CCCallFuncN的使用</span><span class="pln" style="color: rgb(0, 0, 0);">
    </span><span class="typ" style="color: rgb(102, 0, 102);">CCFiniteTimeAction</span><span class="pun" style="color: rgb(102, 102, 0);">*</span><span class="pln" style="color: rgb(0, 0, 0);">  action2 </span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="typ" style="color: rgb(102, 0, 102);">CCSequence</span><span class="pun" style="color: rgb(102, 102, 0);">::</span><span class="pln" style="color: rgb(0, 0, 0);">create</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="pln" style="color: rgb(0, 0, 0);">
        </span><span class="typ" style="color: rgb(102, 0, 102);">CCScaleBy</span><span class="pun" style="color: rgb(102, 102, 0);">::</span><span class="pln" style="color: rgb(0, 0, 0);">create</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="lit" style="color: rgb(0, 102, 102);">2</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="pun" style="color: rgb(102, 102, 0);">,</span><span class="pln" style="color: rgb(0, 0, 0);">  </span><span class="lit" style="color: rgb(0, 102, 102);">2</span><span class="pun" style="color: rgb(102, 102, 0);">),</span><span class="pln" style="color: rgb(0, 0, 0);">
        </span><span class="typ" style="color: rgb(102, 0, 102);">CCFadeOut</span><span class="pun" style="color: rgb(102, 102, 0);">::</span><span class="pln" style="color: rgb(0, 0, 0);">create</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="lit" style="color: rgb(0, 102, 102);">2</span><span class="pun" style="color: rgb(102, 102, 0);">),</span><span class="pln" style="color: rgb(0, 0, 0);">
        </span><span class="typ" style="color: rgb(102, 0, 102);">CCCallFuncN</span><span class="pun" style="color: rgb(102, 102, 0);">::</span><span class="pln" style="color: rgb(0, 0, 0);">create</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="kwd" style="color: rgb(0, 0, 136);">this</span><span class="pun" style="color: rgb(102, 102, 0);">,</span><span class="pln" style="color: rgb(0, 0, 0);"> callfuncN_selector</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="pln" style="color: rgb(0, 0, 0);">testCallFunc</span><span class="pun" style="color: rgb(102, 102, 0);">::</span><span class="pln" style="color: rgb(0, 0, 0);">callback2</span><span class="pun" style="color: rgb(102, 102, 0);">)),</span><span class="pln" style="color: rgb(0, 0, 0);">
        NULL</span><span class="pun" style="color: rgb(102, 102, 0);">);</span><span class="pln" style="color: rgb(0, 0, 0);">

    </span><span class="com" style="color: rgb(136, 0, 0);">//CCCallFuncNC的使用</span><span class="pln" style="color: rgb(0, 0, 0);">
    </span><span class="typ" style="color: rgb(102, 0, 102);">CCFiniteTimeAction</span><span class="pun" style="color: rgb(102, 102, 0);">*</span><span class="pln" style="color: rgb(0, 0, 0);">  action3 </span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="typ" style="color: rgb(102, 0, 102);">CCSequence</span><span class="pun" style="color: rgb(102, 102, 0);">::</span><span class="pln" style="color: rgb(0, 0, 0);">create</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="pln" style="color: rgb(0, 0, 0);">
        </span><span class="typ" style="color: rgb(102, 0, 102);">CCRotateBy</span><span class="pun" style="color: rgb(102, 102, 0);">::</span><span class="pln" style="color: rgb(0, 0, 0);">create</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="lit" style="color: rgb(0, 102, 102);">3</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="pun" style="color: rgb(102, 102, 0);">,</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="lit" style="color: rgb(0, 102, 102);">360</span><span class="pun" style="color: rgb(102, 102, 0);">),</span><span class="pln" style="color: rgb(0, 0, 0);">
        </span><span class="typ" style="color: rgb(102, 0, 102);">CCFadeOut</span><span class="pun" style="color: rgb(102, 102, 0);">::</span><span class="pln" style="color: rgb(0, 0, 0);">create</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="lit" style="color: rgb(0, 102, 102);">2</span><span class="pun" style="color: rgb(102, 102, 0);">),</span><span class="pln" style="color: rgb(0, 0, 0);">
        </span><span class="typ" style="color: rgb(102, 0, 102);">CCCallFuncND</span><span class="pun" style="color: rgb(102, 102, 0);">::</span><span class="pln" style="color: rgb(0, 0, 0);">create</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="kwd" style="color: rgb(0, 0, 136);">this</span><span class="pun" style="color: rgb(102, 102, 0);">,</span><span class="pln" style="color: rgb(0, 0, 0);"> callfuncND_selector</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="pln" style="color: rgb(0, 0, 0);">testCallFunc</span><span class="pun" style="color: rgb(102, 102, 0);">::</span><span class="pln" style="color: rgb(0, 0, 0);">callback3</span><span class="pun" style="color: rgb(102, 102, 0);">),</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="kwd" style="color: rgb(0, 0, 136);">void</span><span class="pun" style="color: rgb(102, 102, 0);">*)</span><span class="lit" style="color: rgb(0, 102, 102);">0xbebabeba</span><span class="pun" style="color: rgb(102, 102, 0);">),</span><span class="pln" style="color: rgb(0, 0, 0);">
        NULL</span><span class="pun" style="color: rgb(102, 102, 0);">);</span><span class="pln" style="color: rgb(0, 0, 0);">

    sprite1</span><span class="pun" style="color: rgb(102, 102, 0);">-></span><span class="pln" style="color: rgb(0, 0, 0);">runAction</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="pln" style="color: rgb(0, 0, 0);">action</span><span class="pun" style="color: rgb(102, 102, 0);">);</span><span class="pln" style="color: rgb(0, 0, 0);">
    sprite2</span><span class="pun" style="color: rgb(102, 102, 0);">-></span><span class="pln" style="color: rgb(0, 0, 0);">runAction</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="pln" style="color: rgb(0, 0, 0);">action2</span><span class="pun" style="color: rgb(102, 102, 0);">);</span><span class="pln" style="color: rgb(0, 0, 0);">
    sprite3</span><span class="pun" style="color: rgb(102, 102, 0);">-></span><span class="pln" style="color: rgb(0, 0, 0);">runAction</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="pln" style="color: rgb(0, 0, 0);">action3</span><span class="pun" style="color: rgb(102, 102, 0);">);</span><span class="pln" style="color: rgb(0, 0, 0);">
</span><span class="pun" style="color: rgb(102, 102, 0);">}</span><span class="pln" style="color: rgb(0, 0, 0);">

</span><span class="kwd" style="color: rgb(0, 0, 136);">void</span><span class="pln" style="color: rgb(0, 0, 0);"> testCallFunc</span><span class="pun" style="color: rgb(102, 102, 0);">::</span><span class="pln" style="color: rgb(0, 0, 0);">callback1</span><span class="pun" style="color: rgb(102, 102, 0);">()</span><span class="pln" style="color: rgb(0, 0, 0);">
</span><span class="pun" style="color: rgb(102, 102, 0);">{</span><span class="pln" style="color: rgb(0, 0, 0);">
    </span><span class="typ" style="color: rgb(102, 0, 102);">CCSize</span><span class="pln" style="color: rgb(0, 0, 0);"> s </span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="typ" style="color: rgb(102, 0, 102);">CCDirector</span><span class="pun" style="color: rgb(102, 102, 0);">::</span><span class="pln" style="color: rgb(0, 0, 0);">sharedDirector</span><span class="pun" style="color: rgb(102, 102, 0);">()-></span><span class="pln" style="color: rgb(0, 0, 0);">getWinSize</span><span class="pun" style="color: rgb(102, 102, 0);">();</span><span class="pln" style="color: rgb(0, 0, 0);">
    </span><span class="typ" style="color: rgb(102, 0, 102);">CCLabelTTF</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="pun" style="color: rgb(102, 102, 0);">*</span><span class="pln" style="color: rgb(0, 0, 0);">label </span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="typ" style="color: rgb(102, 0, 102);">CCLabelTTF</span><span class="pun" style="color: rgb(102, 102, 0);">::</span><span class="pln" style="color: rgb(0, 0, 0);">create</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="str" style="color: rgb(0, 136, 0);">"callback 1 called"</span><span class="pun" style="color: rgb(102, 102, 0);">,</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="str" style="color: rgb(0, 136, 0);">"Marker Felt"</span><span class="pun" style="color: rgb(102, 102, 0);">,</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="lit" style="color: rgb(0, 102, 102);">16</span><span class="pun" style="color: rgb(102, 102, 0);">);</span><span class="pln" style="color: rgb(0, 0, 0);">
    label</span><span class="pun" style="color: rgb(102, 102, 0);">-></span><span class="pln" style="color: rgb(0, 0, 0);">setPosition</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="pln" style="color: rgb(0, 0, 0);">ccp</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="pln" style="color: rgb(0, 0, 0);"> s</span><span class="pun" style="color: rgb(102, 102, 0);">.</span><span class="pln" style="color: rgb(0, 0, 0);">width</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="lit" style="color: rgb(0, 102, 102);">4</span><span class="pun" style="color: rgb(102, 102, 0);">*</span><span class="lit" style="color: rgb(0, 102, 102);">1</span><span class="pun" style="color: rgb(102, 102, 0);">,</span><span class="pln" style="color: rgb(0, 0, 0);">s</span><span class="pun" style="color: rgb(102, 102, 0);">.</span><span class="pln" style="color: rgb(0, 0, 0);">height</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="lit" style="color: rgb(0, 102, 102);">2</span><span class="pun" style="color: rgb(102, 102, 0);">));</span><span class="pln" style="color: rgb(0, 0, 0);">

    addChild</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="pln" style="color: rgb(0, 0, 0);">label</span><span class="pun" style="color: rgb(102, 102, 0);">);</span><span class="pln" style="color: rgb(0, 0, 0);">
</span><span class="pun" style="color: rgb(102, 102, 0);">}</span><span class="pln" style="color: rgb(0, 0, 0);">

</span><span class="kwd" style="color: rgb(0, 0, 136);">void</span><span class="pln" style="color: rgb(0, 0, 0);"> testCallFunc</span><span class="pun" style="color: rgb(102, 102, 0);">::</span><span class="pln" style="color: rgb(0, 0, 0);">callback2</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="typ" style="color: rgb(102, 0, 102);">CCNode</span><span class="pun" style="color: rgb(102, 102, 0);">*</span><span class="pln" style="color: rgb(0, 0, 0);"> pSender</span><span class="pun" style="color: rgb(102, 102, 0);">)</span><span class="pln" style="color: rgb(0, 0, 0);">
</span><span class="pun" style="color: rgb(102, 102, 0);">{</span><span class="pln" style="color: rgb(0, 0, 0);">
    </span><span class="typ" style="color: rgb(102, 0, 102);">CCSize</span><span class="pln" style="color: rgb(0, 0, 0);"> s </span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="typ" style="color: rgb(102, 0, 102);">CCDirector</span><span class="pun" style="color: rgb(102, 102, 0);">::</span><span class="pln" style="color: rgb(0, 0, 0);">sharedDirector</span><span class="pun" style="color: rgb(102, 102, 0);">()-></span><span class="pln" style="color: rgb(0, 0, 0);">getWinSize</span><span class="pun" style="color: rgb(102, 102, 0);">();</span><span class="pln" style="color: rgb(0, 0, 0);">
    </span><span class="typ" style="color: rgb(102, 0, 102);">CCLabelTTF</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="pun" style="color: rgb(102, 102, 0);">*</span><span class="pln" style="color: rgb(0, 0, 0);">label </span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="typ" style="color: rgb(102, 0, 102);">CCLabelTTF</span><span class="pun" style="color: rgb(102, 102, 0);">::</span><span class="pln" style="color: rgb(0, 0, 0);">create</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="str" style="color: rgb(0, 136, 0);">"callback 2 called"</span><span class="pun" style="color: rgb(102, 102, 0);">,</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="str" style="color: rgb(0, 136, 0);">"Marker Felt"</span><span class="pun" style="color: rgb(102, 102, 0);">,</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="lit" style="color: rgb(0, 102, 102);">16</span><span class="pun" style="color: rgb(102, 102, 0);">);</span><span class="pln" style="color: rgb(0, 0, 0);">
    label</span><span class="pun" style="color: rgb(102, 102, 0);">-></span><span class="pln" style="color: rgb(0, 0, 0);">setPosition</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="pln" style="color: rgb(0, 0, 0);">ccp</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="pln" style="color: rgb(0, 0, 0);"> s</span><span class="pun" style="color: rgb(102, 102, 0);">.</span><span class="pln" style="color: rgb(0, 0, 0);">width</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="lit" style="color: rgb(0, 102, 102);">4</span><span class="pun" style="color: rgb(102, 102, 0);">*</span><span class="lit" style="color: rgb(0, 102, 102);">2</span><span class="pun" style="color: rgb(102, 102, 0);">,</span><span class="pln" style="color: rgb(0, 0, 0);">s</span><span class="pun" style="color: rgb(102, 102, 0);">.</span><span class="pln" style="color: rgb(0, 0, 0);">height</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="lit" style="color: rgb(0, 102, 102);">2</span><span class="pun" style="color: rgb(102, 102, 0);">));</span><span class="pln" style="color: rgb(0, 0, 0);">

    addChild</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="pln" style="color: rgb(0, 0, 0);">label</span><span class="pun" style="color: rgb(102, 102, 0);">);</span><span class="pln" style="color: rgb(0, 0, 0);">
</span><span class="pun" style="color: rgb(102, 102, 0);">}</span><span class="pln" style="color: rgb(0, 0, 0);">

</span><span class="kwd" style="color: rgb(0, 0, 136);">void</span><span class="pln" style="color: rgb(0, 0, 0);"> testCallFunc</span><span class="pun" style="color: rgb(102, 102, 0);">::</span><span class="pln" style="color: rgb(0, 0, 0);">callback3</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="typ" style="color: rgb(102, 0, 102);">CCNode</span><span class="pun" style="color: rgb(102, 102, 0);">*</span><span class="pln" style="color: rgb(0, 0, 0);"> pTarget</span><span class="pun" style="color: rgb(102, 102, 0);">,</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="kwd" style="color: rgb(0, 0, 136);">void</span><span class="pun" style="color: rgb(102, 102, 0);">*</span><span class="pln" style="color: rgb(0, 0, 0);"> data</span><span class="pun" style="color: rgb(102, 102, 0);">)</span><span class="pln" style="color: rgb(0, 0, 0);">
</span><span class="pun" style="color: rgb(102, 102, 0);">{</span><span class="pln" style="color: rgb(0, 0, 0);">
    </span><span class="typ" style="color: rgb(102, 0, 102);">CCSize</span><span class="pln" style="color: rgb(0, 0, 0);"> s </span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="typ" style="color: rgb(102, 0, 102);">CCDirector</span><span class="pun" style="color: rgb(102, 102, 0);">::</span><span class="pln" style="color: rgb(0, 0, 0);">sharedDirector</span><span class="pun" style="color: rgb(102, 102, 0);">()-></span><span class="pln" style="color: rgb(0, 0, 0);">getWinSize</span><span class="pun" style="color: rgb(102, 102, 0);">();</span><span class="pln" style="color: rgb(0, 0, 0);">
    </span><span class="typ" style="color: rgb(102, 0, 102);">CCLabelTTF</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="pun" style="color: rgb(102, 102, 0);">*</span><span class="pln" style="color: rgb(0, 0, 0);">label </span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="typ" style="color: rgb(102, 0, 102);">CCLabelTTF</span><span class="pun" style="color: rgb(102, 102, 0);">::</span><span class="pln" style="color: rgb(0, 0, 0);">create</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="str" style="color: rgb(0, 136, 0);">"callback 3 called"</span><span class="pun" style="color: rgb(102, 102, 0);">,</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="str" style="color: rgb(0, 136, 0);">"Marker Felt"</span><span class="pun" style="color: rgb(102, 102, 0);">,</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="lit" style="color: rgb(0, 102, 102);">16</span><span class="pun" style="color: rgb(102, 102, 0);">);</span><span class="pln" style="color: rgb(0, 0, 0);">
    label</span><span class="pun" style="color: rgb(102, 102, 0);">-></span><span class="pln" style="color: rgb(0, 0, 0);">setPosition</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="pln" style="color: rgb(0, 0, 0);">ccp</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="pln" style="color: rgb(0, 0, 0);"> s</span><span class="pun" style="color: rgb(102, 102, 0);">.</span><span class="pln" style="color: rgb(0, 0, 0);">width</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="lit" style="color: rgb(0, 102, 102);">4</span><span class="pun" style="color: rgb(102, 102, 0);">*</span><span class="lit" style="color: rgb(0, 102, 102);">3</span><span class="pun" style="color: rgb(102, 102, 0);">,</span><span class="pln" style="color: rgb(0, 0, 0);">s</span><span class="pun" style="color: rgb(102, 102, 0);">.</span><span class="pln" style="color: rgb(0, 0, 0);">height</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="lit" style="color: rgb(0, 102, 102);">2</span><span class="pun" style="color: rgb(102, 102, 0);">));</span><span class="pln" style="color: rgb(0, 0, 0);">
    addChild</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="pln" style="color: rgb(0, 0, 0);">label</span><span class="pun" style="color: rgb(102, 102, 0);">);</span><span class="pln" style="color: rgb(0, 0, 0);">
</span><span class="pun" style="color: rgb(102, 102, 0);">}</span>

發佈了22 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章