【不是教程的教程】第一弹——小乐教你写简易版雷电(2.2.3版本)

头回写教程这玩意,真不知道要写些什么,所以主要就是共享下我的代码,和一些重要功能的讲解吧,各位如果有啥不懂的可以回帖提问哟。

其实这个demo(为何叫demo呢,因为我真不敢称这个为游戏呀)是我初学cocos2d-x两周的时候写的,所以可能写的不是很好(好吧,其实现在写的东西也不好),当初主要还是靠着度娘和TestCpp学的,所以在此还是要强调一下TestCpp的重要性,要好好把它看一遍哟,以后你想实现什么功能就可以去翻看了。

好了,言归正传,还是介绍下我写的这个demo了,在此先华丽丽的献上几张截图来养养眼了。


接下来讲讲这个demo的功能了,三个关卡,每个关卡一种不同的boss和三种相同的小兵,小兵不同关卡子弹数目不一样,移动路径是定死的(为啥要定死呢,因为当初年少天真的我想要像雷电那样控制每波敌人的种类数量和路径,结果你懂了,我失败了,写不出来呀有木有,就成了这样了)。五种道具,导弹(全屏秒杀),宝石(红色加子弹个数,蓝色加保护盾,紫色回血,宝石每隔一段时间变个颜色 ),金币(增加分数,每一百分加1生命)。好吧,我知道你们想知道的是怎么写,那我就不罗嗦了,首先来看看所有的头文件。

LoadLogo 没啥用,就是运行游戏的时候最先显示一张图而已,很多游戏就是显示一堆logo

CCRadioMenu就是个多选一按钮控件,网上找到,选择关卡的时候用

GameEvent用来管理不同场景切换播放什么样的效果,定义了当前游戏关卡这个全局变量

GameLevel就是选择关卡的界面了

GameMenu游戏菜单,开始、退出游戏

GameMap游戏背景,根据不同关卡显示不同图片

GameMessage游戏信息,就是顶上的那个显示HP、分数、生命什么的

GameOver游戏失败界面

Effect 创建金币和爆炸动画的缓存,以后创建动画就不用重新创建了

MoveTrackArray移动轨迹的类,因为我的轨迹是定死的

UnitSprite单元类,道具、子弹和飞机共有的属性

BulletSprite子弹类,继承单元类,子弹的逻辑

ItemSprite道具类,继承单元类,道具的逻辑

RoleSprite角色类,继承单元类,主要是玩家和敌人共有的东西(飞行动画 受击 爆炸之类的)

PlayerSprite玩家类,继承角色类,玩家的逻辑

EnemySprite敌人类,继承角色类,敌人的逻辑

BossSprite敌人BOSS类,继承敌人类,敌人BOSS的逻辑

GameManger游戏管理类,创建所有游戏所需的对象

BulletManager子弹管理类,创建和删除所有子弹

EnemyManager敌人管理类,创建和删除所有敌人

ItemManager 道具管理类,创建和删除所有道具
首先说说菜单的效果,陨石掉落不用说就是CCParticleSun的粒子效果,开个定时器schedule,让它一直从左上角随机一个地方执行移动。星星闪烁就是CCFadeOut渐变透明的动作及其reverse(动画的反转),通过CCSequence序列动作和CCRepeatForever永久播放。

接下来说说选择关卡界面,中间那个特性也是粒子效果,CCParticleSystemQuad,在TestCpp里看着还不错就拿过来的了。关卡的选择效果也是CCParticleSun,设置了下StartSize,就是这个样子了。你可能会问我为啥不直接设置倍数呢,你可以试下,然后你就会惊奇的发现它的消失点就会偏移掉了,至于为什么,我也不知道。

然后要说啥呢,说说敌人子弹的圆形扩散移动轨迹吧,其实很简单,就是根据圆形的极坐标方程(x = rcos(θ),y = rsin(θ))根据半径和两个子弹的间隔角度,不断增大半径就成了。假设三个子弹,子弹间隔20度,三个子弹θ分别为250度、270度、290度,因为270度是正下方嘛。

敌人的移动轨迹,就是CCPointArray存了移动的点,然后通过CCCardinalSplineBy来进行移动,详细使用可以看看TestCpp。

碰撞检查,都是在道具类呀子弹类呀敌人类呀里面开启个update,通过boundingBox来检测与其他物体的碰撞。这里就涉及到不同对象之间的数据的交互,我是在GameManager里将所要进行数据交互的类都设为静态的,然后通过函数获取该对象地址。

切换下一关,你会惊奇的发现我是在GameManager里面把一堆对象删了重新创建的,因为我当初用replaceScene切换自身的场景,会导致数据也跟着清掉了,所以就这么干了。那时的我还年少无知,不知道创建个单例的数据管理类来保存数据呀。

道具的随机移动,就是开个定时器,设置一个移动点进行移动,然后一直改变移动点。

也许你发现了,我的对象都是在其管理类的update里进行删除,你可能在思考我这么写有什么用途,其实,我那时压根就不知道removeFromParent啊,也不知道CCRemoveSelf啊。还有为啥我的血条要用setTextureRect呢,因为我不认识CCProgressTimer啊!

使用导弹的震屏效果,其实就是用CCJumpBy而已啦,看着效果还不错呢。

还有,说说对象的属性设置,其实就是传个type变量,然后通过switch case判断type的值来设置不同的属性值。

如果你想问为何这些类名字起名叫xxxSprite却是继承CCLayer而不是继承CCSprite呢,原因就是我那时压根不会给CCSprite注册触摸事件啊,所以直接用CCLayer来开启触摸了。

不知道该写啥了,不擅长写教程啊喂,还是比较擅长回答问题,其实这个demo没多难,你们可以去好好看看代码,有问题可以回帖提问,我会回答的。

代码下载:

简易雷电源代码by孤獨の快樂.rar (5294 KB)

2赞

这是手把手的节奏啊,论坛的妹子们有福了!!!:875::875::875:

— Begin quote from ____

引用第1楼偶尔e网事于2014-04-04 22:55发表的 :
这是手把手的节奏啊,论坛的妹子们有福了!!!:875: :875: :875: http://www.cocoachina.com/bbs/job.php?action=topost&tid=196933&pid=919616

— End quote

论坛有妹纸吗?别逗我了

支持楼主,学习学习

好东西 要顶的!!!!!

好东西,谢谢楼主分享:14:

支持小乐 这个满商业级了 希望大家能回复一下 自己看有多少下载 多少回复
希望我们社区能健康发展

很好,谢谢!

感谢分享!

学习一下,谢谢分享!

学习下, ths

好东西 要顶的

感谢分享啊

学习一下,谢谢分享!

资源下载不下来, 请检查下 ,谢谢~~

— Begin quote from ____

引用第14楼风格人于2014-04-06 16:41发表的 回 楼主(孤独の快乐) 的帖子 :
资源下载不下来, 请检查下 ,谢谢~~ http://www.cocoachina.com/bbs/job.php?action=topost&tid=196933&pid=920045

— End quote

刚试了下,下载成功,没问题

感谢楼主分享,先看看

恩~:6:晕死。我用迅雷和浏览器都下载不了。。。
方便给发邮箱吗,谢谢 企鹅-380907837

:2: GOOD JOB

这个还是相当给力的哦