cocos2d-x游戏实例(19)-纵版射击游戏(6)
小滿(bill man)個人原創,歡迎轉載,轉載請注明地址,小滿(bill man)的專欄地址http://blog.csdn.net/bill_man
上一篇的實例中,縱版射擊游戲中加入了敵人對子彈的碰撞和爆炸特效,本篇內容將給敵人加入貝塞爾曲線的運動軌跡并且敵人會“源源不斷”的出現。首先還是看一下效果圖:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
其實從簡單的圖片上看不出我的敵人運動軌跡上的改變,這里我采用了CCAction中的貝塞爾曲線運動軌跡;貝塞爾曲線,又稱貝慈曲線或貝濟埃曲線,是應用于二維圖形應用程序的數學曲線。?在我看起來他的運動曲線比較像一個周期的正弦或余弦曲線(就是表現上比較像)。
首先來看初始化敵人的代碼:
這里首先定義一個ccBezierConfig變量bezier并初始化它,首先是定義它的兩個“控制點”,這兩個控制點和我們的敵機走出的軌跡的“波峰”和“波谷”有關,程序中需要的這個貝塞爾曲線就像是正弦曲線旋轉90度一樣,所以我將controlPoint_1的橫坐標向左移動,它的波谷就會向左移,相應的,我們把controlPoint_2向右移動,那么它的波峰會向右移動,然后定義整個貝塞爾曲線的終點。之后我們使用ccBezierConfig定義一個CCBezierTo,CCBezierTo是貝塞爾到達指定的點,而CCBezierBy則是貝塞爾曲線到達指定距離。也就是說如果你定義的是CCBezierBy,那么之前定義的控制點和終點都是與當前點的差值,也就是距離。第一個參數是時間,第二個參數就是我們之前定義的ccBezierConfig。
然后就是敵人死亡或者出屏之后的“重生”,我們首先為GameEnemy類加入一個restart函數,這個函數會在敵人重生時調用:
重新定義敵人的重生位置,將敵人變為可顯示,然后為敵人加入貝塞爾曲線的邏輯。
在把敵人設置為死亡時,我們也要多做一些操作,來看setDead函數:
我們要停掉當前的動作,將主角設置為不可見。然后我們在主場景類中調用schedule(schedule_selector(MapScene::enemyrestart),?2.0f);讓在2.0s后調用enemyrestart
函數,在函數中調用敵人的restart函數,讓敵人“重生”。
另外,我們在敵人的邏輯函數中判斷敵人是否已經出屏,若出屏則停掉所有動作,并調用敵人的“重生”函數restart。這樣敵人就會“源源不斷”的出現了。
如有錯誤之處,希望大家多多指正
下一篇繼續縱版射擊游戲實例
總結
以上是生活随笔為你收集整理的cocos2d-x游戏实例(19)-纵版射击游戏(6)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cocos2d-x游戏实例(18)-纵版
- 下一篇: cocos2d-x游戏实例(20)-纵版