有一段时间没更新博客了,最近一直在写一个小游戏,游戏在今天终于搞好了,又可以开始写写博客,打打dota的悠闲的日子了哈。
看了十几天cocos2d-x后,也依照官网的例子写了个打飞机的小游戏并自己扩展了一下,但是还是不够,对很多学习的东西都是很快忘记,感觉还是需要动手实践,于是自己就花了七天时间,整整的,写了这个游戏《七十一海·梦》,这也是我作为独立个人开发者的第一款游戏,哈哈。其实游戏内容挺简单,但是把自己之前看到的知识都使用了一遍,并且自己又摸索了一些新东西。
游戏截图
欢迎大家下载试玩哈哈,做游戏的人最大的乐趣就是有人在玩游戏哈哈。
腾讯应用宝
百度网盘
如果您想表达一下对我的支持或鼓励,请点击一下游戏里上面的广告哈哈
插的广告大多是百度QQ什么的APP推荐吧,我看到的都是用户量比较大的,大家有需要的可以通过这里下载
游戏问题
在开发的过程中,自己遇到了挺多问题,也学到了很多东西,在这里总结一下,也希望可以帮助到初学的朋友们。
1.cygwin编译出错
移植到Android我使用cygwin编译的,发现Android对C++语法要求还是挺严格的,有一点不合适的地方就会报错。比如我有次在CCharacter类的头文件里定义
void CCharacter::setXX()
这在cygwin编译的时候就会报错
必须是void setXX()
还有有可变参数的也可能会出问题,我使用了类似于CCString::createWithFormat,它跟sprintf类似,一般像(”abc%d”,i)这样用,但是如果不含有可变参数,(”abc”)这样看起来是没问题的,在win32上确实也是正常的,但是编译的过程中就会报错,和上面报的是一样的原因。
这个错误其实挺容易发现,因为cygwin报错会定位到相应行,自己看下就会发现不同点。
2.Android闪退
我之前从来没有写过Android程序,遇到Android在特定的场景闪退一下子感觉就很无力,不知道该怎么办。上网查了下,很多人说游戏闪退可能是不兼容或者是内存占用太高,我想了下觉得有可能,因为我的游戏使用资源太多,为了保证流畅,在刚开始就全部加载了,在巅峰期大概会占用80M内存。但是我尝试着把大文件都换成小地图后仍然发生闪退现象,这个纠结了一上午都没搞定,一开始总是觉得是自己代码写的有问题,怀疑是什么指针神马的,但是又不知道为什么在Win32上行,Android上不行。又搞不清Win32和Android的区别,就只好先放下了,继续往后做。在一次添加新资源的时候偶然发现自己使用了一张图片名称为BtnNormal.png,但是程序中写的是btnNormal.png,改成相同的就正常了,也就是说Windows不区分文件名称的大小写,而Android是要区分的,这一点特别要注意。同时我也知道了如果缺少资源文件的话,Android是会闪退的。
3.TiledMap Editor
瓷砖地图编辑器是个好东西,一方面可以用很少的图元拼接起大地图,节省内存,另外也可以很方便的用来进行障碍物判定。但是有时候我用地图编辑器编辑好地图之后,在程序中使用会使程序崩溃,在调试状态下,会输出错误信息,具体的已经忘了,好像是说一个格子贴了好几张瓷砖图,原因是在同一图层中使用了多个纹理,所以如果需要使用多张纹理的话,可以为每张纹理建立一个图层,或者把他们拼接在一张图里。另外,利用Tiled Map可以实现层次效果哦,就是人物在背景的上面行走,但是可以被树木遮挡。
新东西
1.TexturePackerGUI
这个是把纹理拼接起来的工具,可以免费试用一星期,等用完了之后就需要购买licence或者用选择免费版。但是免费版特别坑爹,高级的算法不可以使用,而且生成的图上面会多出一些乱七八糟的东西,根本就不能用!不过作者是个大好人,在官网下方有链接可以请求licence,我中午11点给他发的邮件,下午5点就收到了他发来的licence。请求的条件就是有自己的博客。
2.Visual Leak Detector
这个真心是个好东西,之前因为自己写程序少,内存泄露什么的自己注意下就可以了。但是cocos2d-x的内存管理自己还是晕晕乎乎的,总是会有内存泄露,这个工具就可以帮助我们检测是否有内存泄露,并且会输出内存申请的情况,会指出有多少处内存泄露,泄露的容量等等,并且可以定位到泄露内存申请的地方,非常好,而且安装简单,使用极其方便!
3.BMFont
在程序中要是想使用自定义的字体,可以直接加入字体文件,但是那样太大了,我们在程序中可能只使用到很少的字,那就可以使用BMFont了。使用很方便,但是我在用的时候出了问题,显示不出来中文,英文正常,但是到了晚上又正常了,我也不知道我动了哪里,感觉上是没走什么的,囧。。。
4.中文输出
可以使用编码转换函数什么的解决中文乱码的问题,也可以通过解析xml文件来输出中文,比较简单,百度一下即是。
5.插入广告
这次做这个东西我打算把它上线,体验一遍完整的流程,为以后做下准备,所以我打算也插入广告。我是使用的芒果聚合,它是一个广告聚合平台,可以选择好几家的广告平台按比例展示广告,虽然我最后也只是用了有米的广告。使用方法在芒果的文档里说的非常清楚,这也是我用它的一个重要原因,而且使用也超级简单,第一次做的朋友建议使用它们练练手,要做一定要按照官方文档里的一步一步来,否则很可能会能正常显示广告,但是不会统计点击数。
这个游戏本来自己打算写成两部分的,陆地篇和海洋篇,但是自己一个人写了几天之后实在是心力交瘁,累的不行了都,又要写程序,又要找图P图,还要写剧情策划,还有蛋疼的数值调整,所以只写了陆地篇,就叫《七十一海·梦》,等下次再写海洋篇,叫《七十一海·路》好了,哈哈。