2017-12-28 17 views
1

내 것과 비슷한 질문이 있지만 내 경우에는 작동하지 않아 더 많은 시간을 낭비 할 수 없다는 것을 알고 있습니다.JS 게임 - 정의되지 않은 유형 오류의 속성을 설정할 수 없습니다.

나는 JS를 배우기 때문에 쉬운 팩맨 게임을 작성하려고합니다. 이 경우, 팩맨이 파워 업을 먹을 때마다 모든 활성화 된 유령은 약한 유령으로 변해야합니다. 내가 연주하고있는 동안 때

문제는 와서 나는 파워 업, 게임이 말하는 충돌이 잡아 :

Uncaught TypeError: Cannot set property 'isWeak' of undefined. 

는이 질문에 모든 코드를 게시되지 않은합니다. 오류가 발생하는 주요 부분 (나는 그렇게 생각합니다). main.js에서

내 코드 : ghost.js에서

var activeGhosts = []; 
var powerups = []; 
for (var i = 0; i < powerups.length; i++) { 
    if (pacman.collision(powerups[i])) { 
     makeWeak(); 
     powerups.splice(i,1); 
    } 

} 
function makeWeak() { 
    for (var i = 0; i < activeGhosts.length; i++) activeGhosts[i].isWeak = true; 
} 

내 코드 :

function Ghost(x,y,img){ 
this.x = x; 
this.y = y; 
this.img = img; 
this.direction = 0; 
this.radius = 16; // half of 32 px because every image is 32x32 px 
this.crash = false; 
this.isWeak = false; 

this.show = function() { 
    if (this.isWeak) { 
     image(weakghostimg, this.x, this.y); 
    } else { 
     // img can be the all the different ghosts 
     image(img, this.x, this.y); 
    } 
}; 
+1

가 어떻게 새로운 귀신을 생성하고 activeGhost 배열에 넣어입니까? – Andy

+0

어떤 함수 사이에 링크가 보이지 않습니다. 또한 어느 라인이 에러를 던지고 있는지 보여주십시오. – brk

+0

배열에 [고스트의 인스턴스를 추가하면 코드가 작동하기 때문에] (https://jsfiddle.net/0rkjLgLo/) 질문 만합니다. . – Andy

답변

0

나는 다른 기호를 가진 23x22 열 수있는 플랫폼을 가지고있다. "다시"감지하면 그 위치에 붉은 유령을 만들어야한다는 뜻입니다.

var ghosts = []; // array to draw them 
var activeGhosts = []; // array to keep them alive and moving around 

for (var i = 0; i < plat.rows; i++) { 
    for (var j = 0; j < plat.columns; j++) { 
    if (plat.platform[i][j] === 're') ghosts.push(new Ghost(j * 32, i * 32, redGhostimg)); 

이것은 유령을 activeGhosts 배열에 삽입하는 데 사용하는 기능입니다. 유령의 움직임을 시작하기 위해 매 2 초마다 한 유령을 다른 배열로 이동시킵니다.

function ghostsEscape() { 
if (ghosts.length > 0) { 
    var tempGhost = ghosts.pop(); 
    tempGhost.escape(plat); 
    activeGhosts.push(tempGhost); 
} else if (ghosts.length === 0) return; 
setTimeout(ghostsEscape, 2000); 

}