cocos2d-js 3.0 + pomelo若干问题

  1. 客户端配置

1.1 WEB端

使用的是pomelo 0.9.10,但是pomelo生成项目里的build.js还是老版本,不支持reconnect,用下面连接的版本就可以:

https://github.com/NetEase/chatofpomelo-websocket/blob/master/web-server/public/js/lib/build/build.js

然后在project.json的jsList里直接引用即可:

"jsList" : 
    "src/pomelo-cocos2d-jsb/build.js",

开发工具用的是Webstorm,平时逻辑功能的开发调试还是用WEB比较方便。

1.2 JSB环境

这个是开始在Android环境测试的结果。

在项目目录的frameworks/js-bindings/bindings/script目录下执行:

git clone https://github.com/Netease/pomelo-cocos2d-jsb.git --recursive

这样从pomelo官方下载pomelo在jsb环境下的客户端脚本,然后修改frameworks/js-bindings/bindings/script/jsb.js,在最后一行增加:

require(‘pomelo-cocos2d-jsb/index.js’);

cocos2d-js 3.0 beta已经默认支持websocket,前面的版本还需修改项目目录下frameworks/runtime-src/Classes/AppDelegate.cpp,在头文件声明最后添加:

#include “network/jsb_websocket.h”

然后在sc->start();之前添加如下代码,增加websocket的支持:

sc->addRegisterCallback(register_jsb_websocket);
sc->start();

另外在编译的时候,记得删除project.json的jsList里关于build.js的行,json文件里不能用注释,否则会黑屏。

1.3 IOS的JSB环境
编译IOS的ipa安装包时发现,frameworks/js-bindings/bindings/script/pomelo-cocos2d-jsb目录及以下文件都不会被打包到app里,导致jsb.js运行的时候出错,手机黑屏。正好在cocoachina论坛看到有位同学把pomelo-cocos2d-jsb放到src目录,用project.json的jsList进行加载:

"jsList" : 
    "src/pomelo-cocos2d-jsb/index.js",

还需要修改一下pomelo-cocos2d-jsb/index.js最后几个require的代码:


require(‘src/pomelo-cocos2d-jsb/lib/emitter/index.js’);

window.EventEmitter = Emitter;

require(‘src/pomelo-cocos2d-jsb/lib/pomelo-protocol/lib/protocol.js’);

require(‘src/pomelo-cocos2d-jsb/lib/pomelo-protobuf/lib/client/protobuf.js’);

require(‘src/pomelo-cocos2d-jsb/lib/pomelo-jsclient-websocket/lib/pomelo-client.js’);

这样android和ios就通用了,而且可以方便实现热更新。就是project.json文件针对WEB和JSB有不同,记得打包的时候改一下。

:867:我还没测ios(穷),只是测了windows和android,哈哈

windows下的jsb
会出现
JS: D:/cocos/helloworld/runtime/win32/pomelo-cocos2d-jsb/lib/pomelo-protobuf/lib/client/protobuf.js:505:TypeError: protos is undefined 的错误

你这没头没脑的来一句,神仙才知道是啥原因。

  1. pomelo什么版本
  2. 客户端代码怎么引用
  3. 报错是什么运行阶段,什么地方调用导致

采用方法一,但是app.js中使用var pomelo = window.pomelo;时,pomelo为undefined!还有哪里不对吗

楼上说的方法一是啥?是指用文档里1.1的WEB方式?正常引用了build.js,在你的app.js里直接pomelo.init()就可以了。问题要问清楚,别人才好帮你。

4楼,var pomelo = window.pomelo;
jsb里是么有window对象的

— Begin quote from ____

引用第6楼jpopg于2014-07-23 19:32发表的 :
4楼,var pomelo = window.pomelo;
jsb里是么有window对象的 http://www.cocoachina.com/bbs/job.php?action=topost&tid=209363&pid=1011443

— End quote

那咋办

android情况下出现这个问题 ,求指教

对了 web下是好的