这几天一直都在做一个捕鱼游戏Demo,大概花掉了我快一个礼拜的时间。游戏主体是使用的cocos2d-x高级开发教程里面提供的小部分框架基本功能。然后自己加入所有的UI元素和玩法。变成了一个体验不错的捕鱼游戏。现把这几天遇到的所有情况总结如下:

  1.捕捉到鱼时发现,鱼的移动动作没有移除,但是实际却进行了鱼对象的移除操作:

    解决:首先考虑是不是自己没有移除,存储鱼的数组会不会太小,而导致鱼对象混乱的情况。 数组加大无效果。考虑是不是由于引用计数的原因,被其他对象引用,所以导致移除不了,通过进行打引用计数日志发现,并非此情况,因为只有部分鱼不能移除继续游动的动画,而所有的引用计数却都相等。在“这不科学”的理论下,最终想到了可能是自己进行鱼动画播放的时候,有重叠。所以本来已经移除掉了鱼对象,但是由于重叠会导致鱼对象并没有被移除的假象。坑的我调试了一个下午。这是最大的bug.

  2.由于给鱼存放的数组CCArray没有对已经移除屏幕的鱼对象进行清理,导致数组线性增大,后来修改,保证数组维持在5到30之间。也即屏幕中维持相对应的鱼的数量。

  3.移植到安卓平台,登陆进去发现闪退,后来发现是由于我没有在进度条下进行动画缓存加载,而是直接写在进度条执行完切换场景的时候。直接就给跪了。

  4.安卓登陆进去发现刚开始只有部分有声音,有些后来才有,知道是自己没有对声音预加载完全。

  5.遇到了随机数不随机的情况,发现我使用随机数的时候,不管是CCRAND_0_1,rand,srand 只要时间点大概相差一秒以内,每次随机出来的都是固定的一个数。网上找资料发现有一个函数可以不由时间限制,但是却只能用在ipone开发里面吧。  

  6.音效和音乐的bug,虽然自己设置了音乐和音效不可播放,但是只要我使用playbackgroundmusic,effect就又会重启音乐和音效。所以在每一个需要play的地方都提前判断当前是否设置为可以播放状态。

  7.使用UserDefault.xml文件的时候,第一次是默认什么也没有的,而第二次运行的话都把第一次的数据保存了,所以这里需要进行一次分支判断,当前是否为第一次使用。可以在数据里面设置一个key,只有能读到key则证明不是第一次了。否则没读到默认返回FALSE。

  8.鱼和网的刚体是非常容易碰撞的,但是抓鱼却不一定每次都能抓到,而且还有根据鱼的大小和网的大小来计算抓鱼概率,所以这里想到一种办法,将鱼由小到大由0.5趋近于0,网由小到大从0趋近于0.5然后再两者相加得到抓鱼概率,但是发现也还是比较容易抓,所以再进行一次随   机数判断,就可以通过这个随机数来设置抓鱼的难易程度了。

  9当鱼被抓到的时候要执行各种动画:鱼被抓住时的动画,出现金币并移动到炮台位置的合并动画这里要用到CCSpawn,显示加多少金币的动画。

  10.切记当设置参数到 CCUserDefault时,一定要记得调用flush,不然数据不会保存,最好每次set完就进行保存。游戏退出时肯定需要保存好,这里是个大坑。

  11.最后是移植到安卓的天坑,首先自己使用书上的cocos2d-x的模板,就只能用相对于的版本,发现时2.0.3的,都是两年前发布的版本了,网上都搜半天,最后在一个类似的官方网站搜到了,却发现下载不了。是网址上有google字样么,我大天朝。木有办法,看移植到2.1.4可行不,发现各种改,木有办法,放弃。那就向下找,发现下载了一个cocos2d-1.0.1-x-0.13.0-beta版本,结果也是报错,感觉会不成功,还是放弃。最后只能下载2.0.3版本,木得办法,但是奇迹发生了。我把网址放到QQ上发给同学时,却发现可以在会话框里面显示下载。企鹅真是我的恩人啊。终于把2.0.3版本下载,发现编译成安卓,还要使用cygwin,幸好我之前有编译过,ndk,sdk,adt都妥妥的配置好了,而三次我用3.0版本的编译,只需要使用python文件,轻松搞定,而这次需要各种改参数和配置。最终花了一天时间,终于生成了.o文件,但是但我编译到安卓上生成apk之后妥妥的给我闪退了。orz 因为之前使用的捕鱼框架自带的一些文件,发现很多都缺失了。导致了这个问题。后面直接使用2.0.3版本的已编译好了的HelloCpp进行更改,添加Classes和Resource文件。最后生成apk文件,这里又有一个坑,但我生成好时,我就想在ADT里面编译查看,发现总是报:Not Such file or directory (2) 。以为是自己代码的问题,各种看,后来发现直接把apk拷贝到真机,居然能运行。啊,又一大坑。

  好了,到这里捕鱼项目就弄好了,虽然各种曲折,但是能编译到安卓上并运行,还是很happy的,毕竟是2.0.3版本的,早知道就写的时候把框架搬到3.0+的版本上,移植就快多了。详细的移植教程我就不写了, 网上已经有很多教程了。比如这个:cocos2dx环境配置及打包apk

  源码的话,过段时间再贴上来吧。Demo是希望面试的时候能够用上,(*^__^*) 嘻嘻……  最后贴上我的 游戏界面吧~

  UI都是自己网上找的,我不会告诉你可以解压别人发布的apk文件获取一些UI的 :)

 

