유튜브에서 예전부터 해보고싶던 버블버블게임만들기 프로젝트를 클론코딩해보며 진행사항을 기록하고자 한다.
IDE : IntelliJ
언어 : Java 8
스프링부트 버전 : 2.7.13
DB : MySQL
빌드관리 도구 : Maven
OS : iOS
참고유튜브 : 메타코딩
기존 좌우로 이동하는 방법은 스레드 하나가 시작이 되고 움직인 후 종료되는 방법으로 상당히 비효율적인 방법이다.
player에서 두가지 방법중 하나를 사용하면 되는데 runnable 을 사용하지 않고 람다식으로 진행해보자
@Override
public void left() {
System.out.println("left thread 생성");
new Thread(() ->{
setIcon(playerL);
x = x - 10;
setLocation(x,y);
System.out.println("left thread 생성");
}).start();
}
실행 후 콘솔을 확인해보면 한번 동작할 때마다 스레드가 생성/종료가 반복되는걸 확인할 수 있다.
boolean 값인 left 와 right를 true로 변경 후
while 문을 적용해서 한 방향키를 누르고 있으면 계속 동작하도록 만들어보자
thread.sleep을 사용해서 스레드 간의 시간을 0.01초 로 지정해준다.
@Override
public void left() {
System.out.println("left thread 생성");
left = true;
new Thread(() ->{
while (left){
setIcon(playerL);
x = x - 10;
setLocation(x,y);
try {
Thread.sleep(10); //0.01초
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
System.out.println("left thread 종료");
}).start();
}
bubbleFrame 클래스에 있는 변수들을 사용하기 위해서 getter/setter를 어노테이션으로 걸어준다.
switch문에서 캐릭터가 왼쪽으로 이동하고 있는게 아니라면,
즉 왼쪽방향키를 쭉누르고 있어서 캐릭터가 이동하는 스레드가 동작중이고 아직 해당 스레드가 종료되지 않았다면 해당 경우엔
해당 스레드가 계속 동작하지 않아서 캐릭터가 가속화되어서 화면밖으로 나가지 않는다.
아래 코드를 입력하지 않고 실행해서 캐릭터를 움직여보면 점점 가속되면서 결국엔 캐릭터가 화면 밖으로 사라지게 된다.
해당 경우를 제외하기 위해서 case에 해당 조건을 추가해준다.
case KeyEvent.VK_LEFT:
if(!player.isLeft()){
player.left();
}
break;
실행을 한 후 왼쪽으로 이동 하다가 오른쪽으로 가보면 캐릭터가 좌우로 왔다갔다만 할것이다.
즉 2개의 스레드가 계속 왼쪽 오른쪽으로 캐릭터 이미지를 움직이고 있는 것이다.
그렇기에 키보드를 누른 후 떼었을때 이벤트도 같이 만들어준다.
이번에 사용할 메서드는 keyAdapter에 있는 keyReleased
해당 메서드를 사용하기 위해서 keyReleased를 오버라이드 해준다. (맥기준 commend+n)
해당 메서드는 키보드가 더이상 눌리지 않을때 즉 떼었을때 동작하는 메서드로
오른쪽방향키가 떼어졌다면 캐릭터를 더이상 오른쪽으로 진행하지 않게 하고 왼쪽은 그 반대로 더이상 왼쪽으로 진행하지 않게 만들어준다.
@Override
public void keyReleased(KeyEvent e) {
super.keyReleased(e);
switch (e.getKeyCode()){
case KeyEvent.VK_RIGHT:
player.setRight(false);
break;
case KeyEvent.VK_LEFT:
player.setLeft(false);
break;
}
}
그렇게 하면 키를 눌렀을때 스레드가 시작이 되고 키를 떼었을때 스레드가 종료되게 된다.
'프로젝트 > 버블버블게임 만들기' 카테고리의 다른 글
[버블버블게임만들기] 6. 스레드로 벽 감지해서 충돌방지하기(2) (0) | 2023.08.01 |
---|---|
[버블버블게임만들기] 5. 스레드로 벽 감지해서 충돌방지하기(1) (0) | 2023.08.01 |
[버블버블게임만들기] 4. 캐릭터 점프하기 (0) | 2023.07.31 |
[버블버블게임만들기] 2. 캐릭터 좌우로 움직이게하기 (0) | 2023.07.29 |
[버블버블게임만들기] 1. 게임맵과 케릭터 넣기 (0) | 2023.07.29 |
댓글