1月3日下午3点至5点Cocos2d-x作者王哲在线问答交流第六期~

虽然我叫MT、大掌门、神仙道、捕鱼达人等多款明星游戏均使用Cocos2d-x进行开发,但引擎团队深知还有许多不足之处。为更好地服务全国各地的开发者朋友,Cocos团队特别开设定期线上技术支持!

每周五下午3点至5点Cocos2d-x作者王哲将在CocoaChina上和大家做线上交流。

1月3日明天活动仍然按时举行,有问题的童鞋可以在本贴中留言。

前四期的总结:
第一期:http://www.cocoachina.com/gamedev/gameengine/2013/1202/7455.html

第二期:http://www.cocoachina.com/gamedev/gameengine/2013/1210/7509.html

第三期:
http://www.cocoachina.com/gamedev/gameengine/2013/1217/7555.html

第四期:http://www.cocoachina.com/bbs/read.php?tid=174668

第五期:http://www.cocoachina.com/bbs/read.php?tid=175781

那我先把大家最想问的问题,先问了。
1> cocos2d-x 3.0 beta 具说是 1月7号发布, 是吗?
2> cocos2d-x 3.0 release 版大约什么时候发布?
3> cocos2d-x 3.0 beta 具一版有那些改动?

1 .cocos2d-x 3.0 beta 版本说是上个月月底发,到现在还有消息,能说一下什么时候发布吗?有随版本的文档上线吗?
2. cocos2d-x.org 站点访问太慢了,能做优化吗?再任何网络情况下访问都需要等3秒以上的时间,,很崩溃。。

王大 求问
1.富文本控件,这么常用的控件 为啥一直没有 有这个计划么 .
2.v3.0 逻辑和渲染分开了 , 主线程渲染 子线程搞逻辑了,是否可行.

王大,求问两个问题:
1,cocos2d-x+jsbinding的方案,JS部分的代码有什么好的调试方法吗,目前有哪个工具支持这种工程里JS代码的断点调试?和cocos+lua比起来,哪种方式调试更方便?
我自己在网上也搜索了一些内容,包括之前在线交流某期也提到过,目前需要先通过cocosHTML5在浏览器上调试,再移植回cocos2d-x进行发布,但是假如工程C++部分自己也写了一些底层代码(比如A*算法)绑定到JS,那么在HTML端调试时,是否这些代码都需要移植一份?
什么时候能在cocos2dx工程里直接进行JS部分的调试,有这方面的规划吗?
2,之前也有朋友提出过,目前js解析引擎的效率不是很高,和rapidjson比起来差不少,请问有考虑过换个js解析引擎吗?

王大你好:想问一下,
1.cocos2dx 3.0把原来的cocos2dxActivity换成用NativeActivity,这个是怎么考虑的,有什么优点?
2.以前我集成sdk什么的都是从cocos2dxActivity这边改起,现在该如何下手?

我用过webstorm调试,或者是firefox调试

cocos2d-x jsb xmlHttpRequest 怎么才能支持timeout 还有在jsb里面 怎么实现超时这样的函数 js自带的setTimeOut 等都不能使用? 谢谢

首先感谢王大百忙之中给我等草民答疑。我曾和您有过一面之缘,被您平易近人的姿态所折服。

我的问题如下:
1、cocoStudio如何支持多分辨率适配。我就针对我们的需求说:我会考虑生成多个Node然后手动添加到一个Scene里,这就需要生成的Widget有自己的锚点和百分比坐标,现在有百分比坐标,但是根节点却不支持锚点
2、c++自动导出到lua。手动编写pkg文件太麻烦,3.0tool里已经有这些工具了,但是感觉很难上手,需要一些文档。
3、是否考虑用RapidXML代替现在的
4、有没有比较成熟的跨平台推送方案以及客户端代码,有相关资料的话麻烦给出链接地址。
5、3.0下编译android已经摒弃Cygwin了。有没有让我们直接打包(就是已经编译出.so,打包apk)的方法,这样就不需要Eclipse环境,Eclipse太慢太难用了。

SpriteBatchNode类中的成员std::vector<Sprite*> _descendants,当中的Sprite是不是都共享同一个纹理Texture2D?本人是新手,请见谅。

你如果自己写了C++底层的算法,最好把他封装,然后自己用JSB把他绑定,这样在JSB只要调用这个接口就可以执行C++的代码了。