cocos2d-x 欢乐捕鱼游戏总结的更多相关文章

  1. 。。。欢乐捕鱼App WeX5 连接打包代理服务失败,请检查代理服务地址是否正确。。。

    今天学习了WeX5,第一次使用,使用它打包一个Web App 欢乐捕鱼的时候,在最终打包生成Native App的时候突然报错了,说:"连接打包代理服务失败,请检查代理服务地址是否正确&qu ...

  2. 课程设计个人报告——基于ARM实验箱的捕鱼游戏的设计与实现

    课程设计个人报告--基于ARM实验箱的捕鱼游戏的设计与实现 一.个人贡献 参与课设题目讨论及部分过程 资料收集 负责代码调试 捕鱼游戏相应功能的实现 实验环境 Eclipse软件开发环境: ARM实验 ...

  3. 课程设计小组报告——基于ARM实验箱的捕鱼游戏的设计与实现

    课程设计小组报告--基于ARM实验箱的捕鱼游戏的设计与实现 一.任务简介 1.1 任务内容 捕鱼游戏这个项目是一个娱乐性的游戏开发,该游戏可以给人们带来娱乐的同时还可以给人感官上的享受,所以很受人们的 ...

  4. WeX5入门之欢乐捕鱼打包

    一.下载欢乐捕鱼的素材包 https://files.cnblogs.com/files/wordblog/%E7%B4%A0%E6%9D%90.zip 二.把欢乐捕鱼素材放入项目中 并启动tomca ...

  5. 程序员利用javascript代码开发捕鱼游戏

    面试这么成功,全靠这个捕鱼游戏来完成,看的就是里面javascript代码,所以说前端最重要的还是javascript这一关,不管是现在HTML5时代还是以后如何,javascript永远不会落后,大 ...

  6. 这个捕鱼游戏制作的真心不错,原创音乐,AV动作,让人流连忘返啊呵呵

     女生看完这篇文章后果断地命令男朋友打开电脑和手机 2014-10-10 茶娱饭后 本人纯屌丝宅男一名.专注游戏十年有余,玩过无数大大小小的游戏,对捕鱼游戏情有独钟.我不想说在捕鱼游戏方面有多专业 ...

  7. [cocos2d demo]认字小游戏

    2013.9.5更新第二版 游戏分三个场景,分别为主场景,加载场景以及游戏场景,游戏场景分为背景层,逻辑层以及UI层 1.背景:旋转太阳,移动波浪,漂浮的云 2.UI层:随机生成字附带在帆船上移动,当 ...

  8. Cocos2D-html5 公布游戏js编译为jsc

    搞了老半天.这么回事啊.工具都在tools中. jsb模式下是通过打包spidermonkey来执行JS代码的. JS文件都在assets目录中.我们都知道assets目录.打包后的结果,将apk包解 ...

  9. 网狐6603 cocos2dx 棋牌、捕鱼、休闲类游戏《李逵捕鱼》手机端完整源码分析及分享

    该资源说明: cocos2d 棋牌.捕鱼.休闲类游戏<李逵捕鱼>手机端完整源码,网狐6603配套手机版源码,可以选桌子,适合新手学习参考,小编已亲测试,绝对完整可编译手机端,下载后将文件考 ...

随机推荐

  1. GDAL书籍

    GDAL的书籍经过快两年的编写修改,终于出版发行了,有需要的同学可以到下面的网址进行购买. 购买地址: 亚马逊:http://www.amazon.cn/GDAL%E6%BA%90%E7%A0%81% ...

  2. (NO.00003)iOS游戏简单的机器人投射游戏成形记(十五)

    在Xcode中打开Robot.h文件添加如下2个方法: -(void)moveArm:(MoveDirection)direction; -(void)armShoot; 在Robot.m中实现这2个 ...

  3. C语言之任意进制的转换

    我们都知道转换进制是一个让人比较头疼的事情,下面我的代码不是最好的,也就仅仅是一个思路而已,至少我认为使用栈来进行进制转换是比较合适的一种方法,好了,不多叙述了. #include<stdio. ...

  4. 敏捷测试(5)--基于story的敏捷基础知识

    基于story的敏捷基础知识----需求管理(二) (1)定期发布 定期发布上线,把整个项目划分为一个个迭代,每个迭代时间大小固定(基本固定),迭代结束时上线交付一次. (2)迭代规划 迭代规划相当于 ...

  5. Unity热更新之C#反射动态获取类属性及方法

    如果我们要为发布出去的游戏更新一些功能,但又不想让用户重新下载整个游戏包,只让他下载我们更新的资源包,用assetBundle打包资源的方式是可以的,但其中有个最大的例外,那就是脚本. 虽然asset ...

  6. Ext JS 5初探(三)

    在上文提到了本地化文件的问题,然后在Ext JS 5的包里找了找,居然还没包含本地化包.我估计目前还不到考虑本地化的时候.在Sencha Touch中,是没有本地化包的,但是要让Ext JS也不包含本 ...

  7. hive:(group by, having;order by)的使用;group by+多个字段,以及wiki说的group by两种使用限制验证

    hive> select * from app_data_stats_historical where os='1' group by dt limit 100; 出现结果如下: 2014-01 ...

  8. java语法部分一些小问题

    由于本人是个初学者希望自己的文章不会误导广大"群众",如果有错误之处还望前辈指出.谢谢! 一.键盘录入. A:导包 格式: import java.util.Scanner; 位置 ...

  9. LeetCode之“散列表”:Valid Sudoku

    题目链接 题目要求: Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku boar ...

  10. 实战项目开发细节:C语言分离一个16进制数取出相应的位1或0

    最近在公司开发一个关于钢琴的PCBA项目,项目大概是这样的,完成各种功能的测试,准备去工厂量产的时候可以通过软件快速甄别硬件是否短路,断路等问题. 其中,甄别好坏的方法是通过比如按键,或者其它的操作然 ...