제일먼저 플레이어에게 속도를 정해 주겠습니다. 상수이기 때문에 대문자로 적습니다.
// 플레이어 속도 상태
	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();
	
	}
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 도 만들어 속도를 주도록 하겠습니다.

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();
	}
}

올라갔다 내려오는 동작이 자연스럽지만 보통 바닥이 있다면 그곳에 멈춰야 하죠 ㅎ…
또 다른 문제가 있습니다. 무한으로 up 을 누를 수 있기 때문에 화면을 뚫고 끊임없이 상승할 수 있다는 점입니다.
캐릭터가 up 이 아니고, down 중이 아닐 때만 up 동작을 하도록 설정해 줍니다.
	case KeyEvent.VK_UP:
					if(!player.isUp() && !player.isDown()) {
						player.up();
					}
					break;
다음 시간에는 캐릭터가 벽에 충돌하는지 감지하여 공간을 뚫지 않도록 설정해 주는 코드를 작성하겠습니다.
Share article