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

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

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

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

前四期的总结:
第一期: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

我想让王大推荐一个跨平台的网络库。:14:

王哲,你好!我最近在开发游戏的时候遇到一个问题。CCNode的addChild是按zOrder排序的,但是我需要按我自己的方式排序,比如说祖玛类似游戏吧,需要在节点中间插入一个节点,这个插入的节点我需要按我的顺序插入。我在源码里面搜索了下,发现有CCTableView,不过这个东西看上去比较难用啊。目前我想到有两种方法:
1、每次插入还是按addChild(不过这样子如果不指定zOrder,默认是插到末尾去了),然后遍历的时候按我实际的数据顺序去查找节点,这种方法效率比较低,然后又不直接。
2、自己实现一个“容器”类,在内部按我插入的顺序排序Node。(我想用这种方法来实现,不过貌似还是要做好多事情)

我想问的就是,还有什么好的方法吗,有没有其它更好的思路来简单实现呢?

谢谢!

王哲,我又来提让你头疼抓狂的问题了,嘻嘻。

是一个有关回调函数参数的建议,大部分回调函数都会带上Object*参数,如果我们要使用更多的参数呢?对于接受lamba的回调我们可以这么简单的做到

(Objcet×){ fun(XX1,XX2); }


```


既然我们可以用如此简单的方法做到,为什么还要默认的有Object×参数,当我们不需要这个参数的时候,是否让我们的代码看起来有那么一点多余?

cc3.0中layer的touch系统更新了,采用了addEventListener的方式。但在jsb中绑出来的listener和cpp中的listener是分别独立的,这样一来就没法在js的onTouchBegan回调中获取cpp里返回的true/false…

Cocos2d-x 3.0 JSB支持Remote Debugging 在ios机器。但是测试过2.2上使用Remote Debugging调试不成功。

Firefox Developer Tools 显示 “Error: connection timeout.”

Xcode debugger 显示 “cocos2d: debug server : client connected”.

请问2.x版本什么时候能支持这个调试操作呢,3.0没出正式版,而且html5 3.0也没出来,不敢用啊~

目前Cocos2d-x的各个版本中,一些接口的命名以及参数列表会有一些比较大的变化。请问王哲大神,目前的Cocos2d-x v2.2.1版会成为事实上的接口命名规范吗?

你好:

这是什么原因呢?是调用参数不正确吗?

cc.CallFunc.create(this.onRemoveSprite,this);
在执行this.onRemoveSprite函数时报错:
Assertion failure: !cx->isExceptionPending(), at …/jscntxtinlines.h:330

onRemoveSprite:function (sender) {
var p = sender.getParent();
if § {
p.removeChild(sender, true);
}

    }

— Begin quote from ____

引用第1楼52mary于2013-12-26 11:34发表的 :
我想让王大推荐一个跨平台的网络库。:14: http://www.cocoachina.com/bbs/job.php?action=topost&tid=175781&pid=864626

— End quote

同样求王大推荐网络库。

websocket,cocos2d-x里面有例子 :14:

— Begin quote from ____

引用第1楼52mary于2013-12-26 11:34发表的 :
我想让王大推荐一个跨平台的网络库。:14: http://www.cocoachina.com/bbs/job.php?action=topost&tid=175781&pid=864626

— End quote

libcurl, poco, websocket

— Begin quote from ____

引用第2楼小鑫于2013-12-27 10:43发表的 :
王哲,你好!我最近在开发游戏的时候遇到一个问题。CCNode的addChild是按zOrder排序的,但是我需要按我自己的方式排序,比如说祖玛类似游戏吧,需要在节点中间插入一个节点,这个插入的节点我需要按我的顺序插入。我在源码里面搜索了下,发现有CCTableView,不过这个东西看上去比较难用啊。目前我想到有两种方法:
1、每次插入还是按addChild(不过这样子如果不指定zOrder,默认是插到末尾去了),然后遍历的时候按我实际的数据顺序去查找节点,这种方法效率比较低,然后又不直接。
2、自己实现一个“容器”类,在内部按我插入的顺序排序Node。(我想用这种方法来实现,不过貌似还是要做好多事情)

我想问的就是,还有什么好的方法吗,有没有其它更好的思路来简单实现呢?
http://www.cocoachina.com/bbs/job.php?action=topost&tid=175781&pid=864961

— End quote

主要看你排序后是要用来做什么,排序后用来做逻辑?还是决定绘制顺序?
如果不影响绘制顺序,只是逻辑里面自己判断的话,那么可以用CCNode::setUserData或者setTag来实现。但要注意setUserData所附上的指针要自己管理内存释放。
对应的,你在逻辑里面可以getUserData取出在初始化时候写入node的自定义顺序,做后续处理。

— Begin quote from ____

引用第6楼115379624于2013-12-27 14:27发表的 :
Cocos2d-x 3.0 JSB支持Remote Debugging 在ios机器。但是测试过2.2上使用Remote Debugging调试不成功。

Firefox Developer Tools 显示 “Error: connection timeout.”

Xcode debugger 显示 “cocos2d: debug server : client connected”.
http://www.cocoachina.com/bbs/job.php?action=topost&tid=175781&pid=865062

— End quote

JSB调试功能目前暂无计划做到2.2里面

— Begin quote from ____

引用第5楼faseer于2013-12-27 12:45发表的 :
cc3.0中layer的touch系统更新了,采用了addEventListener的方式。但在jsb中绑出来的listener和cpp中的listener是分别独立的,这样一来就没法在js的onTouchBegan回调中获取cpp里返回的true/false… http://www.cocoachina.com/bbs/job.php?action=topost&tid=175781&pid=865023

— End quote

你好,listenner还没有JSB绑定,虽然现在新的touch事件是在c++层是eventlistenner机制,但是我们做到了行为一致,所以不用在意这个问题

— Begin quote from ____

引用第7楼流浪的于2013-12-27 14:33发表的 :
目前Cocos2d-x的各个版本中,一些接口的命名以及参数列表会有一些比较大的变化。请问王哲大神,目前的Cocos2d-x v2.2.1版会成为事实上的接口命名规范吗? http://www.cocoachina.com/bbs/job.php?action=topost&tid=175781&pid=865065

— End quote

你看一下v3.0就会疯掉了。Ricardo主导3.0之后改掉很多,我觉得他确实设计得更好。2.2.1还是太Objective-C风格了。

— Begin quote from ____

引用第12楼walzer于2013-12-27 15:10发表的 :

主要看你排序后是要用来做什么,排序后用来做逻辑?还是决定绘制顺序?
http://www.cocoachina.com/bbs/job.php?action=topost&tid=175781&pid=865094

— End quote

我搜索了下代码,发现编辑器的UIPageView中有类似的逻辑,里面用了一个辅助的CCArray来保存页面的顺序。

— Begin quote from ____

引用第13楼walzer于2013-12-27 15:15发表的 :

JSB调试功能目前暂无计划做到2.2里面
http://www.cocoachina.com/bbs/job.php?action=topost&tid=175781&pid=865096

— End quote

哎,那不就是逼着用3.0开发jsb~现在3.0还不稳定吧。:9:

— Begin quote from ____

引用第8楼zhijianming于2013-12-27 14:42发表的 :
你好:

这是什么原因呢?是调用参数不正确吗?

cc.CallFunc.create(this.onRemoveSprite,this);
http://www.cocoachina.com/bbs/job.php?action=topost&tid=175781&pid=865071

— End quote

你好,具体是哪一行出问题呢?

其实你不用获取父级再removeChild, 你可以用removeFromParent

— Begin quote from ____

引用第17楼115379624于2013-12-27 15:23发表的 :

哎,那不就是逼着用3.0开发jsb~现在3.0还不稳定吧。:9:
http://www.cocoachina.com/bbs/job.php?action=topost&tid=175781&pid=865107

— End quote

呵呵,不然为什么Siri不给iphone4使用呢? 3.0现在还蛮稳定的