캐릭터가 화살표 키를 사용하여 걸어 다닐 수있을 때 rpg 스타일의 게임을 만들고 있습니다. 캐릭터가 문으로 걸어 가면 변수가 true 또는 false로 변경됩니다. 내 주 수업에서 나는 논리 문장을 넣어변수가 true가되면 어떻게 jpanel을 전환합니까?
if (inside == true) {
add (new inside());
} else if (inside == false) {
add(new outside());
이것은 작동하지 않았다. 나는 많은 연구를 해왔고 어디에서나 cardlayout을 발견했지만 cardlayout이 그래픽을 그릴 수 없다는 것을 알고 있습니다. 두 번째 및 내부뿐만 아니라 외부 클래스도 있지만 그래픽 및 문 위치를 제외하고는 내부 클래스와 동일합니다.
이 내 내부 클래스
public class inside extends JPanel implements ActionListener, KeyListener{
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.geom.Rectangle2D;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.Timer;
public class inside extends JPanel implements ActionListener, KeyListener{
Timer timer = new Timer(5, this);
int x = 10;
int y = 10;
public inside() {
timer.start();
addKeyListener(this);
setFocusable(true);
setFocusTraversalKeysEnabled(false);
}
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2 = (Graphics2D) g;
g2.setColor(Color.red);
g2.fill(new Rectangle2D.Double(x, y, 30, 30)); //player
g2.setColor(Color.blue);
g2.fill(new Rectangle2D.Double(135, 85, 30, 30)); //old man
g2.setColor(Color.darkGray);
g2.fill(new Rectangle2D.Double(290, 0, 10, 300)); //wall
g2.fill(new Rectangle2D.Double(0, 0, 300, 10)); //wall
g2.fill(new Rectangle2D.Double(0, 0, 10, 300)); //wall
g2.fill(new Rectangle2D.Double(0, 290, 300, 10)); //wall
g2.setColor(Color.white);
g2.fill(new Rectangle2D.Double(290, 135, 10, 30)); //door
g2.setColor(Color.black);
g2.drawString(second.inside + "", 15, 15);
}
public void actionPerformed(ActionEvent e) {
repaint();
}
public void keyPressed(KeyEvent e) {
int code = e.getKeyCode();
if (code == KeyEvent.VK_UP) {
if (y <= 10) {
y = 10;
} else {
y -= 5;
}
} else if (code == KeyEvent.VK_DOWN) {
if (y >= 260) {
y = 260;
} else {
y += 5;
}
} else if (code == KeyEvent.VK_LEFT) {
if (x <= 10) {
x = 10;
} else {
x -= 5;
}
} else if (code == KeyEvent.VK_RIGHT) {
if (x >=260) {
x = 260;
if (second.inside == true && x == 260 && y == 135) {
second.inside = false;
}
} else {
x += 5;
}
}
}
public void keyReleased(KeyEvent e) {
}
public void keyTyped(KeyEvent e) {
}
}
이며,이
import javax.swing.JFrame;
public class second extends JFrame {
public static boolean inside = true;
public second() {
if (inside == true) {
add(new inside());
} else if (inside == false) {
add(new outside());
}
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(316, 338);
setLocationRelativeTo(null);
setTitle("Test Game 3");
setVisible(true);
}
public static void main(String[] args) {
new second();
}
}
나는 그 if 문 내에서 updateGameLogic(); 그리고 30 대신에 100을 넣었습니다. 그러나 나는 그것을 돌렸을 때 항상 왼쪽 상단에 빨간색 사각형을 표시하고 때로는 그것이 있어야하는 사각형을 보여줍니다. 기존 패널을 제거하려면 어떻게합니까? – arrowheadx16
기존 패널을 제거하려면 JFrame에서 remove (panel)을 호출하면됩니다. –