大家好,我是Syc,多谢大家一直以来对VC驿站的支持!

书归正传,以上两篇文章就是个人对于该款游戏框架方面的一些简单分析,此外还有一些比较重点的经验性总结给vc驿站-www.cctry.com的网友罗列出来,捞点干的东西给大家压轴。当然这些东西也不都是我这次去北京学习之后才了解到的,以前也都会注意这些问题,但是我这次去北京做项目深深的体会到了这些技术点的重要性,因为都在项目中有充分的体现:

1、内存方面的问题一定注意,同时要及早发现,及早解决。大家平时在写代码的时候就应该多注意内存的问题,溢出、泄露之类的,还有一个是效率问题。本身移动设备上受硬件条件的限制,不同于pc,所以内存不能无限制的去用,另外,iOS与 Android 的系统中的程序都是运行在沙盒模式下,一旦您的程序内存超标系统就会直接Kill掉你,所以如果大家的程序资源比较多,不要在程序启动的时候就一下子全都载入,这样比较浪费,也怕内存吃不消。不过有人会说那我用到一个载入一个,不用的时候就释放总该行了吧?但完全这样做也不能说永远是正确的,这就是我说的要考虑内存效率的问题,一些类似数字显示的数字图片资源,比如:游戏分数、游戏消耗时间、游戏剩余时间等等,在你的程序中会很经常的用到,你同样是用的时候载入不用的时候释放,这样资源来回进行内存的切换会耗费更多的时间,效率受影响,所以类似这样的数字资源可以在程序启动的时候载入,程序退出的时候再释放了,毕竟占用的内存不大。
另外,Cocos2d-x本身在类似CCSprite这样的类中都有提供Cache缓存机制,所以这个也是建议大家去使用的,可以提高效率,但是最好理解了他的原理之后再好好的去使用,不要一味的向Cache中添加东西,这样即使内存中实际的资源是一份也是不行的,因为其引用计数是多个,所以在进行释放的时候是不会完全释放的。再一个,大家在做项目的过程中遇到问题了最好及时解决不要等到项目要结束的时候再一起查内存方面的问题。我们这个项目就遇到了这么一个情况,最后才查内存的问题,但是发现真要是想改起来的话改动会比较大,但是项目周期马上要结束了,所以时间上来不及,最后还是通过其他的方式来解决的;

// 备注:本篇文章来自 vc驿站:http://www.cctry.com
// C、C++、VC++ 各种学习资源,免费教程,期待您的加入!
/

2、代码注释方面要多写、勤写,大家有的可能平时自己写程序的时候不经常写注释,没这个习惯,包括我在内也一样。但是当多个人一起合作开发一个比较大的项目,代码量慢慢增加的时候你就会发现平时写注释的好处了,有时候自己前期写的代码到后期都得好好想一会才能理清思路,后期还有可能是你去改动别人写的代码,所以这个时候如果对方代码一点注释都没有,你敢上去就修改吗?肯定不敢,必须先读懂对方这块代码的实现流程,弄懂了之后才能进行流程的修改以及Bug的修复;

3、善于使用assert、log输出之类的调试手段,随着代码量的增加,虽然你的代码有注释,但还是不够的,可能程序某一块的功能异常,虽然你加上了些 if-else 的判断,但是程序没有断住,所以异常信息捕获不到,这个时候你就要去Debug查找,肯定会花费一定的时间。使用assert就不同了,程序会直接类似断点一样的断住,可以节省不少时间的;

4、程序的可扩展性要注意,当然这里面的可扩展性我不仅仅是指宏观上面的程序架构,微观到程序上的某一个机能也是要注意的。如果可以封装成某个函数或类尽量把相关机能封装起来,这样也方便其他模块去调用,同时对于后期的程序处理方面也是非常易于修改和移植的。否则很多机能都写在一起,如果后期要进行流程的修改可能不太容易,改动会比较大。在这个项目中就深深的有体会,前期的开发人员将所有的两个场景切换中间都加了个进度条的中间场景,同时在这个中间场景中进行了些下一个场景的资源前置加载等工作,场景之前的关联性比较大,但是后期策划案有调整:战斗结束之后切换到结算场景时不需要这个中间的过渡场景,因为前期模块化做的不是很好,所以我们后期的修改工作就麻烦多了……

