嗨!大家好,我是代码华。今天继续上一章,我们来讲讲随机宇宙的生成。
本来这款游戏的场景的定位是像现代空战3d那款游戏一样的,限制在一个天空盒中,但发现cocos没有天空盒。。。看来要用的话,还要自个用opengl实现了,如果后面有用到的话,我另开一章讲讲天空盒。
好吧,回归正题,来划分一下宇宙中应该有的元素,有陨石、星球、星系、彗星、黑洞、空间碎片,描述如下图:

将上面的元素进行分类,其中陨石、星球、空间碎片可以归为一类,因为都是3d精灵对象
剩下的我们可以用粒子特效来实现。
上述两类,一类拿一个出来讲,因为都是举一反三的事。
3d精灵的就讲星球的随机生成,一个原因是球类模型(c3b…)比较好搞得到。
模型载入不再累述,依旧是从数据库中获得模型,下面处理星球的方法由dark哥给。
对于星球来说其模型只有一个,变得是纹理图片,这时就要用随机函数来随机产生,但是就算是采用了随机纹理,运行的时候还是 会发现出现相同星球的概率十分的大,这时我们就要再加入随机大小与随机颜色减小出现相同星球的概率。
加上几十个星球后虽然会让游戏世界变的丰富多彩,但是星球还是静态的,我们生存的宇宙中,星球都是有自转与工转,所以接下来我们要用到RotateBy这个动作类,制定随机的旋转中心,让它RepeatForever下去,这样子之后,整个游戏世界就动起来了。这里我将星球的大小定的很小,以便观察效果。
对于粒子特效,其实网上讲的很多了,这里补充一下粒子的3d效果(也算不上吧。。。)
,查看引擎的源码会发现粒子系统也是Node的子类,所以它的3d坐标可以用setPosition3D(v)来设置。

这里给出星云的粒子特效代码
ParticleSystem* ps = ParticleGalaxy::create();
ps->setTexture(粒子图片);
ps->setPosition3D(v);
layer->addChild(ps);
为了显示出粒子的3D效果,这时就要设置粒子所在层的z轴坐标为偏离飞机一定距离的位置
layer->setPositionZ(z);
本章的程序示例图如下:
本章机就讲到这了,下一章我将讲讲操控的处理。

顶楼主 期待后续~~~该系列已经被推荐到Cocos引擎中文官网啦~