战魂小筑

讨论群:309800774 知乎关注:http://zhihu.com/people/sunicdavy 开源项目:https://github.com/davyxu

   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  252 随笔 :: 0 文章 :: 506 评论 :: 0 Trackbacks

Cocos2dx的作者王哲来到公司给大家做了一场技术答疑会

以下是我及我们项目组的一些Q&A

1. Cocos2dx 3.0版本在引擎退出时, 会有内存泄露

我:本来以为这个在rc1版本中发现的问题会在final版本中解决, 但实际上还是没有解决. 本人使用的是Windows下的VLD的内存泄露检测, 多年来这东西一直没有误报过, 虽然这个泄露不是很大, 但会干扰在这引擎上开发的逻辑的内存泄露查找

王哲:Cocos2dx的内存泄露测试是在XCode下进行的, 借助mac平台的工具来做的, 他说, 虽然操作系统会在进程结束时会自动回收, 但还是会在patch版本解决这个问题.

2. Cocos2dx 3.0 中的getInstance设计问题

我:3.0中的singleton是使用自动new的方式来实现的, 对象都是分配在堆上, 而不是栈上. 这种方式的特点就是在singleton为空时, 自动new出来, 从而让上层保证使用简单. 但是弊端就是前一个问题说过的, 如果处理不当的话, 会导致内存泄露.

3.0中的Director在析构时, 会先删除Configurator的一个配置类, 但是, Renderer在析构时, 又会使用到这个配置类, 调用配置类的单件, 从而导致配置类重新实例化. 之后, 就没有管理配置类的析构, 所以发生内存泄露. 我尝试修复这个问题. 但是因为getInstance本身的设计弊端,导致拆东墙补西墙, 东墙又倒掉的问题.

王哲: 已经发现这个问题, 会在未来版本加以修正

3. 为什么不自带更新系统

王哲: Cocos2dx引擎一开始设计是偏重于渲染器, 所以包括网络及其他部分都是属于附属. 现在开发团队只有10个人, 所以精力也是有限的

另外, 每个公司和个人对更新系统的需求都不是一样的. 不过引擎会在以后版本中的ResourceManager提供一些类似的功能

4. 帧率控制器

我: 游戏一般分为固定帧率和可变帧率两种更新方式. 前者在早期的日本游戏中常见, 后者是3D游戏及后期的游戏中用的比较多. 在U3D中分别使用FixedUpdate和Update两种方法来实现类似的功能. 但是在Cocos2dx中没有实现类似的功能.

王哲: Cocos2dx里因为要处理一些复杂的情况, 比如接听电话之类的, 所以这里仍然使用可变帧率来做.

我: 虚幻里有一套更新算法, 在帧率足时, 击中处理一些垃圾回收, 内存释放等耗时操作. 但是超过预设的阀值后, 停止占用帧更新时间, 留给逻辑足够的更新时间. 但是没看到Cocos2dx内使用这种算法

(其实王哲应该没听懂我说的意思)

王哲: 我尝试在3.0的渲染器中支持多线程, 但是在某些情况会出现crash, 而且这种技术的加入会提高引擎的门槛, 所以未来会根据实际需要加入.

5. 为什么不统一setResourceRootPath/setResourceDirectory 的接口?

这是我们项目的一个兄弟做下载更新时, 碰到的2.0中的一个问题. 王哲表示3.0已经做了1年半, 2.0的东西都忘记了, 但是在3.0中是统一的接口.

6. 如何看待云风喷cocos2dx?

这是我们项目的一知乎粉提的问题. 王哲说, 云风对C++很反感, 所以自己的代码及项目大部分都是C. 因此对cocos2dx这种C++引擎肯定会有些反感. 但是cocos2dx的使用率很高, 不能因为一两个大佬的意见而改变cocos2dx本身的一些优势

7. SpriteFrame和纹理的释放问题, 为什么不使用智能指针?

王哲: 我做过一个测试, 智能指针在移动设备上跑的速度肯定是要慢于retain/release这种手动方式, 所以依然在3.0中采用retain/release方式.

我: 我们有某些资源需要常驻内存, 但是全局方式的SpriteFrameCache和TextureCache会导致这个问题很难解决. 能否提供分组资源管理概念

