2017-11-10 7 views
1

私はこれをブラウザのクラッシュと呼んでいますが、無限ループのようなものです。私はほとんどjavascriptの専門家ではありません。何が起こるのか、ゲームは終わりを迎え、ブラウザ(この場合はfirefox)はちょうど繰り返されます。フリーズ、スナップ、エラーメッセージ、何もありません。ブラウザを完全に閉じる必要があります。今これについて本当に奇妙なことは、完璧に細かいオフラインで動作することです。これはちょうどオンラインで起こります。もう1つの奇妙な点は、ゲーム内で初めてリセットされたとき(コード内)です。これはオンラインとオフの両方で完璧に機能します。ちょうど2回目。このよう は:オンラインとオフ以上の作品[OK]をphaser-framework javascript「無限ループ」「ブラウザクラッシュ」タイマー

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"; 
    } 
    } 
} 

} 

OK、それは、あなたがそれを呼び出すために好きなクラッシュ、不定詞のループを、フリーズ、それがオンラインendgame.htmlに直接行くオフライン。 誰もが理由を知っていますか? これで何時間も何時間も費やしました(この部分をやったプログラマは消えています)。 2週間前にコードに戻りました。同じこと、つまり無限ループです。 これで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イベントハンドラに渡されるコールバックは、時間が来たときでも実行されます。

これで

か何か:

VAR:とにかく 機能(SETTIMERと2 setIntervals)

OR

function clearTimer() { 
    clearInterval(intervalTimer); 
} 

は、ここでは21秒のタイマーに関連するコードのセクションがありますmaxTime = 21; // in SECOND var timerEvent = null;

タイマー(3秒のアニメーションの後に)追加されるときは、この(「アニメーションを終了し、タイマADD」)

に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); 
} 

----------->と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サルベージ操作前に、このような何かを行う。

+0

endgame.htmlファイルには何がありますか? –

+0

たぶん私は十分にはっきりしていなかった...ゲームが終わると、プレイヤーは完全にゲームから取り出され、 "window.location"を使って別のhtmlページ(endgame.html)に転送されます。問題は...これは、オフラインで正常に動作しますが、オンラインでは、ブラウザがクラッシュし、フリーズし、無限ループですか?いいえ、ブラウザをクラッシュさせて、勝ったプレイヤーに報酬を与えたくない。 – DjangPhaser1

+0

問題を再現するための最小限の例を共有できますか? –

答えて

0

私はそれが何かを発見しました。

それはのように、calloverがありませんでした:

するvar callGameover =偽;

と......私は「無限ループ」を引き起こすのに十分だったが、どうやらそれは知りませんでした

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

。上記を入れてループを消してください!