본문으로 바로가기

[드래곤플라이트 만들기]makeMissile / moveMissile / checkMissile

category Javascript 2019. 11. 13. 18:00

어려웠던점. 1

//오류메시지뜸
function checkMissile(){
  for(var i=0; i<missList.length; i++){
    var tmp=missList[i];
    if(missList[i].y<-25){
      tmp.splice(i, 1);
    }
  }
}


// 정상 출력
function checkMissile(){
  for(var i=0; i<missList.length; i++){
    var tmp=missList[i];
    if(tmp.y<=-25){
      missList.splice(i, 1);
    }
  }
}

미사일이 화면 밖으로 나가면 해당 미사일 객체는 배열에서 자동으로 삭제되도록하여 컴퓨터 과부하를 막고자함.

그런데

tmp.splice(i,1);으로 배열에 있는 객체를 삭제하려고 하니 

TypeError: splice is not a function

에러 메시지가 뜸. 

이유는  

splice();는 배열에 있는 컨텐츠만 삭제할 수 있는 함수인데, tmp는 missList 배열의 안에 있는 객체를 참조한 변수이다.

따라서 splice가 작동하지 않음.

missList를 참조하니 잘 됨. 

 

 

어려웠던점. 2

//6. 미사일의 정보를 담을 배열 만들기
var missList=[];
		...
//6. 미사일 이미지 그리기
setInterval(function(){
		...
  for(var i=0; i<missList.length; i++){
  var tmp=missList[i];
  context.drawImage(missImg, tmp.x-25, tmp.y-25, 50, 50);
  		...
  }
}, 10);

//6. 미사일 객체 생성
function makeMissile(){ 
  if(count%10!=0){
  	return;
  }
  var obj={}
  obj.x=unitX;
  obj.y=unitY;
  // obj.isDead=false;
  missList.push(obj);
}

미사일이 객체와 각각의 객체가 그려지는 시점이 이해가 잘 안 됬음.

미사일 객체가 생성되는 시점 : setInterval이 1번 돌때마다 1번씩 생성, 그러나 if문을 주었기 때문에 setInterval이 10번돌면 1번씩 생성됨.

생성된 미사일 객체가 그려지는 시점 : setInterval이 실행되는 시점에 for문 안에서 생성된 각각의 객체의 위치를 그려준다.

'Javascript' 카테고리의 다른 글

for구문 / array(배열) 연습  (0) 2019.11.17
[드래곤플라이트 만들기]makeEnemy / moveEnemy / checkEnemy  (0) 2019.11.13
동기(synchronous) vs 비동기(asynchronous)  (0) 2019.11.08
반복문  (0) 2019.11.06
key값과 value 값  (0) 2019.11.06