swing
(JAVA) 물방울생성
mynote6676
2025. 5. 2. 17:10
Bubble class 생성
package bubble.text04;
import javax.swing.*;
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;
// 생성자 통해서 player 객체의 주소값을 주입받기 생성지 의존주입
public Bubble(Player player){
this.player = player;
initDate();
setInitLayout();
}
private void initDate() {
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);
}
@Override
public int getX() {
return x;
}
// getter
@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;
}
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;
}
}// end of class
버블 프레임에 스페이스바 키 이벤트 추가
package bubble.text04;
import javax.swing.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class BubbleFrame extends JFrame {
private JLabel backgroudMap;
private Player player;
public BubbleFrame() {
initData();
setInitLayout();
addEventListeren();
new Thread(new BackgroundPlayerService(player)).start();
}
private void initData() {
setTitle("버블버블게임");
setSize(1000, 640);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
backgroudMap = new JLabel(new ImageIcon("img//backgroundMap.png"));
//루트 패널에 JLable 을 넣어 보기
setContentPane(backgroudMap);
player = new Player();
}
private void setInitLayout() {
setLayout(null); // 좌표기준(absolut)(절대 레이아웃)
setResizable(false);//리사이즈 조절 막기
setLocationRelativeTo(null);// JFrame 을 화면 가운데 배치
add(player);
setVisible(true);
}
private void addEventListeren() {
//프레임에 키보드 이벤트 리스너 등록 처리
this.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
}
//키를 누를때 계속 이벤트 발생
@Override
public void keyPressed(KeyEvent e) {
System.out.println("code : " + e.getKeyCode());
switch (e.getKeyCode()) {
case KeyEvent.VK_LEFT:
if (player.isLeft() == false && player.isLeftWallCrash() == false) {
player.left();
}
break;
case KeyEvent.VK_RIGHT:
//만약 플레이어가 오른쪽으로 가고 있는 상태가 아니라면 메서드 수행해
//만약 플레이어가 오른쪽으로 가고 있는 상태라면 메서드 수행하지마
if(player.isRight() == false && player.isRightWallCrash() == false){
player.right();
}
break;
case KeyEvent.VK_UP:
player.up();
break;
}
}
@Override
public void keyReleased(KeyEvent e) { // 키를 때면 발생하는 이벤트를 처리하는 메서드
System.out.println("code : " + e.getKeyCode());
System.out.println("code : " + e.getKeyCode());
switch (e.getKeyCode()) {
case KeyEvent.VK_LEFT:
//왼쪽으로 가고 있다면 멈춰(while 종료)---스레드 종료
player.setLeft(false);
break;
case KeyEvent.VK_RIGHT:
//움직이다가 멈춰
player.setRight(false);
break;
case KeyEvent.VK_UP:
break;
case KeyEvent.VK_SPACE:
add(new Bubble(player));
break;
}
}
});
}
public static void main (String[]args){
new BubbleFrame();
}
}