至于JS端是否要实现,取决于你是否准备在浏览器端调试这部分代码,如果需要的话,还是要实现一下比较方便。

关于调试,我们一般习惯的JSB调试方式是:

  1. 使用CCLog来调试。
  2. 在浏览器端调试好JS代码
  3. 使用debugger这个工具。(3.0以上版本才有)

基于我们的经验,用1,2种是最常见的方式,不过你想要的应该是第3种,它的文档在
https://github.com/cocos2d/cocos2d-x/tree/develop/cocos/scripting/javascript/script/debugger

有兴趣你可以自学一下~

— Begin quote from ____

引用第1楼harbinxxh于2014-01-02 14:22发表的 :
那我先把大家最想问的问题,先问了。
1> cocos2d-x 3.0 beta 具说是 1月7号发布, 是吗?
2> cocos2d-x 3.0 release 版大约什么时候发布?
3> cocos2d-x 3.0 beta 具一版有那些改动? http://www.cocoachina.com/bbs/job.php?action=topost&tid=177813&pid=867504

— End quote

  1. 是的,1月7日发布,我也不想再延期了。如果不幸延期,那么就是因为studio的lua和js绑定还没全部测试完毕
  2. final release会在3月15日之前,预计在3月1日~10日之间
  3. beta最大的改动是
  • new renderer // 有custom Node::draw的同学要苦逼了
  • templated containers // 这个绝对是个苦逼活,vector, map等为了支持c++11而修改了,CCArray和CCDictionary被标记为deprecated了,你还可以继续用,但是编译会报warning
  • GUI模块改进了不少

— Begin quote from ____

引用第2楼lixa8于2014-01-02 14:23发表的 :
1 .cocos2d-x 3.0 beta 版本说是上个月月底发,到现在还有消息,能说一下什么时候发布吗?有随版本的文档上线吗?
2. cocos2d-x.org 站点访问太慢了,能做优化吗?再任何网络情况下访问都需要等3秒以上的时间,,很崩溃。。 http://www.cocoachina.com/bbs/job.php?action=topost&tid=177813&pid=867505

— End quote

1月7日~10日。文档这次准备了中文和英文双语的文档,在 https://github.com/cocos2d/cocos-docs。中文入口 https://github.com/cocos2d/cocos-docs/blob/master/catalog/zh.md
站点服务器在国外,用VPN翻墙吧。

— Begin quote from ____

引用第3楼mayany123于2014-01-02 14:32发表的 :
王大 求问
1.富文本控件,这么常用的控件 为啥一直没有 有这个计划么 .
2.v3.0 逻辑和渲染分开了 , 主线程渲染 子线程搞逻辑了,是否可行. http://www.cocoachina.com/bbs/job.php?action=topost&tid=177813&pid=867511

— End quote

现阶段GUI还在调整和合并,尤其是menu, menuitem, label (合并了ttf, bmfont, atlas),统一freetype作字体渲染,以及layout的多分辨率支持。rich text在计划里面。争取3.0-final之前搞出来,但不保证。目前思路是用RenderTexture去拼一个纹理出来,降低draw call。目前社区里有一些零散的rich text实现,但实现都不太高效,或者只实现了ios版。

3.0-beta只完成了渲染器拆分,但还是和UI线程(也就是主线程)合在一起的。下个版本才会做拆分成多个线程。拆分后是主线程搞逻辑,子线程搞渲染。除非你要自己写OpenGL ES代码,否则不用去处理到渲染线程。另外我考虑写个接口让主线程塞个lamda给渲染线程调用,这样开发者就基本不用管渲染线程了。

— Begin quote from ____

引用第6楼gettopsoft于2014-01-02 23:50发表的 回 4楼(guke18410) 的帖子 :
我用过webstorm调试,或者是firefox调试 http://www.cocoachina.com/bbs/job.php?action=topost&tid=177813&pid=867801

— End quote

请问是调试整个混合代码工程吗?还是只调试JS部分代码?
工程应该是从C++部分启动的,webstorm可以启动整个工程,然后只调试JS部分代码吗?
我在websorm官网上看了下资料,好像只能在浏览器中跑代码,然后在webstorm里断点调试。
写的可能有些混乱,能否和您单独私下交流下?

— Begin quote from ____

