在談遊戲動作類之前,先談談遊戲引擎,很久以前沒有現在這些這麼好用的遊戲引擎,那時候的遊戲開發者,每次開發一款遊戲,都需要從底層用C++開始寫,這必然費時費力,而且C++也不是那麼好學的.因爲這個迫切的需求,所以後面就有了遊戲引擎來避免每次"重新發明輪子",讓開發者集中主要的精力用於業務邏輯開發,好用的腳本的語言,如lua,js,自然必不可少.遊戲引擎負責和CPU,GPU交互,那誰來和遊戲引擎交互,lua虛擬機或者javaScript虛擬機.
通俗的講,就是我們在做業務邏輯開發的過程中,調用lua虛擬機提供的接口,間接調用引擎的API,實現我們想要的效果.
迴歸正題,首先看看策劃給我提的呼吸燈需求
那我實現的效果是怎麼樣的呢
通過視頻我們可以看到那個加號的表現是淡進淡出,原理就是在改變透明度和顏色
那代碼是如何實現的呢
首先聲明一個動態數組arr,然後加入兩個動作元素,一個是淡出,一個是淡入,聲明一個重複執行的CCRepeatForever方法,用runAction來執行,就可以製作出呼吸燈的效果了
我剛開始是用CCFadeOut和CCFadeIn來弄的,但是沒有成功,自己百度是找不到dbUIFadeOut和dbUIFadeIn的,因爲這兩個是當前遊戲的lua虛擬機封裝的接口,CCFadeOut和CCFadeIn是引擎提供的API,這兩者不一定是完全統一,具體的項目要具體看.
對於CCArray有幾點要注意:
a.我們創建一個CCArray後如果不是立刻使用的話一定要調用retain,增加引用計數,不然會被自動釋放!
這裏就涉及到了C++中Cocos2d-x內存管理技術,我們買手機的時候,肯定會發現4g,6g,8g內存的手機價位是不一樣的,所以的手機的內存是很珍貴的,作爲開發者,我們要謹慎利用內存,並且去避免內存泄漏.
Cocos2d-x有兩種管理內存的技術:
一種是引用計數,通過給每個對象維護一個引用計數器,調用一次對對象,就加1,失去一次就減1,當引用計數爲0時,自動觸發對象的回收釋放.
另一種是autorelease,就是把對象加入自動回收池(CCAutore-leasePool),每一幀結束釋放一次回收池,每幀開始前創建一個新的回收池.
b.刪除CCArray中的元素時內部調用一次release,不然可能會內存泄露!
那我們繼續總結一下游戲中使用的那些動作(Action)
1.CCFlace:將節點放置到某個指定位置,相當於setPosition()
2.CCFlipX和CCFlipY:把精靈沿X軸或者Y軸反向顯示,與設置精靈的FlipX和FlipY屬性相同
3.CCShow和CCHide:用於顯示和隱藏節點,與設置節點的Visible屬性一樣
4.CCCallFunc系列:回調
CCCallFunc創建一個回調動作(調用不帶參數的回調方法)
CCCallFuncN創建一個回調動作(調用 帶一個參數的回調方法)
CCCallFuncND創建一個回調動作(調用 帶兩個參數的回調方法)
5.CCMoveTo和CCMoveBy:節點直線運動
6.CCJumpTo和CCJumpBy:使節點以一定軌跡跳躍到指定位置
7.CCBezierTo和CCBezierBy:使做曲線運動
8.CCScaleTo和CCScaleBy:產生所發效果,使節點縮放係數隨時間線性變化
9.CCRotateTo和CCRotateBy:產生旋轉效果,正方向爲順時針
10.CCFadeIn和CCFadeOut:產生淡入淡出的效果
11.CCFadeTo:設置一段時間內透明度的變化效果
12.CCTintTo和CCTintBy:設置色調變化
13.CCBlink:使目標節點閃爍
14.CCAnimation:播放幀動畫
15.CCRepeat/CCRepeatForever:重複
16.CCSpawn:並列,動作同時執行
17.CCSequence:序列,一系列動作按順序執行
18.CCDelayTime:延時
19.CCSpeed:線性改變某個動作的速度,可以實現成倍地快放和慢放功能
20.CCActionEase:按比列改變目標動作的速度,可以實現由快到慢,速度隨時間改變的變速運動