[STS] 버블버블 - 점프하기

HootJem's avatar
Oct 29, 2024
[STS] 버블버블 - 점프하기
제일먼저 플레이어에게 속도를 정해 주겠습니다. 상수이기 때문에 대문자로 적습니다.
// 플레이어 속도 상태 private final int SPEED = 3;
 
그렇다면 플레이어의 이동 메서드에도 좌표 + SPEED 만큼 이동하게 됩니다.
@Override public void right() { System.out.println('R'); right=true; new Thread(()-> { while (right) { setIcon(playerR); x = x+SPEED; setLocation(x, y); try { Thread.sleep(10); // 0.01초 간격 } catch (InterruptedException e) { e.printStackTrace(); } } }).start(); }
 
notion image
up 이 실행되면 보글이는 한 칸 만큼 올라갈 수 있도록 해야합니다.
보통 업을 할 때는 단순히 위로만 올라가지 않고 right+up , left+up 이런 식으로 같이 작동하는 경우가 많습니다.
플레이어는 2가지 이상의 상태를 동시에 가질 수있습니다. 이렇게 2가지를 같이 실행 시키기 위해서는 Thread 가 필요합니다.
 
일단 단순히 올라가는 동작을 작성해 줍니다.
// left + up, right + up @Override public void up() { System.out.println("up"); up = true; new Thread(()->{ for(int i=0; i<100; i++) { y = y - 1; setLocation(x, y); try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } } }).start(); }
실행 시키면 올라가는 모습이 제법 웃깁니다. JUMPSPEED 도 만들어 속도를 주도록 하겠습니다.
notion image
 
i<130/JUMPSPEED 를 해 주어야 항상 동일한 높이만큼 상승을 하게 됩니다.
 
 
// left + up, right + up @Override public void up() { System.out.println("up"); up = true; new Thread(()->{ for(int i=0; i<130/JUMPSPEED; i++) { y = y - JUMPSPEED; setLocation(x, y); try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } } up = false; down(); }).start(); } @Override public void down() { System.out.println("down"); down = true; new Thread(()->{ for(int i=0; i<130/JUMPSPEED; i++) { y = y + JUMPSPEED; setLocation(x, y); try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } } down = false; }).start(); } }
notion image
올라갔다 내려오는 동작이 자연스럽지만 보통 바닥이 있다면 그곳에 멈춰야 하죠 ㅎ…
 
또 다른 문제가 있습니다. 무한으로 up 을 누를 수 있기 때문에 화면을 뚫고 끊임없이 상승할 수 있다는 점입니다.
캐릭터가 up 이 아니고, down 중이 아닐 때만 up 동작을 하도록 설정해 줍니다.
case KeyEvent.VK_UP: if(!player.isUp() && !player.isDown()) { player.up(); } break;
 
다음 시간에는 캐릭터가 벽에 충돌하는지 감지하여 공간을 뚫지 않도록 설정해 주는 코드를 작성하겠습니다.
 
 
Share article

[HootJem] 개발 기록 블로그