引用第4楼guke18410于2014-01-02 18:55发表的 :
王大,求问两个问题:
1,cocos2d-x+jsbinding的方案,JS部分的代码有什么好的调试方法吗,目前有哪个工具支持这种工程里JS代码的断点调试?和cocos+lua比起来,哪种方式调试更方便?
我自己在网上也搜索了一些内容,包括之前在线交流某期也提到过,目前需要先通过cocosHTML5在浏览器上调试,再移植回cocos2d-x进行发布,但是假如工程C++部分自己也写了一些底层代码(比如A*算法)绑定到JS,那么在HTML端调试时,是否这些代码都需要移植一份?
什么时候能在cocos2dx工程里直接进行JS部分的调试,有这方面的规划吗?
2,之前也有朋友提出过,目前js解析引擎的效率不是很高,和rapidjson比起来差不少,请问有考虑过换个js解析引擎吗?
http://www.cocoachina.com/bbs/job.php?action=topost&tid=177813&pid=867721

— End quote

  1. 目前js和lua调试都不方便,都是只能靠log。目前我这里在做一个eclipse插件,可以单步调试js和lua。目前已经在windows上的JSB单步调试了,这周正把这个支持调试的cocos2d-x runtime运行到安卓上,实现安卓上的JSB单步调试。这些做好之后就开始搞lua的调试协议。

如果你今天立刻就想调试,那么就用firefox debugger,操作方式见这篇 https://github.com/cocos2d/cocos2d-x/blob/develop/cocos/scripting/javascript/script/debugger/README.md

  1. 提高json解析的事情,我们考虑最终形态是换用protobuf。仅仅是设想。目前json解析需要花费xml解析的4倍时间,是需要优化一下。这个事情我提高一下优先级

— Begin quote from ____

引用第5楼gettopsoft于2014-01-02 23:45发表的 :
王大你好:想问一下,
1.cocos2dx 3.0把原来的cocos2dxActivity换成用NativeActivity,这个是怎么考虑的,有什么优点?
2.以前我集成sdk什么的都是从cocos2dxActivity这边改起,现在该如何下手? http://www.cocoachina.com/bbs/job.php?action=topost&tid=177813&pid=867799

— End quote

  1. 使用NativeActivity之后,触摸响应速度提高了很多。而且对于长期而言,维护更容易。
  2. 可以参考3.0里面的plugin实现

https://github.com/cocos2d-x/plugin-x/blob/develop/samples/HelloPlugins/proj.android/jni/hellocpp/main.cpp 这个地方实现cocos_android_app_init这个引擎抛出的回调,PluginJniHelper::setClassLoaderFrom(app->activity->clazz) 这句把activity对象通过JNI传给Java层,然后在 https://github.com/cocos2d-x/plugin-x/blob/develop/protocols/proj.android/src/org/cocos2dx/plugin/PluginWrapper.java 第55行,initFromNativeActivity(Activity act)里面拿Context = activity,接着就可以从Context继续建立其他Activity出来了。

— Begin quote from ____

引用第7楼echodjb于2014-01-03 10:24发表的 :
cocos2d-x jsb xmlHttpRequest 怎么才能支持timeout 还有在jsb里面 怎么实现超时这样的函数 js自带的setTimeOut 等都不能使用? 谢谢 http://www.cocoachina.com/bbs/job.php?action=topost&tid=177813&pid=867945

— End quote

js自带的setTimeOut 不能使用, 只能用schedule

1赞

— Begin quote from ____

引用第9楼afei198409于2014-01-03 14:41发表的 :
SpriteBatchNode类中的成员std::vector<Sprite*> _descendants,当中的Sprite是不是都共享同一个纹理Texture2D?本人是新手,请见谅。 http://www.cocoachina.com/bbs/job.php?action=topost&tid=177813&pid=868201

— End quote

是的

为什么感觉Cocos2D-X团队要比CocoStudio团队靠谱得多啊,两个团队之间不能技术共享么?
CocoStudio什么时候能够完善起来,我们采用CocoStudio开发新项目,感觉是个超级大的坑啊。本来心理预期CocoStudio是要超过CocosBuilder的,但是实际上远不如CocosBuilder来的方便、灵活、高效。项目越往后做越不敢用CocoStudio。现在不得不重新用CocosBuilder全部重新做一遍。