【问题标题】:phaser-framework javascript "infinite loop" "browser crash" timerphaser-framework javascript“无限循环”“浏览器崩溃”计时器
【发布时间】: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


【解决方案1】:

我发现了它是什么。

它缺少一个调用,如:

var callGameover = false;

还有……

   if(flagGameover){
    if(callGameover == false){ 
        callGameover = true;
         console.log("GOTO GAMEOVER");
          window.location = "endgame.html";

我不知道这足以导致“无限循环”,但显然是这样。将上面的内容放入并循环消失!

【讨论】:

    猜你喜欢
    • 2018-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多