https://m.blog.naver.com/simba222/222568605931
이클립스에서 java.awt import 안될때
체크를 풀면 됨.
blog.naver.com
Java AWT 안될때 설정. ex) addKeyListener , KeyAdapter 메서드 호출 안될때 확인
나의 2번째 센세이자 내 조그마한 자바실력을 향상 시켜주는
메타코딩 선생님 매일 절하겠습니다. (-..-) (_ _)
package bubble.test.ex03;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
// class player -> new 가능한 애들!! 게임에 존재할 수 있음. (추상메서드를 가질 수 없다.)
public class Player extends JLabel implements Moveable { // player 자체가 label이다
// 위치 상태
private int x;
private int y;
// 움직임 상태
private boolean left;
private boolean right;
private boolean up;
private boolean down;
private ImageIcon playerR, playerL;
public Player() {
initObject();
initSetting();
}
private void initObject() {
playerR = new ImageIcon("image/playerR.png"); // 이미지 ImageIcon에 사진 추가
playerL = new ImageIcon("image/playerL.png");
}
private void initSetting() { // 기본 시작 위치
x = 55;
y = 535;
// 최초 상태 -> 움직인다 (좌표가 이동한다)
// 키보드 오른쪽을 누른다 -> 오른쪽으로 간다
left = false;
right = false;
up = false;
down = false;
setIcon(playerR);
setSize(50, 50);
setLocation(x, y);
}
@Override
public void left() {
setIcon(playerL); //왼쪽으로 갈때는 왼쪽 이미지
x = x - 10; // x축 10만큼 - 이동
setLocation(x, y);
}
@Override
public void right() {
setIcon(playerR); //왼쪽으로 갈때는 오른쪽 이미지
x = x + 10; // x축 10만큼 +이동
setLocation(x, y);
}
@Override
public void up() {
}
@Override
public void down() {
}
}
추가된것만 넣자니 너무 힘들다.. 볼사람만 봐쓰면 좋겟다.. 마무리는 끝에 다 적용해서 넣겠습니다. 주석도 그대로 둠
위치상태를 추가 + 메서드 생성
Moveable 인터페이스 생성
package bubble.test.ex03;
public interface Moveable {
public abstract void left();
public abstract void right();
public abstract void up();
public abstract void down();
}
인터페이스로 위치 상태에 대한 추상 메서드 만듬
BubbleFrame.java
package bubble.test.ex03;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class BubbleFrame extends JFrame {
private JLabel backgroundMap;
private Player player;
public BubbleFrame() { // 생성자 만들기
initObject();
initSetting();
initListener(); // listener 추가
setVisible(true);
}
private void initObject() {
backgroundMap = new JLabel(new ImageIcon("image/backgroundMap.png")); // label 안에 이미지 넣음
setContentPane(backgroundMap);
// backgroundMap.setSize(100,100);
// backgroundMap.setLocation(300,300);
// backgroundMap.setSize(1000,600);
// add(backgroundMap);// JFrame에 JLabel이 그려진다.
player = new Player(); // Player함수를 호출하여 BubbleFrame에 추가한다
add(player);
}
private void initSetting() {
setSize(1000, 640);
setLayout(null);// absolute 레이아웃 (자유롭게 그림을 그릴 수 있다.)
setLocationRelativeTo(null); // JFrame 가운데 배치하기
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // x버튼으로 창을 끌 때 JVM 같이 종료 하기
}
private void initListener() {
addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
System.out.println(e.getKeyCode()); // 실행하여 방향키를 입력해본다
// 39 오른쪽
// 37 왼쪽 숫자로 표현하면 알아보기 힘들다 KeyEvent.VK_ 를 활용하여 알기 쉽게 한다
// 40 밑
// 38 위
switch (e.getKeyCode()) {
case KeyEvent.VK_LEFT:
player.left();
break;
case KeyEvent.VK_RIGHT:
player.right();
break;
case KeyEvent.VK_UP:
player.up();
break;
// case KeyEvent.VK_DOWN: 떨어지거나 할때 사용하는데 따로 down키를 눌릴 일이 없다
// player.down();
// break;
}
}
//람다식으로 Interface를 가져올시 전부 기능을 정의 해야함 하지만 Adapter를 사용해서 정의가 가능하다
});
}
public static void main(String[] args) {
new BubbleFrame();
}
}
밑 16진수 코드 참조
/**
* Constant for the non-numpad <b>left</b> arrow key.
* @see #VK_KP_LEFT
*/
public static final int VK_LEFT = 0x25; // 16진수 왼쪽
/**
* Constant for the non-numpad <b>up</b> arrow key.
* @see #VK_KP_UP
*/
public static final int VK_UP = 0x26; // 16진수 위
/**
* Constant for the non-numpad <b>right</b> arrow key.
* @see #VK_KP_RIGHT
*/
public static final int VK_RIGHT = 0x27; // 16진수 오른쪽
/**
* Constant for the non-numpad <b>down</b> arrow key.
* @see #VK_KP_DOWN
*/
public static final int VK_DOWN = 0x28; // 16진수 밑
0x25 37 = 16x2 + 5 =37
디스코 추는 버블이(?) 만들기 완료!
'Java' 카테고리의 다른 글
버블이(?)가 달라졌어요 (0) | 2022.10.06 |
---|---|
버블버블 etc - 이벤트 리스너 원리 (0) | 2022.10.06 |
버블버블 - 4 게임맵 캐릭터 추가 (0) | 2022.10.04 |
버블버블 - 3 Frame 설정 (0) | 2022.10.04 |
버블버블 - 2 (환경 설정) (0) | 2022.10.04 |