완성된 모습.

현재 외벽 충돌 시 충돌 로그가 출력되고 있습니다.
그렇다면 캐릭터가 왼쪽, 오른쪽으로 진행하려는 상태를 
false 로 변경 시켜 주어야 합니다.if(leftColor.getRed() == 255 && leftColor.getGreen()==0 && leftColor.getBlue()==0) {
				System.out.println("왼쪽 벽에 충돌함");
				player.setLeft(false);
			}else if (rightColor.getRed() == 255 && rightColor.getGreen()==0 && rightColor.getBlue()==0) {
				System.out.println("오른쪽 벽에 충돌함");
				player.setRight(false);그러나 false 가 되었다고 해도 BubbleFrame 의 아래 코드가 다시 실행되어
키 입력이 발생하면 다시 앞으로 진행합니다. 따라서 캐릭터의 상태를 감지하는 상태를 추가해 주겠습니다.
	private void initListener() {
		addKeyListener(new KeyAdapter() {
			// 키보드 이벤트 핸들러
			@Override
			public void keyPressed(KeyEvent e) {
				switch (e.getKeyCode()) {
				case KeyEvent.VK_LEFT:
					if (!player.isLeft()) {
						player.left();
					}
					break;
				case KeyEvent.VK_RIGHT:
					if (!player.isRight()) {
						player.right();
					}
					break;
				case KeyEvent.VK_UP:
					if(!player.isUp() && !player.isDown()) {
						player.up();
					}
					break;
				}
			}
			// 키보드 해제 이벤트 핸들러
			@Override
			public void keyReleased(KeyEvent e) {
				switch (e.getKeyCode()) {
				case KeyEvent.VK_LEFT:
					player.setLeft(false);
					break;
				case KeyEvent.VK_RIGHT:
					player.setRight(false);
					break;
				}
			}
		});
	}캐릭터는 기본적으로 벽에 충돌하지 않아야 하기 때문에 fase 로 초기화 한 뒤 
키보드 이벤트 핸들러에 조건을 추가하겠습니다.
	private boolean leftWallCrash;
	private boolean rightWallCrash;조건을 통해 플레이어는 벽에 부딪혔니? = true 일때 핸들러는 실행되지 않도록 설정할 수 있습니다.
	@Override
			public void keyPressed(KeyEvent e) {
				switch (e.getKeyCode()) {
				case KeyEvent.VK_LEFT:
					if (!player.isLeft() && !player.isLeftWallCrash()) {
						player.left();
					}
					break;
				case KeyEvent.VK_RIGHT:
					if (!player.isRight() && !player.isRightWallCrash()) {
						player.right();
					}
					break;
				case KeyEvent.VK_UP:
					if(!player.isUp() && !player.isDown()) {
						player.up();
					}
					break;
				}
			}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);
			그러나 한번 충돌하여 ture 로 상태가 변경되면 다시 false 로 변경되는 부분이 없기 때문에 캐릭터는 다시 움직이지 않게 됩니다.
따라서 상태를 false 로 다시 변경하는 조건을 추가하여 완성할 수 있습니다.
else {
				player.setLeftWallCrash(false);
				player.setRightWallCrash(false);
			}
			
맵의 붉은색에 닿았을 때는 캐릭터가 정지하고, 파란색일때는 캐릭터가 위에 착지해야 됩니다.
다음 게시글에서는 캐릭터가 점프를 통해 착지할 수 있도록 게시글을 작성해 보겠습니다.
- 게임 맵과 캐릭터 추가 https://inblog.ai/hj/sts-버블버블-게임-맵과-캐릭터-추가하기-33126
- 스레드 사용하여 이동하기 https://inblog.ai/hj/sts-버블버블-스레드-사용이동-33335
- 외벽 충돌 시 캐릭터 정지 https://inblog.ai/hj/sts-버블버블-외벽-충돌-시-캐릭터-정지-36946
Share article