[STS] 버블버블 - 외벽 충돌 시 캐릭터 정지

HootJem's avatar
Dec 04, 2024
[STS] 버블버블 - 외벽 충돌 시 캐릭터 정지
완성된 모습.
notion image
 

 
현재 외벽 충돌 시 충돌 로그가 출력되고 있습니다.
그렇다면 캐릭터가 왼쪽, 오른쪽으로 진행하려는 상태를 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); }
 

notion image
맵의 붉은색에 닿았을 때는 캐릭터가 정지하고, 파란색일때는 캐릭터가 위에 착지해야 됩니다.
다음 게시글에서는 캐릭터가 점프를 통해 착지할 수 있도록 게시글을 작성해 보겠습니다.
 
 
Share article

[HootJem] 개발 기록 블로그