王哲: 这个修改其实没什么难度, 论坛里也有很多建议, 我们会考虑在新版本支持这些功能

8. Scene的接口不统一, 用错还会crash

王哲: 这个问题确实存在, 我们会加以修正

9. 为什么要对STL进行一些包装, 而不是直接使用?

王哲: 因为要适用于retain/release模式( 此时, 我终于发现我们为什么会出现第七个问题了)

10. string为什么需要一种垃圾回收机制来进行回收, 而不是直接用string?

王哲: 这是一个历史遗留问题, 为了兼容objc版本的移植及风格

 

其他的一些信息

CocoStudio是使用WPF写的, 底层使用P/Invoke与C++引擎层进行交互. 有人提出这个编辑器要开源么, 作者表示后期会考虑的, 但是因为代码很乱, 所以一开始没有考虑开源

本人感受, 微软的一切开发工具及代码的东西都是按商业模式做的, 根本不考虑开发者的利益. DX7到DX11, 说好的COM兼容, 最后改的一塌糊涂. MFC那么老掉牙的东西, 到VS2013都还在更新, 这不是祸害群主么. XNA退不起来, Silverlight干不过Flash. 更别说乱的一塌糊涂的WP, WindowsRT, WinPhone. 对于VisualStudio来说, 这是地球上做的最好的编辑器, 保留这个足矣, 但是也别太依赖即可. 拥抱开源, 珍惜生命, 远离微软

WP版的Cocos2dx支持是微软设在西雅图的一个叫OpenTech的公司来做的, 并非王哲团队做的. 而且DirectX现在变成小众API, 因此这公司采用AngleProject来用OpenGL模拟DirectX的接口, 当然性能上肯定有很大的损失

最后附上王哲团队的照片以鉴真伪

image

posted on 2014-04-25 18:35 战魂小筑 阅读(6185) 评论(5)  编辑 收藏 引用 所属分类: 游戏产业随感

评论

# re: 与Cocos2dx作者王哲及其团队技术讨论会的一些笔记 2014-04-26 09:45 杨世玲
真的.哈哈哈哈啊哈哈啊  回复  更多评论
  

# re: 与Cocos2dx作者王哲及其团队技术讨论会的一些笔记 2014-06-04 10:07 DelphiBoy2003
为什么说DirectX现在是小众API?因为大家都开始使用跨平台的引擎开发游戏?并且主流开发者都转移到web和手游上?PC端的已经没落?  回复  更多评论
  

# re: 与Cocos2dx作者王哲及其团队技术讨论会的一些笔记 2015-04-16 13:08 avi9111
2年cocos2dx皮毛,最近在搜王哲,才搜到你这里的
对于最后几句不是很认同
微软没考虑开发者利益?那是你公司没交保护费而已,如果你买正版,技术支持那是多到你不信
相对于微软,苹果,开源更是没考虑开发者利益,连个文档都没有,根本连请人写文档的资源都没有,人性是懒惰的。

补充消息,
1)有很多东西不是你自己写的爽,然后出来的产品就是好的,也不是你写的爽,别人就写的和你一样爽的

2)我也是支持cocos2dx的,云风说过,他根本都不会用2dx,因为他2个星期就能写出一个一模一样的引擎,或者是对的,但是现在整个开源的社区,现在的开发环境,现在的商业环境,云风老头的说法是不是有点过时  回复  更多评论
  

# re: 与Cocos2dx作者王哲及其团队技术讨论会的一些笔记 2015-04-16 13:26 战魂小筑
@avi9111
那是很多年前写的东西了, 现在看来, 由于鲍尔默是一个商人, 无法将微软这个技术公司做的更好.
纳德拉上任后的开源,就是讨好开发者的一步
微软的正版服务是耳闻的, 确实不错

云风的能力没必要用cocos2dx, 所以有了ejoy2d. 但cocos2dx能做到普及, 也是借cocos2d的东风.
cocos2dx在2d的地位毋容置疑, 最近3.x版本的很多问题改进的还可以. 但是从整体架构设计, 战略规划上就限制这个引擎的发展  回复  更多评论
  

# re: 与Cocos2dx作者王哲及其团队技术讨论会的一些笔记 2015-07-09 20:19 mirchd
最新版cocos2dx还是有内存泄漏,pool内存管理这里写的有问题,  回复  更多评论
  


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理