inblog logo
|
[HootJem] 개발 기록 블로그
    java

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

    HootJem's avatar
    HootJem
    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;
     
    다음 시간에는 캐릭터가 벽에 충돌하는지 감지하여 공간을 뚫지 않도록 설정해 주는 코드를 작성하겠습니다.
     

    💡
    1. 게임 맵과 캐릭터 추가 https://inblog.ai/hj/sts-버블버블-게임-맵과-캐릭터-추가하기-33126
    1. 캐릭터 이동 https://inblog.ai/hj/sts-버블버블-캐릭터-이동-33127
    1. 스레드 사용하여 이동하기 https://inblog.ai/hj/sts-버블버블-스레드-사용이동-33335
    1. 점프하기 https://inblog.ai/hj/sts-버블버블-점프하기-33388
    1. 충돌 감지 https://inblog.ai/hj/sts-버블버블-충돌감지-33391
     
    Share article

    [HootJem] 개발 기록 블로그

    RSS·Powered by Inblog