완성된 모습.

현재 외벽 충돌 시 충돌 로그가 출력되고 있습니다.
그렇다면 캐릭터가 왼쪽, 오른쪽으로 진행하려는 상태를
false
로 변경 시켜 주어야 합니다.if(leftColor.getRed() == 255 && leftColor.getGreen()==0 && leftColor.getBlue()==0) {
System.out.println("왼쪽 벽에 충돌함");
player.setLeft(false);
}else if (rightColor.getRed() == 255 && rightColor.getGreen()==0 && rightColor.getBlue()==0) {
System.out.println("오른쪽 벽에 충돌함");
player.setRight(false);
그러나 false 가 되었다고 해도 BubbleFrame 의 아래 코드가 다시 실행되어
키 입력이 발생하면 다시 앞으로 진행합니다. 따라서 캐릭터의 상태를 감지하는 상태를 추가해 주겠습니다.
private void initListener() {
addKeyListener(new KeyAdapter() {
// 키보드 이벤트 핸들러
@Override
public void keyPressed(KeyEvent e) {
switch (e.getKeyCode()) {
case KeyEvent.VK_LEFT:
if (!player.isLeft()) {
player.left();
}
break;
case KeyEvent.VK_RIGHT:
if (!player.isRight()) {
player.right();
}
break;
case KeyEvent.VK_UP:
if(!player.isUp() && !player.isDown()) {
player.up();
}
break;
}
}
// 키보드 해제 이벤트 핸들러
@Override
public void keyReleased(KeyEvent e) {
switch (e.getKeyCode()) {
case KeyEvent.VK_LEFT:
player.setLeft(false);
break;
case KeyEvent.VK_RIGHT:
player.setRight(false);
break;
}
}
});
}
캐릭터는 기본적으로 벽에 충돌하지 않아야 하기 때문에 fase 로 초기화 한 뒤
키보드 이벤트 핸들러에 조건을 추가하겠습니다.
private boolean leftWallCrash;
private boolean rightWallCrash;
조건을 통해 플레이어는 벽에 부딪혔니? = true 일때 핸들러는 실행되지 않도록 설정할 수 있습니다.
@Override
public void keyPressed(KeyEvent e) {
switch (e.getKeyCode()) {
case KeyEvent.VK_LEFT:
if (!player.isLeft() && !player.isLeftWallCrash()) {
player.left();
}
break;
case KeyEvent.VK_RIGHT:
if (!player.isRight() && !player.isRightWallCrash()) {
player.right();
}
break;
case KeyEvent.VK_UP:
if(!player.isUp() && !player.isDown()) {
player.up();
}
break;
}
}
if(leftColor.getRed() == 255 && leftColor.getGreen()==0 && leftColor.getBlue()==0) {
System.out.println("왼쪽 벽에 충돌함");
player.setLeftWallCrash(true);
player.setLeft(false);
}else if (rightColor.getRed() == 255 && rightColor.getGreen()==0 && rightColor.getBlue()==0) {
System.out.println("오른쪽 벽에 충돌함");
player.setRightWallCrash(true);
player.setRight(false);
그러나 한번 충돌하여 ture 로 상태가 변경되면 다시 false 로 변경되는 부분이 없기 때문에 캐릭터는 다시 움직이지 않게 됩니다.
따라서 상태를 false 로 다시 변경하는 조건을 추가하여 완성할 수 있습니다.
else {
player.setLeftWallCrash(false);
player.setRightWallCrash(false);
}

맵의 붉은색에 닿았을 때는 캐릭터가 정지하고, 파란색일때는 캐릭터가 위에 착지해야 됩니다.
다음 게시글에서는 캐릭터가 점프를 통해 착지할 수 있도록 게시글을 작성해 보겠습니다.
- 게임 맵과 캐릭터 추가 https://inblog.ai/hj/sts-버블버블-게임-맵과-캐릭터-추가하기-33126
- 스레드 사용하여 이동하기 https://inblog.ai/hj/sts-버블버블-스레드-사용이동-33335
- 외벽 충돌 시 캐릭터 정지 https://inblog.ai/hj/sts-버블버블-외벽-충돌-시-캐릭터-정지-36946
Share article