2017-12-25 4 views
-2

私はhtml5とjavascriptを使ってゲームを作っています。ファイルは「空間侵略者」の一種です。私はレーザービームが敵と接触するかどうかをチェックする機能を持っています。レーザビームが作成されるときただし、次のエラーが生成されます。このプロパティが定義されていると、Javascriptで「Uncaught TypeError:未定義のプロパティを読み取れません」というメッセージが表示されるのはなぜですか?

index.html:94 Uncaught TypeError: Cannot read property 'getTopY' of 
undefined at laserCollision (index.html:94) 

laserCollision()関数:

function laserCollision() { 
    for(var i = enemyArray.length - 1; i >= 0; i--) { 
     for(var j = playerLaserBeamsArray.length-1; j >= 0; j++) { 
      // make sure not to access an object which does not exist. 
      if(playerLaserBeamsArray[j] == 'undefined') break; 
      // check if laser beam is at correct y coordinate 
      if(playerLaserBeamsArray[j].getTopY() > enemyArray[i].getY() && playerLaserBeamsArray[j].getBottomY() < enemyArray[i].getY()) { 
      // check if laser beam is between the enemy's furthermost left and right x-coordinates 
      if(playerLaserBeamsArray[j].getLeftX() <= enemyArray[i].getLeftX() && playerLaserBeamsArray[j].getRightX() <= enemyArray[i].getRightX()){ 
        score ++; 
        enemyArray[i].splice(i, 1); 
       } 
      } 

     } 
    } 

ゲームで遊ぶことができる。 https://ruben-krueger.github.io/Interstellar-Invaders/

とgithubのレポは: https://github.com/Ruben-Krueger/Interstellar-Invaders

+2

**文字列定数** ''undefined''は値' undefined'と同じではありません。 – Pointy

答えて

1

あなたは書いてあります:

for(var j = playerLaserBeamsArray.length-1; j >= 0; j++) 

あなたの "j"は無制限に成長します。あなたが "j ++"ではなく "j - "と書いたかったようです。

次へ:

playerLaserBeamsArray[j].getTopY() 

jは、あなたの配列インデックスが範囲外であるbacause playerLaserBeamsArray [j]は、未定義になったすぐに、無限大になるにつれて。

関連する問題