구현하려고 하는 게임 방식
- 시작 전엔 캐릭터도 움직이지 않음
- 스타트를 누르면 스타트버튼이 사라지고 점수표가 뜨면서 시작
- 유령이 내려오고 캐릭터와 부딪히면 점수가 올라감
- 잡을수록 유령의 스피드가 올라가고 나오는 간격이 짧아짐
- 유령이 땅에 닿게되면 게임이 끝
btnclass
btnclass hide
처럼 넣고 빼고 했었는데, classList.toggle()
을 사용offsetLeft
로 캐릭터의 위치값을 구하고, style.left
를 수정하는 방식으로 작업keydown
이벤트 사용document.addEventListener('keydown', (e) => {
if( e.key === 'ArrowLeft' ) {
//내용
} else if ( e.key === 'ArrowRight' ) {
//내용
} else {
return;
})
1마리 잡을때마다 1점씩 올라가게 하면서 5점마다 round를 올라가게 하였다.
round 올라갈때마다 변하는건? 유령의 스피드와 생성속도!
테스트하려고 게임을 실행하다가 깜짝놀랐다
setInterval 값을 감소만 시켜줬더니 0이 되서 쏟아져 나왔나보다....
if문으로 속도와 생성시간의 min값을 설정해 주었다
++ 라운드의 짝수(스피드) / 홀수(생성속도)를 나눠서 변경되도록 추가
유령이 내려가는 동작을 실행하는 인터벌의 clearInterval만 적용이 안되서
종료 후에도 끝나는 상황에 내려오고 있던 유령들이 계속 내려와서
땅에 닿았을 때 실행되는 코드들을 작동시킨다...
( 화면에 남아있는 내려오는 유령의 수만큼 game over의 반복 ㅠㅠ )
=> 야매(?)로 현재 DOM에 남아있는 유령들의 element를 remove()해줘도 setInterval이 유령처럼 진행되서 땅에 박는 현상으로 위와 같이 동작되었다
class문으로 작업 해 보는것도 처음이었고,
계속 생성되는 setInterval을 각각 어떻게 clear해주어야 하는지 모르는게 문제였던 것 같다.
this.intervalName = setInterval() 해준값을 console로 확인했을 때 왜 숫자가 나오는가 의문을 갖고 뭔가 값이 중간에 꼬였다고 생각하고 넘어갔었다.
몇시간을 헤메다 야매로도 해결이 안되서 결국 다시 되돌아가서 console을 찍어보다 이 숫자에 대해 큰 의문이 생겨 검색을 해보니..
setInterval은 숫자타입의 아이디를 반환 한다는 것!!!
해당 숫자 아이디는 인터벌함수를 호출할 때 마다 숫자가 올라가진다.
생성될 때마다 실제로 콘솔에 찍어보니
그럼 어떻게 해결하면 좋을까?? 생각을 해 보았다.
clearInterval(this.moveEnemy + i)
해준다결과적으로 진행중인 유령이 멈추는긴 했다... ㅎ
new Name(this)
로 다른 claas에서 사용이 가능하다는 것을 알게 되었다깃허브 : https://github.com/sseung-i/enemy-rain-game
공부하며 정리&기록하는 ._. 씅로그