《StopGMO》,就是我第一篇博文中提到的《兔子大战转基因(蔬菜)》。它原本是个flash游戏(http://wanga.me/25523)。我克隆(山寨)它是因为我在学cocos2d-x的时候刚好玩了这个游戏,并且觉得比较简单,并且我没有美工,所以就决定克隆一下它。我的程序里面用到的图片资源基本来源于原来falsh版本的StopGMO,这些资源仅供学习和娱乐,希望没有侵犯原来游戏的版权。
以下链接是代码及资源的链接(其中包含一个编译为android可运行程序的apk安装包(应用android2.2的api编译)):
http://www.oschina.net/code/snippet_115087_17123
暂时只添加了一种怪物--胡萝卜。如果要添加新的怪物,可以继承代码中的Enemy类来添加新的怪物类。
目前的主角也只能使用一种武器--锄头。如果要添加新的武器,可以继承代码中的Weapon类来添加新的武器类。
现在的主角是处于无敌状态的,因为我在代码中进行了攻击的检测,但是并没有调用玩家的hurt()方法。
/////////////////////////////////////////////////////////////////////
关于程序的结构:
GameRoot作为一个静态的类,负责图片资源的初始化、场景的替换等。
SceneGame作为一个游戏的场景类。它包含了HudLayer跟GameLayer。其中HudLayer是负责接受并解析用户输入的,而GameLayer是负责游戏主要事件逻辑控制的。而SceneGame的作用就是将HudLayer解析的控制输入传输到GameLayer里。
HudLayer负责接受和解析用户输入。包括虚拟手柄和按键以及菜单按钮等。(虚拟手柄我用了一个现有的库:Sneaky library)。
GameLayer负责游戏事件的逻辑控制。它每一帧都调用gameLogic方法。该方法中处理包括inputUpdate();spawnUpdate();bulletUpdate();enemyUpdate();viewpointUpdate();等。
最后得说一下,我用的cocos2d-x的版本是cocos2d-2.1beta3-x-2.1.0。其他版本的库在编译时,源文件可能需要有稍许修改。
/////////////////////////////////////////////////////////////////////
将来的改进:
1.最近我在看一本书:《游戏编程精粹1》。里面提到了一个思想:数据驱动。我感觉我的程序是可以应用这个思想的。Enemy不再派生出Carrot,Corn等怪物类。因为Carrot,Corn等怪物的行为其实是完全一样的,只是移动速度、攻击力、贴图等不同。所以其实可以编写一个XML文件来保存速度、攻击力、贴图名称等数据。在Enemy实例化的时候提取XML文件的数据即可生成类似Carrot,Corn等不同种的怪物了。Weapon也是可以应用这种思想的。
2.尽量少用new跟delete。Enemy或者Bullet等在设置为die以后都不是直接delete,而是为其添加一个布尔量IsUsed,在die后设置为false。表示这个实例已经死亡了。在下一次需要new的时候,我们不用new,而是修改那些IsUsed == false的实例的速度、攻击力等参数,模拟一次new。
3.将子弹变成一个CCSprite。子弹不再是隐形的子弹,而是具有动画的,并且可以设置特定轨迹的。就像合金弹头里面的一样。
4.还在想。。。
/////////////////////////////////////////////////////////////////////
工作进度:
进度可能会很慢,因为我现在正在搞毕业设计。并且我也不怎么想搞这个游戏了,我想搞另外一个类似涂鸦跳跃的刷分游戏。