5、程序开发人员与美术人员之间的协调工作要做好,毕竟大家都是在合作一个项目,所以,如果一个功能直接让美术人员做幅图片比让程序人员用代码开发省时省力的多,那么何乐而不为呢?比如,要对一幅彩色图片进行灰化处理,用程序来实现也是可以的,不过得弄懂这个图片处理算法,之后才能实现,但如果让美术人员用ps来对这个图片做处理的话可能2分钟就搞定了……

// 备注:本篇文章来自 vc驿站:http://www.cctry.com
// C、C++、VC++ 各种学习资源,免费教程,期待您的加入!
/

6、别人的代码也不是完美无错的,包括Coco2d-x的也一样,本身Coco2d-x现阶段来说也是个半成品。另外,对于Coco2d-x这样的跨平台东东,在一个平台下没问题,不一定在另外的平台下就没问题。之前做了个文字滚动的功能,发现在Win32平台下CCLabelTTF组件并没有像其文档上说明的那样正常的实现了相关的功能,而是有偏差,所以我们修改了Coco2d-x引擎中Win32部分的实现代码,修复了其Bug,当然这个功能在iOS平台下是正常的;

7、再说一个封装移植的技巧吧,也是从北京某大牛那学的:C是C++和Objective-C的中间桥梁!之前做了一个IAP(In App Purchases)程序内付费这么一个东西,主要是针对iOS平台的,所以苹果提供了底层的实现,不过是基于Objective-C语言的,我们的游戏是用C++编写,所以就要对IAP部分的底层Objective-C实现进行封装,供C++去调用。刚开始确实没什么思路,后来看了相关代码之后理解了,可以通过C语言在中间中转一下,毕竟Objective-C和C++都可以无缝和C语言进行互调,所以C语言就在中间起了一个Bridge的作用;

8、要实现一个相对独立的新机能时,可以先在一个小工程或者小demo中去试做,如果成功的实现了再移植到自己的程序项目中,这样可以避免一些其他方面干扰的问题。这个游戏项目使用的数据库是SQLite3,可以直接使用任意一款SQLite数据库查看工具查看和修改其存放的数据,为了安全起见,不让用户随便修改游戏配置及奖励信息,所以我们要对数据库进行加密,这里使用的是WxSQLite,但是得重新下载编译SQLite3和WxSQLite的代码,中途也遇到了不少问题,当时我就不确定是我们工程的问题,还是各种库弄到一起冲突了,外在因素比较多。所以这个时候我就新建了个小工程进行测试,最后完美的解决了……然后再合成到我们的游戏项目的工程中,这样还是非常不错的!

9、要考虑到多平台对应的可移植性问题,避免类似“%2s”的指定宽度格式化字符串问题发生,事实证明Windows平台下验证的比较宽松,会忽略“%2s”中的‘2’,因为根本就不支持,只有“%s”,所以会得到格式化后的结果字符串,而在iOS平台下就比较严谨,既然不支持这种格式化字符串就直接返回一个空串,所以两个平台下的返回结果就不一样了,Windows平台下正常,iOS平台下就产生了问题;

// 备注:本篇文章来自 vc驿站:http://www.cctry.com
// C、C++、VC++ 各种学习资源,免费教程,期待您的加入!
/

10、游戏的设计应该从玩家的角度去考虑,从玩家的角度去看待问题以及解决问题,另外关卡设计等的从易到难,这个难并不是我们要刻意的去难为玩家,而是要让玩家在玩游戏的过程中有种爽与过瘾的感觉,这样才能增加游戏的可玩性,吸引住玩家!

好了,总算是写完了,这三个月来总结的东东就先跟vc驿站-www.cctry.com的网友分享到这里,以后再有好的东西还会给大家写的,最后还是希望大家一如既往的支持vc驿站-www.cctry.com,谢谢大家!

转载于:https://www.cnblogs.com/cctry/p/3783099.html

