유튜브에서 예전부터 해보고싶던 버블버블게임만들기 프로젝트를 클론코딩해보며 진행사항을 기록하고자 한다.
IDE : IntelliJ
언어 : Java 8
스프링부트 버전 : 2.7.13
DB : MySQL
빌드관리 도구 : Maven
OS : iOS
참고유튜브 : 메타코딩
보통 게임을 하다보면 캐릭터가 모든곳을 이동하지 못하고 벽에 가로막혀서 이동할 수 없는 공간이 있다.
해당 프로젝트에서도 마찬가지로 캐릭터가 화면 밖으로 이동하지 못하게 벽을 감지해주는 기능을 작성하고자한다.
BackgroundPlayerService 클래스를 생성 후 runnable 을 상속해준다.
run메서드를 오버라이드 해준다. (mac : commend + o)
BubbleFrame 클래스로 이동해서 initObject 메서드에 맵 사진을 backgroundMapService.png로 변경해주고 실행해주면
빨간색과 파란색으로 이루어진 화면이 보인다.
이 색을 기준으로 벽으로 만들어 캐릭터 이미지가 해당 색에 가까워졌을때 더이상 해당 방향으로 이동하지 못하게 막을 것이다.
해당부분을 테스트 하기위해서 backgroundMapService 클래스로 이동해서
맵 이미지를 test.png로 만들어주고 콘솔에 색을 rgb로 표현해보자
public class BackgroundPlayerService implements Runnable{
private BufferedImage image;
private Player player;
public BackgroundPlayerService(Player player) {
this.player = player;
try {
image = ImageIO.read(new File("image/backgroundMapService.png"));
}catch (Exception e){
System.out.println(e.getMessage());
}
}
@Override
public void run() {
Color Color = new Color(image.getRGB(player.getX(), player.getY()));
System.out.println("컬러확인 : "+rightColor);
}
}
프로그램을 실행해보면 캐릭터가 위치한 곳에 색상을 콘솔에서 볼 수 있다.
생각한건 캐릭터가 빨간 영역에 있어서 빨간색으로 표현될 줄 알았는데 콘솔에는 하얀색으로 출력이 된다.
반복문으로 테스트를 해보지 않았기 때문에 반복문 while을 넣어서 테스트를 진행해보자
while문을 true값으로 무한 반복하게 진행하고 스레드간에 0.01초 텀을 주고 실행해본다.
@Override
public void run() {
while (true){
Color color = new Color(image.getRGB(player.getX() -10, player.getY()+25));
System.out.println("컬러확인 : "+color);
try {
Thread.sleep(10);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
캐릭터를 움직여보면 무조건 흰색이 출력되는게 아니라 붉은색도 출력이 되고 파란색도 출력이 되는걸 확인 할 수 있다.
캐릭터 이미지에서 기준이 되는 포인트가 캐릭터 왼쪽 상단에 있는것으로 판단해 좌표를 변경해서 왼쪽과 오른쪽으로 나눠서 다시 확인해보자
@Override
public void run() {
while (true){
Color leftColor = new Color(image.getRGB(player.getX() -10, player.getY()+25));
Color rightColor = new Color(image.getRGB(player.getX()+50+15, player.getY()+25));
System.out.println("left컬러확인 : "+leftColor);
System.out.println("right컬러확인 : "+rightColor);
try {
Thread.sleep(10);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
기준좌표를 변경하니 아래와 같이 출력되는걸 확인할 수 있었다.
해당 기준점들을 기준으로 캐릭터가 왼쪽벽과 오른쪽 벽에 접촉을 했을때의 상황을 콘솔에 출력을 해보자
@Override
public void run() {
while (true){
Color leftColor = new Color(image.getRGB(player.getX() -10, player.getY()+25));
Color rightColor = new Color(image.getRGB(player.getX()+50+15, player.getY()+25));
if (leftColor.getRed() == 255 && leftColor.getGreen() == 0 && leftColor.getBlue() ==0) {
System.out.println("왼쪽벽에 충돌");
}else if (rightColor.getRed() == 255 && rightColor.getGreen() == 0 && rightColor.getBlue() ==0){
System.out.println("오른쪽벽에 충돌");
}
try {
Thread.sleep(10);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
프로그램을 실행 후 바로 왼쪽벽에 충돌이 일어나는 상황이 있을 수 있는데 해당 부분은 player에서 처음 캐릭터이미지가 위치하는 좌표를 수정해주면 된다.
이제 캐릭터가 움직이면서 기준점이 붉은색벽과 닿으면 충돌했다는 걸 확인할 수 있었고 해당 방법을 기준점으로 캐릭터가 벽에 닿았을때 더이상 이동하지 못하게 막아주면 된다.
'프로젝트 > 버블버블게임 만들기' 카테고리의 다른 글
[버블버블게임만들기] 7. 점프 후 캐릭터 발판에 착지 시키기 (0) | 2023.08.02 |
---|---|
[버블버블게임만들기] 6. 스레드로 벽 감지해서 충돌방지하기(2) (0) | 2023.08.01 |
[버블버블게임만들기] 4. 캐릭터 점프하기 (0) | 2023.07.31 |
[버블버블게임만들기] 3. 스레드를 사용해서 캐릭터 좌우로 움직이게하기 (0) | 2023.07.31 |
[버블버블게임만들기] 2. 캐릭터 좌우로 움직이게하기 (0) | 2023.07.29 |
댓글