距离上次发博客已经有两个月的时间过去了,期间好几次想抽出时间来写,最后却总是因为某些原因没动手。主要原因是最近确实太忙了,一边要做兼职游戏开发(full版,lite版,christmas版),一边还在给导师打工,做一个mes系统。每天从早上8点加班到晚上10点,回到学校都快11点了,确实太累了。所以,有点时间,我都在逛论坛,看文章。今天上午忙里偷闲,于是准备静下心来,谈一谈我的第一个iphone游戏开发的心得体会,跟大家分享一下。

关于我制作的游戏的内容,我上次在新浪微博上已经发了一个视频,公司美工比较给力,看起来游戏内容还不错。呵呵,心里还是比较开心的。这个游戏采用cocos2d和box2d制作而成,而box2d只用到了其中一部分功能,即碰撞检测和AABB query。游戏从今年5月份开始做,真正完成大概在11月份左右。后来的游戏数值微调,界面修改,代码优化大概花了1个月左右的时间。上架的时候出了很多问题,由于后来我去做mes了,于是游戏gameCenter和广告部分,还有一些菜单页面是公司的同事帮忙一起完成的。这中间代码合并的时候,出了点问题,导致上架之后,发现还有一个很严重的bug,结果不得不重新拿去送审。还有后来的lite版本,由于不符合apple的送审规范,结果被reject了,又得重新改。最搞笑的是,full版第一次送审的时候,程序大小和110多M,因为要同时支持高清和普清的,但是,不知道什么时候,我在代码里面加了一句[CCDirector sharedDirector] setContentScaleFactor:1.0];结果,高清图片都浪费了,实际程序还是不支持高清的,白白占用了那么多突然间。而且对于size大于20M的程序,是不可以通过蜂窝网下载的。而我后来查看了一些排名靠前的游戏,几乎全部是size小于20的。而最近的一个榜首的游戏,amazing breaker,大小是19.5M,卡的那么死。说明游戏大小对于下载是来说影响确实不容忽视。后来,我想重新支持高清模式,结果发现内存使用过多,程序经常crash。最后,没有办法,只得舍弃Retina display了。最终full版加christmaas更新,不是ipa的时候47M,压缩之后应该会在25M左右。该版本还在送审中,应该马上能在apple store 里面看到了。

说了这么多,接下来我谈谈自己的几点心得体会吧,希望对第一次动手开发iphone游戏的童鞋有所帮助。

第一点:从一开始就关注程序内存使用!

大家看了我的博客,想必现在都在使用texturePacker来制作大图以节省内存和程序大小,还有响应速度。但是,使用texturePacker有几个要注意的地方。首先,制作出来的大图尽可能地充分利用空间,图的大小最好在1024×1024.不用制作2048×2048的图。因为有些老版本的设备最大只支持1024×1024的大小。充分利用空间是什么意思呢?就是把空白区域占满!一定要想尽办法占满,由于是菜单界面和其它非游戏画面,因为这些画面不需要加载到一个batchNode里面去,所以可以多个场景的图交叉引用。但是,如果是游戏里面的场景,因为有动画,所以,最好还是把相关的动画制作成pvr.ccz大图,比如player.pvr.ccz。还有一点,在init方里面

        [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"GameOver.plist"];        [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"Achievement.plist"];

需要对应的在dealloc方法里面:

[[CCSpriteFrameCache sharedSpriteFrameCache] removeSpriteFramesFromFile:@"GameOver.plist"];    [[CCTextureCache sharedTextureCache] removeTextureForKey:@"GameOver.pvr.ccz"];

