벽돌깨기 게임 만들기(4)

열심히하시는개발자·2020년 12월 4일
0

5. Paddle과 키보드 제어

5.1 Paddle 정의

  • 움직이는 공을 치기 위해서는 paddle이 필요하다.
var paddleHeight = 10; //높이
var paddleWidth = 75;  // 넓이
var paddleX = (canvas.width-paddleWidth)/2;  // x축 위에 시작지점
  • 위 코드와 같이 paddle에 관련된 변수를들을 선언해준다.
function drawPaddle() {
    ctx.beginPath();
    ctx.rect(paddleX, canvas.height-paddleHeight, paddleWidth, paddleHeight); 
    ctx.fillStyle = "green";
    ctx.fill();
    ctx.closePath();
}
  • drawPaddle() 함수를 만들어 paddle을 그려준다.
  • beginPath() ~ closePath() 설명은 벽돌깨기 게임 만들기(1)를 참조

5.2 Paddle 제어

  • paddle은 사용자의 키보드 컨트롤에 반응을 해야한다. 그렇기 때문에 키보드 컨트롤을 할 수 있는 코드가 필요하다. 코드는 다음과 같다.

1. 왼쪽 or 오른쪽 컨트롤 버튼이 눌렸는지 확인하는 두개의 변수

var rightPressed = false;
var leftPressed = false;
  • 처음에는 컨트롤 버튼이 눌려지지 않은 상태이므로 right과 left 둘 다 기본값 false이다.

2. keydown과 keyup 이벤트 리스너 버튼이 눌렸을 때 paddle의 움직임을 조종할 수 있는 코드

document.addEventListener("keydown", keyDownHandler, false);
document.addEventListener("keyup", keyUpHandler, false);
  • 키가 눌렸음을 인식하기 위해 EventListener를 설정한다.
  • 키가 눌리면 keydown이벤트 , 키에서 손을 때면 keyup이벤트가 발생한다.

3. 버튼이 눌렸을 때 keydown과 keyup 이벤트를 핸들링하는 두개의 함수

function keyDownHandler(e) {
    if(e.keyCode == 39) {
        rightPressed = true;
    }
    else if(e.keyCode == 37) {
        leftPressed = true;
    }
}

function keyUpHandler(e) {
    if(e.keyCode == 39) {
        rightPressed = false;
    }
    else if(e.keyCode == 37) {
        leftPressed = false;
    }
}
  • keyCode는 눌려진 키에 대한 정보를 가지고 있다. 만약에 keyCode == 37면 왼쪽 방향키, keyCode == 39면 오른쪽 방향키의 정보를 얻을 수 있다.

4. paddle이 왼쪽 혹은 오른쪽으로 움직이는 기능

if(rightPressed && paddleX < canvas.width-paddleWidth) {
    paddleX += 7;
}
else if(leftPressed && paddleX > 0) {
    paddleX -= 7;
}
  • 왼쪽 방향키를 누르면, paddle은 좌측으로 7px 움직이고, 오른쪽 방향키를 누르면 우측으로 7px 움직인다. 하지만 좌측 또는 우측으로 계속 움직이다 보면 캔버스 밖으로 사라지기 때문에 paddle이 캔버스 안에서만 움직이도록 계산해야한다.
  • paddleX의 위치는 캔버스 왼쪽 끝 0 위치와 오른쪽 canvas.width-paddleWidth 에서 움직이게 된다.

0개의 댓글