【发布时间】:2017-11-10 15:05:55
【问题描述】:
我称之为浏览器崩溃,但更像是一个无限循环——我几乎不是 javascript 专家。发生的事情是游戏结束了,浏览器(在本例中为 firefox)继续运行——更像是冻结,没有快照,错误消息,什么都没有。您必须完全关闭浏览器。现在,真正奇怪的是这工作得非常好——离线。这只是发生在网上。另一个奇怪的事情是(在代码中)它第一次重置游戏 - 这在在线和离线时也能完美运行。只是第二次。 像这样:(这是其中的一部分)
function resetGame(){
//reset game
好的,上面的工作在线和离线,玩家被淘汰出游戏,重新开始。然后;
function moveToEndGame(){
console.log("TIMER END");
var twn = game.add.tween(bg).to({alpha:0},tween_speed,"Linear",true);
twn.onComplete.addOnce(function(){flagGameover = true;},this);
}
if(!flagGameover && !star.visible && idx_bullet < bullet_array.length)
initBullet();
else{
if(flagGameover){
console.log("GOTO GAMEOVER");
window.location = "../endgame.html";
}
}
}
}
好的,离线它直接进入 endgame.html 在线,它冻结,崩溃,不定式循环,无论你想怎么称呼它。 有人知道为什么吗? 好的,在这上面花了好几个小时(做这部分的程序员已经消失了)。甚至回到两周前的代码,是的,它做同样的事情 - 无限循环。 所以现在我想找到一种在 21 秒计时器结束时“中止 javascript”的方法。我在其他帖子中遇到过很多事情,例如:
// creates a new exception type:
function FatalError(){ Error.apply(this, arguments); this.name = "FatalError"; }
FatalError.prototype = Object.create(Error.prototype);
或
function javascript_abort()
但是……
即使你抛出异常,它也只会杀死当前的事件循环。传递给 setTimeout 或 DOM/XMLHttpRequest 事件处理程序的回调在时机成熟时仍会运行。
或与此有关的东西: 函数(setTimer 和两个 setIntervals)
或
function clearTimer() {
clearInterval(intervalTimer);
}
无论如何,以下是代码中与 21 秒计时器有关的部分:
var maxTime = 21; //在第二个 var timerEvent = null;
这是添加计时器的地方(在 3 秒动画之后)
console.log("完成动画并添加计时器");
还有这个
timerEvent = game.time.events.add(Phaser.Timer.SECOND * maxTime, moveToEndGame, this);
},this);
function moveToEndGame(){
console.log("TIMER END");
var twn = game.add.tween(bg).to({alpha:0},tween_speed,"Linear",true);
twn.onComplete.addOnce(function(){flagGameover = true;},this);
}
-----------> 和 THE END(或应该是结束)
if(!flagGameover && !star.visible && idx_bullet < bullet_array.length)
initBullet();
else{
if(flagGameover){
console.log("GOTO GAMEOVER");
window.location = "../endgame.html";
}
}
}
}
那么是否有可能在 21 秒结束时终止计时器以及其他所有内容,让玩家转到 endgame.html ?????????我没有提到移相器 console.log - 可以这样做吗?以前任何人都做过这样的事情,基本上是一个javascript打捞操作。
【问题讨论】:
-
endgame.html 文件中有什么内容?
-
可能我说的不够清楚...当游戏结束时,玩家完全退出游戏并使用“window.location”转移到另一个html页面(endgame.html) ” 问题是....离线工作正常,但在线,浏览器崩溃,冻结,无限循环?不好,不想奖励刚刚获胜的玩家,让浏览器崩溃。
-
你能分享一个最小的例子来重现这个问题吗?
-
你知道关闭 21 秒计时器的更明确的方法吗?或者你能猜一猜吗?或者你听说过 Phaser-framework 控制台日志的问题吗? timerEvent = game.time.events.add(Phaser.Timer.SECOND * maxTime, moveToEndGame, this); },这个);
-
我在游戏开发中添加了另一种解释 - '如何停止与计时器相关的动画和循环' 在这种情况下尝试重现问题是不现实的,可能会转向陷入沼泽的泥潭。大概找几行代码就行了。
标签: javascript infinite-loop phaser-framework