Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- 생성자
- 자바 멀티스레딩
- 인텔리제이 한글 깨짐 해결법
- IntelliJ IDEA
- While
- 반복문
- function
- 상수
- for문
- Java
- multi-threading
- java변수
- 메서드 오버로딩
- 포함관계
- Java데이터 타입
- 시스템 환경 변수 편집
- Thread
- 접근제어지시자
- 연관관계
- 인텔리제이 기초 설정
- 컴파일
- JAVA기초
- 집합관계
- JAVA객체지향
- 형 변환
- this예약어
- continue문
- 메서드
- break문
- OPP개념
Archives
- Today
- Total
최원종의 개발 블로그
Bubble_4(물방울 생성) 본문
파일구성
bubble/test04/
├── Moveable.java ← bubble-1 과 동일
├── Player.java ← bubble-3 과 동일
├── BackgroundPlayerService.java ← bubble-3 과 동일
├── Bubble.java ← 신규 (물방울 클래스)
└── BubbleFrame.java ← 스페이스바 이벤트 추가
-Bubble
package test04;
import javax.swing.*;
import java.awt.*;
public class Bubble extends JLabel {
private int x;
private int y;
private ImageIcon bubbleIcon;
private Player player;
// getter
@Override
public int getX() {
return x;
}
@Override
public int getY() {
return y;
}
// setter
public void setX(int x) {
this.x = x;
}
public void setY(int y) {
this.y = y;
}
public Bubble(Player player) {
this.player = player;
initData();
setInitLayout();
}
private void initData() {
bubbleIcon = new ImageIcon("img/bubble.png");
}
private void setInitLayout() {
x = player.getX();
y = player.getY();
setIcon(bubbleIcon);
setSize(50, 50);
setLocation(x, y);
setVisible(true);
}
}
-BubbleFrame
package test04;
import javax.swing.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
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"));
setContentPane(backgroundMap);
player = new Player();
}
private void setInitLayout() {
setLayout(null);//좌표기반
setResizable(false); //창 크기 고정
setLocationRelativeTo(null); //화면 정 중앙 배치 (프레임)
backgroundMap.add(player);
setVisible(true);// 화면에 보이게
}
private void addEventListener() {
this.addKeyListener(new KeyAdapter() {
@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;
}
}
@Override
public void keyPressed(KeyEvent e) {
//방향키 코드를 Player의 이동 메서드로 연결
switch (e.getKeyCode()) {
case KeyEvent.VK_LEFT:
//이동 중이 아니고 AND 벽에 충돌하지 않은 상태일 때만 left() 호출 가능
if (player.isLeft() == false && player.isLeftWallCrash() == false) {
player.left();
}
break;
case KeyEvent.VK_RIGHT:
//이동 중이 아니고 AND 벽에 충돌하지 않은 상태일 때만 right() 호출 가능
if (player.isRight() == false && player.isRightWallCrash() == false) {
player.right();
}
break;
case KeyEvent.VK_UP:
player.up();
break;
case KeyEvent.VK_SPACE:
fireBubble();
break;
}
}
});
}
//todo 임시 버블 클래스 생성
private void fireBubble() {
Bubble bubble = new Bubble(player);
backgroundMap.add(bubble);
//동적으로 컴포넌트가 그려지기 때문에 버그 발생 가능
backgroundMap.revalidate(); //레이아웃 재 계산
backgroundMap.repaint(); //화면을 다시 그려라
}
//테스트 코드
public static void main(String[] args) {
new BubbleFrame();
}
}
'Java > SWING' 카테고리의 다른 글
| Bubble_6(바닥, 층 감지 기능) (0) | 2026.03.20 |
|---|---|
| Bubble_5(물방울 동작 처리) (0) | 2026.03.19 |
| Bubble_3(왼쪽 오른쪽 벽 감지) (0) | 2026.03.19 |
| Bubble_2(이동, 점프) (0) | 2026.03.19 |
| Bubble_1(기본 화면완성) (0) | 2026.03.18 |