因为pvr.ccz文件是压缩格式,他在第一次加载的时候会调用系统的解压缩程序,造成内存急剧上升,所以,在游戏画面loading的时候,一定不要loading太多,特别是在高清设备上,有时候由于你内存使用过多,可能会被系统直接kill掉。还有,很多童鞋都有这样的经历,就是在切换场景的时候,提示内存警告,特别是高清模式下面。这里有几个小技巧,可以帮忙大家避免这个问题。首先,制作的pvr.ccz图片不要太大,像素格式用rgba4444的,这样可以节约一半内存。当然,如果使用这种像素格式,那必须加抖动,否则你的画面会模糊不清的。其它,要保证每一个场景的dealloc方法在replaceScene的时候都有调用,你可以在debug模式下面用CCLOG在dealloc函数里面输出。如果场景切换的时候没有调用,说明你这个场景的内存有问题。有可能被某个对象retain了,其retainCount在replaceScene的时候没有减少到0,所以dealloc方法是不会调用的。如果dealloc方法都没有调掉,那么这其实就是一种内存泄露,因为你很有可能会在这个scene里面定义很多对象。

还有一点,dealloc的顺序,先释放自己的,再调用[super dealloc].对于想支持高清的童鞋,还有一个建立就是,使用部分高清。背景图片不高清,而其它icon和按钮高清,这样给人的感觉,你的程序还是支持高清的。关于cocos2d里面如何部分支持高清,可以参考这个链接。

第二点:从一开始就关注程序大小!

我觉得一个好游戏的标准,至少有一条,就是size不超过20M.这需要很强大的功底才行的。包括游戏设计,不能使用大家的图片来堆积出一个以内容为主的游戏。不过初期,为了抢眼,这种游戏制作起来还是比较方便的。但是,程序大小超过20M有个不好的地方,就是用户必须通过电脑下载同步。而不能直接通过3G网络下载。这对于有一些人士来说,他们会觉得很不方便,所以,无形之间会影响你的游戏的下载量。美工在制作图片的时候,尽量使用小图,音效师在制作音效的时候,音效格式最好使用mp3,而且背景音效最好在800KB以下。否则一个游戏下来,音效都有10多M,那太难了。

不单是内存的使用要斤斤计较,而且其实游戏资源,也是一样。包括字体文字。如果只是为了显示分数,那么再制作字体文件的时候,就可以不包含字母。还有,有些时候,比如同一个icon,在不同的场景大小不一样时,也没有必须制作两张图,可以制作一张大图,然后在需要使用小图的地方,设置一下scale就行了。当然,最重要的是大家要学好opengles,很多效果,能不用图片实现的,就尽量不要用。而且好多效果,单纯用图片也是制作不出来的。我现在也在想尽办法学习opengles,这玩意儿太重要了!

第三点:从一开始就关注游戏FPS。

所谓FPS就是游戏的帧速,可以通过设置AppDelegate里面的[director setDisplayFPS:YES];来开启。通过游戏的帧速,你一定要保持在40帧以后。最好是60帧。而且要多测试几个设备,如果4代的touch或者iphone都不能达到40帧以上的话,那么你真的要注意优化你的帧速率了。那么,优化帧速率有哪些方法呢?记住一个准则就行了:永远不要在使用的时候才去创建!这里面不仅仅指游戏图片资源,音效资源,还包括游戏里面的各种对象。必须要事先创建好,需知,创建内存属于io操作,那是相当慢的,会极大地影响游戏的帧速率。所以,大家游戏里面要用到的对象,都可以用一个CCArray装起来,然后把visible设置为NO,然后在需要使用的时候,那从这个array里面选择一个visible为NO的,然后show出来。这个array的功能就相当于我们熟悉的内存池。box2d为什么不让你手动去new对象,而是由world对象去管理创建和销毁。效率!因为考虑连续内存分配、cache命中等原因。所以,大家这个一定要注意。还有游戏中的action,也需要先创建好,然后retain,这样游戏中就可以重复使用,但是,千万要记得在dealloc方法里面release掉。当然,优化FPS的方法还有很多很多,比如使用CCLabelBMFont显示分数,而不是CCLableTTF,比如优化那些耗时长的代码段,提高算法效率。这个要看个人经验积累,我自己也是个初学者,所以不能给大家更多的建议,希望朋友们一起分享一下,这样可以让大家都少走一些弯路。

