2017-12-06 12 views
1

私は最終プロジェクトのために簡単な反応時間ゲームを作っています。 私はJavaScriptを使用してゲームの機能を強化しています。私のコードの大半は正常に動作していますが、私には条件文があります。 ここではこれが全体のコード、次のレベルにゲームを進める必要があるだけの機能ではありませんコード条件文で変数値が認識されない

function fireTime() { 
    setTimeout(ShotsFired, time); 

    function ShotsFired() { 
    fire.style.visibility = "visible"; 
    createdTime = Date.now(); 
    console.log(createdTime); 
    EnemyTime = Math.floor((Math.random() * 1000) + 400); 
    setTimeout(EnemyShoot, EnemyTime) 

    function EnemyShoot() { 
     console.log(EnemyTime); 
     gameplay(); 
    } 

    function gameplay() { 
     reactionTime = -(createdTime - clickedTime); 
     var EnemyTime; 
     console.log(reactionTime); 
     if (reactionTime < EnemyTime) { 
     alert("Wow you beat him! Congrats!"); 
     fire.style.visibility = "hidden"; 
     clickedTime = 0; 
     createdTime = 0; 
     reactionTime = 0; 
     scavnumber++; 
     BGnumber++; 
     DesertBG.src = "images/Desert" + BGnumber + ".png"; 
     scav.src = "images/scav" + scavnumber + ".png"; 
     fireTime(); 
     } else { 
     EndScreen.style.visibility = "visible"; 
     } 
    } 

です。

どんな理由であれ、reactionTimeがEnemyTimeよりも小さい場合でも、EndScreenが表示されます。

誰でもこれを引き起こす可能性がありますか?

+0

var EnemyTime; <<< undefinedは0に変換されます。行を削除し、関数の外側で正の値に初期化します。 – mplungjan

+0

@Satpalは初期化されません。 – mplungjan

+0

@mplungjan、私はOPがグローバル変数を定義し、スコープの問題が私に見えて、私はもっと多くの情報/コードを共有するように彼を尋問しています – Satpal

答えて

0

敵の時間の計算には400.0を使用します。それ以外の場合は0/1秒になり、ミリ秒は使用せず、Math整数を使用しています。具体的には、あなたの敵の時間を浮動小数点数として投げてください。あなたがそれを印刷するなら、おそらく整数です。 101/50 = 2.05、それは2ではないので、50.0で除算し、すべての2番目の/ msタスクで同じと思うならば、将来あなたは何時間もかかってしまうでしょう。

EnemyTimeをすべてのスクリプトのグローバル変数として使用すると、現時点では、すべてのスクリプトでEnemyTimeという別の機能を持つコードが使用されます。後者は値がありません。

他の条件が成立しているかどうかを確認するにはprintを使用し、敵時間値を印刷するにはprintを指定します。

これは、混乱している変数を印刷することで、この問題を解決する方法です。

関連する問題