我的北京游戏开发总结【三】相关推荐

  1. 【Visual C++】游戏开发笔记三十七 浅墨DirectX提高班之五 顶点缓存的红颜知己 索引缓存的故事

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...

  2. Pascal游戏开发入门(三):游戏对象管理

    Pascal游戏开发入门(三):游戏对象管理 游戏中有很多类对象,例如:角色,敌人,NPC,陷阱,子弹,门等等.跟踪并处理它们之间的交互是一个有难度的事情.为了尽可能简化并使之容易维护,本节将尝试使用 ...

  3. 【Visual C++】游戏开发笔记三十七 浅墨DirectX提高班之五 顶点缓存的红颜知己:索引缓存的故事

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhmxy555/article/details/8304741 作者:毛星云(浅墨 ...

  4. 【Visual C++】游戏开发笔记三十四 浅墨DirectX提高班之三 起承转合的艺术:Direct3D渲染五步曲...

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhmxy555/article/details/8223965 作者:毛星云(浅墨 ...

  5. 【Visual C 】游戏开发笔记三十四 浅墨DirectX提高班之三 起承转合的艺术 Direct3D渲染五步曲

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...

  6. 【Visual C++】游戏开发笔记三十三 浅墨DirectX提高班之二 化腐朽为神奇:DirectX初始化四步曲

    这篇文章里,我们将迈出精通DirectX的第一步,先了解典型Direct3D程序的书写流程,然后学习COM接口的对象的一些思想,然后按照"四步曲"的思路,系统地学习DirectX的 ...

  7. 【Visual C++】游戏开发笔记三十二 浅墨DirectX提高班之一 DirectX大局观认知篇

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接:  http://blog.csdn.net/zhmxy555/article/details/8172615 作者:毛星云(浅 ...

  8. 【Visual C++】游戏开发笔记三十五 站在巨人的肩膀上:游戏引擎导论

    看到在留言中很多朋友提到不太清楚DirectX与游戏引擎的区别的问题,在这里浅墨就专门把自己对游戏引擎的一些理解写成一篇文章,作为我们<Visual C++游戏开发>专栏的游戏引擎导论,也 ...

  9. 【Visual C++】游戏开发笔记三十四 浅墨DirectX提高班之三 起承转合的艺术 Direct3D渲染五步曲

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhmxy555/article/details/8223965 作者:毛星云(浅墨 ...

  10. 【Visual C++】游戏开发笔记三十九 浅墨DirectX教程之七 他山之石:几种几何体的快捷绘制法

    本篇文章里,我们对Direct3D之中几种几何体的简洁绘制方法进行了详细的剖析,最后依旧是提供文章配套的详细注释的demo源代码的欣赏,并在文章末尾提供了源代码下载.(这标题有些歧义的,这个几种是修饰 ...

最新文章

  1. 洛谷P4480 【[BJWC2018]餐巾计划问题】
  2. 2022互联网大厂薪资大比拼
  3. Linux下更好用的帮助命令—cheat
  4. 处理器的用户态和核心态
  5. linux 服务器账号及安全杂谈
  6. Process 执行shell 脚本
  7. ImportError: No module named ‘pandas.io.data‘
  8. [spring源码学习]三、IOC源码——自定义配置文件读取
  9. 七. 多线程编程11.线程的挂起、恢复和终止
  10. python利器-bluepy 一款python封装的BLE利器简单介绍
  11. 使用navicat无法登陆oracle 数据库
  12. [小雨学编程之C#] 18.1 数据类型转换,数据类型别名
  13. docker安装gamit_科学网-基于Ubuntu18.04安装Gamit10.71-郭若成的博文
  14. RFID固定资产盘点系统给企业带来哪些便利?
  15. 服务器基本搭建(Linux系统阿里云服务器为例)-购买云服务器
  16. JAVA spring定时任务
  17. Linux内核框架之内核进程
  18. ubuntu调试android设备不识别
  19. 一篇关于 JS 常用的数据结构与算法万字总结
  20. IDEA 使用Spring Boot框架实现hello world

热门文章

  1. 《面向模式的软件体系结构3-资源管理模式》读书笔记(1)--- Lookup模式
  2. ecshop2.71 lbi库文件添加流程
  3. 高级软件工程师的职责范围
  4. java nio proactor_reactor模式与java nio
  5. mysql 有ntext_深入char、varchar、text和nchar、nvarchar、ntext的区别详解
  6. linux 提取cpio_使用rpm2cpio,cpio提取rpm包的中的特定文件
  7. Redis操作ZSet类型
  8. 关于MySQL 8.0
  9. SpringSecurity案例之认证服务security配置
  10. jdk8中对HashMap做了哪些改变?