第四点:除了制作游戏,你还需要关注点其它的

比如apple store上架审核规则,比如如何打包制作ipa,比如code signing,比如debug,比如音效格式、图片格式等。这些看似不重要的东西,对后面的游戏发布起着灰常重要的作用。还有代码编码风格,代码管理工具(git)使用,变量命名艺术,类编写原则等。建议大家读一读《代码大全》和《程序员修炼之道》。以前读过一些,当时只觉经典,但是实际获益并不是很多。最近重读之后,有种豁然开朗的感觉。温故而知新,真理也!为什么我又讲到这里了,因为,游戏是要update的,如果前面的代码没写好,后面的update极有可能引入大量的bug,导致没法update。而且,设计师的想法是在你制作游戏过程中不断完善的,这中间会不断地提需求,让你改,让你更新。如果代码很乱,那会累死去。我个人是个面向对象和设计模式爱好者,阅读了大量的设计模式、敏捷开发、重构的书籍,对于游戏的架构和模式也有非常浓厚的兴趣。所以,今后,我尝试写一些游戏模式和架构方面的文章。

最后,如果大家有想翻译游戏教程的,可以联系我(why?因为我收集了很多不错的游戏资源,欢迎大家踊跃报名哈!),版权归译者。大家可以建立自己的博客,然后我转载也可,两边同时发也行。总之,一句话,help you , help me,help us!

从小就有开发游戏的梦想,现在终于实现了,而且在这么酷的设备上,简直就是legend of awesomeness!大学为了做游戏了,学习了4年C++,结果还是没能做出一个游戏,想想真不值啊。希望在这里,能给后来的游戏开发爱好者带去一份帮助,则吾愿足矣。

欢迎大家和我讨论游戏开发的问题 :)

接下来的post,是翻译两篇以前投票产生的文章,希望有朋友加入一起翻译:

http://www.raywenderlich.com/4680/how-to-make-an-interface-with-horizontal-tables-like-the-pulse-news-app-part-1

http://www.raywenderlich.com/2797/introduction-to-in-app-purchases

等翻译完后,我会完善《如何使用cocos2d-x制作一个山寨angry birds系列》,然后会考虑cocos2d&mvc, game architecture。

要论坛交流,请点击传送门!

著作权声明:本文由http://www.cnblogs.com/andyque原创,欢迎转载分享。请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢!

转载于:https://www.cnblogs.com/pengyingh/articles/2436595.html

