0
當角色可以使用箭頭鍵走動時,我正在製作一款RPG風格的遊戲。當角色走到門口時,裏面的變量會變成真或假。在我的主課中,我把一個邏輯語句如何在變量變爲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語句inplace updateGameLogic();而不是30我把100,但是當我跑它它閃爍,並會始終顯示在左上方的紅色方塊,偶爾會顯示它應該在哪裏廣場。我如何刪除現有面板? – arrowheadx16 2012-04-13 23:06:09
要刪除現有面板,只需調用JFrame中的remove(面板)即可。 – 2012-04-17 16:30:47