本文主要是介绍cocos2d-x 4.0 学习之路(十七)第一个小游戏--忍者来袭--升级改造,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
还记得我们的第一个小游戏–忍者来袭吗?
那个有点太Easy了,敌人对主角一点威胁都没有。那我们今天就改造一下,让敌人也会发子弹,而且一旦敌人的子弹或者敌人碰到主角的话,就Game Over.
首先,我们想一下如何设计,让敌人也会发飞镖?我想要的效果是敌人在移动的过程中,随机位置发射一枚飞镖。
我最开始的想法是,在addMonster()中,做一个敌人的飞镖精灵,它的起始点是敌人随机移动的位置,终点当然是player的位置。但是,Moster是一直在运动的,如何设定飞镖的起始点让我犯了愁。后来我意识到,飞镖是敌人发出来了,那么可以把发射飞镖作为monster的一个动作,加到动作序列(Sequence)里面啊。于是,用CallFunc写个回调函数shootStar,在shootStar里面写发射飞镖,这样运行起来符合预期而且代码也很容易理解。
那么修改代码思路如下:原来monster只有一个MoveTo的Action,那我们改成MoveTo -> shootStar -> MoveTo这样的动作序列不就结了。而且前半段MoveTo的距离是随机产生的。于是代码如下:
// 2 Let monster runint maxX = selfContentSize.width;int randomX = maxX - (rand() % (int)(maxX / 2));float monsterSpeed = 160;float randomDuration2 = (float)randomX / monsterSpeed;float randomDuration1 = (float)(maxX - randomX) / monsterSpeed;auto move1 = MoveTo::create(randomDuration1, Vec2(randomX, randomY));auto move2 = MoveTo::create(randomDuration2, Vec2(-monsterContentSize.width / 2, randomY));// 定义消除的Object。怪物移出屏幕后被消除,释放资源。auto actionRemove = RemoveSelf::create();// Shoot Enemy's Projectileauto shootStar = CallFunc::create([=]
这篇关于cocos2d-x 4.0 学习之路(十七)第一个小游戏--忍者来袭--升级改造的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!