我做了一个网游,页面切换或最小化时,所有js暂停,怎么解决?

这是cocos官网的打飞机游戏演示
http://cocos2d-x.org/docs/manual/framework/html5/zh

我用的是谷歌浏览器,只要切换一个页面,或最小化,这个游戏就会暂停

做的是网游,不允许暂停,请问如何实现?

现在游戏都做好了,卡在这个环节,急死了,请大家帮忙

5楼的回复是最好的方法,大家可以参考

总不能说cocos2d-html5不能做网游把,请前辈告诉我方法

这个本来就是这样的啊,和coco没关系了

我只知道flash网页游戏有办法,js也许是浏览器故意做的

楼主是如何解决的呢

http://stackoverflow.com/questions/5927284/how-can-i-make-setinterval-also-work-when-a-tab-is-inactive-in-chrome

有很多办法可以让代码在chrome的background模式运行的,可是我觉得最好的办法还是失焦的时候保存下状态,重新获得焦点的时候,计算下时间,把中间后台时间的所有的数据都计算完毕。

至于如何拿到失焦和获得焦点的事件,eventmanager是不二之选。

感谢楼上的回复!方法棒极了
不过在cocos里还是解决不了,因为cocos里有大量定时器,总不能全改成webworker把。这个功能还是算了

抱歉,回复迟了。切换标签页游戏暂停,是浏览器的问题导致的。这种切换回来的恢复操作可以获取页面的打开的事件,核对服务器的状态,更新到页面上,
另外,ios的情况也是这样,切换到后台,一切就停止了。切换回来,又继续。

:2:其实没必要那么纠结,参考winJS软件或者IOS软件在后台恢复到前台的逻辑,它也是最小化的时候保存当前状态,恢复的时候,取出数据并且和服务器核对(或者本地核对时间等)然后检测当前场景,还原某些sprite,和部分的action,有些特效运行到一半的不好还原其实都可以直接忽略了,,,看到很多程序都是这样的。:10:

cocos和浏览器关系就和winJS和windows一样,windows要关闭并且释放winJS的内存,程序一点办法都没有。只能是等重新触发的时候,吧东西重新加载进内存。

在客户端不能做到最小化也运行吗?只能在恢复页面的时候同步服务器的状态做更新??

但假如时多人游戏 就有问题了

//bgWorker.js
function timedCount()
{
postMessage(1);
setTimeout(“timedCount()”, 1000 / 60);
}

timedCount();

//要后台跑的scene加上这个
onEnterBackground : function()
{
console.log(“游戏进入后台”);
if(!cc.sys.isNative)
{
this.bgWorker = new Worker(“res/bgWorker.js”);
this.bgWorker.onmessage = function(evt)
{
cc.director.mainLoop();
};
}else {

    }
},

onEnterForeground : function()
{
    console.log("游戏回到前台");

    if(!cc.sys.isNative)
    {
        if(this.bgWorker != null)
        {
            this.bgWorker.terminate();
            this.bgWorker = null;
        }
    }else{

    }
}

不用每个计时器都用一个worker,一个worker在进后台的时候按帧率,每隔一段时间调一次cc.director.mainLoop()就行了

cc.eventManager.addCustomListener(cc.game.EVENT_HIDE, this.onEnterBackground.bind(this));
cc.eventManager.addCustomListener(cc.game.EVENT_SHOW, this.onEnterForeground.bind(this));

真的可以吗? 试试!谢谢!

是什么? 你的worker.JS …只有 timedCount 方法啊。。。。。可以给个完整的代码麽谢谢。。

还有postMessage(1); 是哪里来的方法。。。找不到

这个就是全部代码了,可以用的,在上线项目有用的
postMessage是h5的worker的既定用法
http://blog.jobbole.com/30592/

你这个方法 为什么 我切换2次后 就会很卡 然后卡死了。。。

siuwaitat< 1分钟
你这个方法 为什么 我切换2次后 就会很卡 然后卡死了。。。

你好 ,请教下 worker.js放哪个路径下才能加载到,我放在resources下好像不行

好奇怪 , worker 线程中setTimerout 好慢,设置时间也不管用