물방울은 JPrame 내부의 JLabel 로 화면에 나오기 때문에 JLabel 을 상속받아 구현됩니다.
그리고, 물방울은 생성되면 상승하기만 하기 때문에 아래와 같은 상태들을 가지게 됩니다.
@Getter
@Setter
public class Bubble extends JLabel{
// 위치 상태
private int x;
private int y;
// 움직임 상태
private boolean left;
private boolean right;
private boolean up;
// 적군을 맞춘 상태
private int state; // 0(물방울), 1(적을 가둔 물방울)
private ImageIcon bubble; // 물방울
private ImageIcon bubbled; // 적을 가둔 물방울
private ImageIcon bomb; // 물방울이 터진거
}
캐릭터가 어디에 있던지 캐릭터의 위치에서 물방울이 생성되어야 합니다.
물방울은 플레이어의 위치를 의존하게 됩니다.

private Player player;
public Bubble(Player player) {
this.player = player;
initObject();
initSetting();
}
private void initSetting() {
left = false; // 물방울이 왼쪽으로 움직이는 상태 초기화
right = false; // 물방울이 오른쪽으로 움직이는 상태 초기화
up = false; // 물방울이 위로 움직이는 상태 초기화
// 물방울 생성 위치를 플레이어 위치로 설정
x = player.getX();
y = player.getY();
setIcon(bubble); // 물방울 초기 이미지를 설정
setSize(50, 50); // 물방울 크기 설정
state = 0; // 물방울 상태를 기본 상태(0)로 설정
}
따라서 Bubble 클래스는 생성자에서 Player 객체를 받아 캐릭터의 x, y 좌표를 물방울의 초기 위치로 설정합니다.
// 스페이스바를 눌렀을 때 물방울 생성
case KeyEvent.VK_SPACE:
// 새로운 물방울 객체를 생성하고 플레이어 위치에 추가
Bubble bubble = new Bubble(player);
add(bubble); // JFrame에 물방울 추가
break;
(플레이어의 X, Y 위치값을 참조하므로, 캐릭터가 이동한 뒤에야 생성된 물방울이 화면에 나타납니다.)

- 게임 맵과 캐릭터 추가 https://inblog.ai/hj/sts-버블버블-게임-맵과-캐릭터-추가하기-33126
- 스레드 사용하여 이동하기 https://inblog.ai/hj/sts-버블버블-스레드-사용이동-33335
- 외벽 충돌 시 캐릭터 정지 https://inblog.ai/hj/sts-버블버블-외벽-충돌-시-캐릭터-정지-36946
- 캐릭터 업 다운 시키기 https://inblog.ai/hj/sts-버블버블-캐릭터-업-다운-38143
- 물방울 생성하기(기본셋팅)
Share article