본문 바로가기
프로젝트/버블버블게임 만들기

[버블버블게임만들기] 6. 스레드로 벽 감지해서 충돌방지하기(2)

by dantriss 2023. 8. 1.

유튜브에서 예전부터 해보고싶던 버블버블게임만들기 프로젝트를 클론코딩해보며 진행사항을 기록하고자 한다.

IDE : IntelliJ

언어 : Java 8

스프링부트 버전 : 2.7.13

DB : MySQL

빌드관리 도구 : Maven

OS : iOS

참고유튜브 : 메타코딩


지난 글에서 캐릭터기준점이 각종 색상에 닿았을때 콘솔에 출력이 되게 작성했었다.

그중에서 붉은 색부분이 벽으로 캐릭터가 더이상 진입을 하면 안되는 구간이였다.

 

사용자들에게 해당 화면이 보이면 안되기 때문에 BubbleFrame에서는 맵을 기존 맵으로 변경해준다.

 

캐릭터에 추가적인 상태표현이 필요하다. 해당 캐릭터가 벽에 충돌한 상태인지 아닌지 확인 하기 위해서 

player 클래스에서 leftWallCrash. rightWallCrash를 생성해준다.

 

initSetting 메서드에서 해당 상태를 기본 false 상태로 만들어준다.

 

bubbleFrame 클래스에서 키를 눌렀을때 발생하는 이벤트 핸들러 부분에 벽에 부딪힌 상태가 아니였을때 이동하는 조건을 추가해준다.

해당 조건만 추가해주면 키를 계속 눌렀을때 다시 키가 눌리는 이벤트가 발생하여서 다시 캐릭터가 벽을 뚫고 나가는 상황이 발생한다.

case KeyEvent.VK_LEFT:

    if (!player.isLeft() && !player.isLeftWallCrash()){
        player.left();
    }

break;
case KeyEvent.VK_RIGHT:

    if (!player.isRight() && !player.isRightWallCrash()){
        player.right();
    }

break;

 

그렇기 때문에 backgroundPlayerService 클래스로 이동해서 아래와 같은 조건문을 추가해준다.

벽에 부딪힌 상태(캐릭터 기준점이 빨간색 벽에 가까워졌을때)일 때 LeftWallCrash가 true 로, 또 캐릭터 이동을 false로 만들어줘서

벽에 부딪힌 상태일때 캐릭터가 더이상 이동할 수 없게 만들어준다.

그 외에 상태일 때는 다시 false로 만들어줘서 다시 반대 방향으로 이동할 수 있게 else 부분에서 rightWallCrash 와 leftWallCrash를 false 로 만들어준다.

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);
}else {
    player.setRightWallCrash(false);
    player.setLeftWallCrash(false);

}

 

프로그램을 실행해보면 캐릭터가 벽에 닿으면 더이상 이동하지 않는걸 확인할 수 있다.

더이상 캐릭터가 이동하지 못한다.

댓글