2017-12-25 19 views
-2

나는 html5와 javascript를 사용하여 게임을 만들고 있습니다. 이 파일은 "우주 침략자"의 한 버전입니다. 레이저 빔이 적과 접촉하는지 확인하는 기능이 있습니다. 레이저 빔이 생성 될 때 그러나, 다음과 같은 오류가 발생한다 :Javascript가 "Uncaught TypeError :이 속성이 정의 된 경우 정의되지 않은 속성을 읽을 수 없습니다"를 생성하는 이유는 무엇입니까?

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

laserCollision() 함수 : https://ruben-krueger.github.io/Interstellar-Invaders/

그리고 GitHub의 :

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://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로서 곧 playerLaserBeamsArray [J]에 정의 된 어레이 인덱스가 범위를 벗어나 bacause은 무한대로 성장한다.