我的第一个游戏FoodieThebug完成之后的心得体会 -子龙山人相关推荐

  1. java实验2总结心得,打字小游戏JAVA实验总结及心得体会

    篇一:扫雷游戏实验报告 课程设计 班 级: 姓 名: 学 号: 指导教师: 成 绩: 电子与信息工程学院信息与通信工程系 目录 1.任务概述------------------------------ ...

  2. iOS cocos2d 2游戏开发实战(第3版)---你的第一个游戏!

    2019独角兽企业重金招聘Python工程师标准>>> 随着苹果公司不断地创新与发展,新的iPhone 5.iPad 4以及iPad mini产品相继问世,包括iOS与Xcode在内 ...

  3. 分享人生第一个游戏源代码

    第一次自己写博客,与大家分享一下自己第一个写的算正经的游戏.这是我家乡江西一个本土游戏,名字叫"斗牛",是一种赌博游戏. 赌博有害家庭健康,因此将其改编成简单的游戏,希望所有的家庭 ...

  4. 【吼吼睡cocos2d学习笔记】第四章 - 第一个游戏

    来让我们开始第一个游戏的制作. 这个过程可能有点艰辛,但是只要坚持下来,第一个游戏往往能给我们带来巨大的收益(当然这个收益不是经济上的:-P) 先上截图: iPad中: 游戏构思 角色 在屏幕的上方, ...

  5. 我用unity开发的第一款游戏demo心得

    本人目前大一,双非一本,谨以此博客,记录日后的unity学习过程与算法训练.希望能同大家一起进步!也希望三年后回过头来能看到一个优秀而拼搏的自己! 话不多说,上我的第一个demo(虽然是跟着视频做的) ...

  6. 零基础用Unity制作你的第一个游戏(1)

    零基础用Unity制作你的第一个游戏(1) 1.开发环境 2.创建项目 3.Unity界面基本介绍 1.界面介绍 2.场景视图操作 4.创建对象 1.创建地板 2.创建主角 5.不能缺少的仪式感(让游 ...

  7. 第一人称游戏与第三人称游戏的区别

    第一人称游戏也叫主视角游戏,是指游戏的视野就是玩家操控的角色的主视野,操控的角色本身并不出现,屏幕上显示的内容就相当于角色眼睛所看到的,玩家通过该视野范围和角度来了解游戏世界.玩家觉得"我& ...

  8. sql2008带扣号字符串_带扣:在您的第一个游戏果酱中创建自己的卡丁车游戏

    sql2008带扣号字符串 The Karting Microgame video game template just got a serious makeover to help new user ...

  9. 28 CoCos Creator-快速上手:制作第一个游戏

    0. 原文 https://docs.cocos.com/creator/1.9/manual/zh/getting-started/quick-start.html 1. 快速上手:制作第一个游戏 ...

  10. 小球游戏——开始我们的第一个游戏-----java.多线程的深入理解

    每当我们玩着各式各样游戏时,例如LOL,原神,空洞骑士,你会不会突然脑海里蹦出一个想法,如果自己也可以做一个这样的游戏的就好了.虽然这对我们非常遥远,但是也许在踏上这条游戏制作的路时,可能我们能成为这 ...

最新文章

  1. python语言必背代码-让你的Python代码实现类型提示功能
  2. linux内核中kset是什么意思,Linux内核之设备驱动-底层数据结构kobject/kset
  3. 数据库面试题【七、InnoDB索引和MyISAM索引的区别】
  4. 从飞机上看下雨是这样子,太震撼了!
  5. UI2Code智能生成Flutter代码——版面分析篇
  6. 容器编排技术 -- Kubernetes 为 Namespace 配置默认的内存请求与限额
  7. java jre 1.8_jre1.8官方下载
  8. 关于magic-api的使用入门
  9. Excel的Sumif、Sumifs求和结果错误
  10. 【前端】基于layui写的一个高级搜索(筛选)功能
  11. TomExam开源在线考试系统
  12. 机器学习笔记 - SimSwap 指南:高保真换脸的高效框架
  13. Android微信登录引起的内存泄漏
  14. PLDA宣布XpressLINK-SOC™ CXL控制器IP支持AMBA CXS Issue B协议
  15. 计算机图标显示的是word,word图标不显示怎么办 设置显示word图标的方法
  16. flex中dataGrid的编辑功能
  17. IEEE期刊LaTeX模板
  18. c++:利用socket基于TPC/IP实现通信 在线聊天
  19. r语言t检验输出检验统计量_[转载]R语言:常用统计检验
  20. 网络工程师在现实中的意义

热门文章

  1. 一种简单的给MD5加盐算法
  2. 2月1日:成都力争3年建237个养老院全覆盖社区养老
  3. 如何理解失效模式与影响分析(FMEA)
  4. n1盒子救砖_斐讯N1盒子刷机救砖教程
  5. 安卓mqtt调试工具_App推荐——搞机工具
  6. QQ音乐播放地址 API
  7. 接口测试用例设计实践(含详细实例)
  8. stm23f103 usart1串口中断可进入,而stm32f205 usart1的中断进不去解决办法
  9. 安装LuaRocks
  10. poi word 删除表格