Bubble 클래스 설계
package bubble.test04;
import javax.swing.*;
import java.awt.*;
public class Bubble extends JLabel {
private int x;
private int y;
private boolean left;
private boolean right;
private boolean up;
private ImageIcon bubble; // 기본 물방울
private Player player;
public Bubble(Player player) {
this.player = player;
initData();
setInitLayout();
}
private void initData() {
bubble = new ImageIcon("img/bubble.png");
left = false;
right = false;
up = false;
}
private void setInitLayout() {
x = player.getX();
y = player.getY();
setIcon(bubble);
setSize(50,50);
setLocation(x, y);
}
// getter
@Override
public int getX() {
return x;
}
@Override
public int getY() {
return y;
}
public boolean isLeft() {
return left;
}
public boolean isRight() {
return right;
}
public boolean isUp() {
return up;
}
public ImageIcon getBubble() {
return bubble;
}
public Player getPlayer() {
return player;
}
//setter
public void setX(int x) {
this.x = x;
}
public void setY(int y) {
this.y = y;
}
public void setLeft(boolean left) {
this.left = left;
}
public void setRight(boolean right) {
this.right = right;
}
public void setUp(boolean up) {
this.up = up;
}
public void setBubble(ImageIcon bubble) {
this.bubble = bubble;
}
public void setPlayer(Player player) {
this.player = player;
}
}
버블 프레임에 스페이스바 키 이벤트 추가
package bubble.test04;
import javax.swing.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class BubbleFrame extends JFrame {
private JLabel backgroundMap;
private Player player;
public BubbleFrame() {
initData();
setInitLayout();
addEventListener();
new Thread(new BackgroundPlayerService(player)).start();
}
private void initData() {
setTitle("버블버블게임");
setSize(1000, 640);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
backgroundMap = new JLabel(new ImageIcon("img/backgroundMap.png"));
// 루트 패널에 JLabel을 넣어보기
setContentPane(backgroundMap);
player = new Player();
}
private void setInitLayout() {
setLayout(null); // 좌표기준 (절대 레이아웃)
setResizable(false); // 리사이즈 조절 막기
setLocationRelativeTo(null); // JFrame을 화면 가운데에 배치
add(player);
setVisible(true);
}
private void addEventListener() {
// 프레임에 키보드 이벤트 리스너 등록 처리
this.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
}
@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:
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;
case KeyEvent.VK_UP:
break;
case KeyEvent.VK_SPACE:
System.out.println("생성");
add(new Bubble(player));
break;
}
}
});
}
public static void main(String[] args) {
new BubbleFrame();
}
}
'Swing' 카테고리의 다른 글
| bubble - 6 (바닥, 층 감지 기능 추가) (0) | 2025.05.07 |
|---|---|
| bubble - 5 (물방울 동작 처리) (0) | 2025.05.07 |
| bubble - 3 (왼쪽, 오른쪽 벽 감지하기) (0) | 2025.05.01 |
| bubble - 2 (움직이기 점프, 멈추기) (0) | 2025.05.01 |
| bubble - 1 (기본 화면 완성 및 키 이벤트 처리) (0) | 2025.05.01 |