HelloWorld在SONY C1905 WebView上无法正常运行

问题已解决,感谢cocos2d-js开发团队的技术支持。原因是webview开启了硬件加速。

cocos版本:cocos2d-js-v3.3
手机:SONY C1905,安卓4.3系统
问题:自己公司的App,上面webview调用cocos2d-js的HelloWorld时,无法正常运行。
HelloWorld通过cocos new HelloWord –l js命令创建,发布到外网服务器上面,
使用的cocos2d-js-v3.3-lite.js(其中完整版本跟lite版本都使用过,并且也发布过通过命令cocos compile -p web -m release打包生成的game.min.js)。
问题描述:资源预加载结束后,HelloWorld开始运行,系统左下角的帧数变化2-3次后停止,
此时HelloWorld正在从底部往上方移动,帧数停止后,当前场景所有动作都停止,HelloWorld字样停止在屏幕下方。
例如给右下角的按钮添加一个打印事件,尽管场景停止,点击按钮时打印事件会被执行。
WebView调用方式:

index.html代码:

Hi ,
你的g_resources在哪定义的,在浏览器上能正常运行吗?

g_resources在resource.js里定义的,在浏览器上可以正常运行,在别的手机上也可以正常运行,只是这款手机。

logcat能找到出错信息吗?

使用adb logcat -s HtmlGameActivity命令并未发现任何错误信息。

试一下把所有action都停止看一下帧率是否还在闪?

我使用debuggap连接到手机测试的时候,有时会在控制台打印ReferenceError: WebSocket is not defined,不过我不确定这是不是引擎打印的错误。

var HelloWorldScene = cc.Scene.extend({
onEnter:function () {
cc.log(‘hello’);
}
});帧数停止后,js继续运行,然后会打印hello。

你引入了WebSocket库? 在console打印出错信息之后,引擎就不动了吗?

我只是运行HelloWorld啊,别的没做修改,引擎启动的时候会不会调用WebSocket呢?这个错误也可能是因为我使用debuggap的原因,console会先打印WebSocket错误,然后再打印其它的打印信息,具体不动发生在哪句代码附近,我这边观察不到。

刚刚的描述可能会有误解,我意思是,打印的websocket错误可能因为我使用debuggap的原因,但不管我用不用debuggap来track错误信息,帧数始终会变化2-3下后停止不动。

引擎启动的时候不会调用WebSocket.

问题很奇怪呀, 在你的机器上用默认浏览器打开可以运行,但是webView又不行。

你试试用其他工具打包可不可以运行?

问题是很奇怪啊,用这手机chrome打开也是没有问题的。其他工具打包指的是什么?

对了,同一个webview在别的手机上运行HelloWorld是没问题的。目前发现的除了SONY C1905,再就是美图手机了。美图手机可以不管,sony这款市场占有率蛮高的。

http://developer.android.com/guide/webapps/debugging.html
你试试这个工具。
将CCBoot.js的_runMainLoop进行改造,如下:
callback = function () {
try{
if (!self._paused) {
director.mainLoop();
if(self._intervalId)
window.cancelAnimationFrame(self._intervalId);
self._intervalId = window.requestAnimFrame(callback);
}
}catch(ex){
console.log(ex.stack);
}
};

看看会输出什么。

对了,你用的是release 模式打的包吗?高级压缩模式吗?

我是通过cocos compile -p web -m release命令来打包的,之前是使用的lite版本,我刚刚按你的方法试了下,不会输出任何东西,对了,左下角的帧数像多个重合在一起似的,如图。

:12:
我手上没有Sony的机子呀, 所以我只能推断。

你可以加我的QQ: 435827312 .

看了你传给我的视频,我发现你的游戏加载时都出现了两个Scene, 有两套帧率在闪。我想可能是这一个原因之一。

或许你创建了两个WebViewActivity,或没有关掉相应的webView实例?

问题解决了,万分感谢,不是开启了2个webview,是因为开启了硬件加速。