小满(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。这样敌人就会“源源不断”的出现了。
如有错误之处,希望大家多多指正
下一篇继续纵版射击游戏实例
原文链接:https://www.f2er.com/cocos2dx/342252.html