【发布时间】:2014-12-29 09:10:10
【问题描述】:
这些是我正在为一个使用 Java 和图形的简单游戏编写的类
主要:
import javax.swing.*;
import java.awt.*;
public class FrameTest extends JFrame {
public FrameTest() {
setSize(800,600);
setVisible(true);
}
public static void main(String[] args) {
FrameTest frame = new FrameTest();
GamePanel panel = new GamePanel();
frame.add(panel);
}
}
面板测试:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class PanelTest extends JPanel {
private PlayerTest playerRunnable;
private Thread playerThread;
public PanelTest() {
setSize(800,600);
playerRunnable = new PlayerTest();
playerThread = new Thread(playerRunnable);
//New
setLayout(new BorderLayout());
add(playerRunnable, BorderLayout.NORTH);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
setBackground(Color.red);
}
}
它只是创建了一个具有红色背景的面板(我这样做是为了查看paintComponent() 是否适用于这项工作,它实际上是否有效)。
玩家测试:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.*;
import javax.swing.JComponent;
public class PlayerTest extends JComponent implements Runnable, KeyListener {
public int x;
public int y;
private int speed;
public PlayerTest() {
speed = 10;
x = 800/2;
y = 600/4;
addKeyListener(this);
setFocusable(true);
}
public void run() {
while(true) {}
}
//New
public Dimension getPreferredSize() {
return new Dimension(30,30);
}
public void paintComponent(Graphics g) {
g.setColor(Color.BLUE);
g.fillRect(x, y, 30, 30);
}
public void keyReleased(KeyEvent e) {}
public void keyTyped(KeyEvent e) {}
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_LEFT) {
//Spostamento a sinistra player
move(speed*-1);
}
if(e.getKeyCode() == KeyEvent.VK_RIGHT) {
//Spostamento a destra player
move(speed);
}
if(e.getKeyCode() == KeyEvent.VK_SPACE) {
//Lancio bomba
}
}
public void move(int s) {
if (s < 0) {
if(x-s > 0) {
x += s;
System.out.println("[PLAY] move left, x: " + x);
repaint();
}
} else {
if(x+s < 800) {
x += s;
System.out.println("[PLAY] move right, x: " + x);
repaint();
}
}
}
}
问题来了。这个类是一个 Runnable(用于动画)、一个 KeyListener(用于玩家移动)和一个 JComponent(用于显示玩家的图像,现在假设它是一个矩形) 我已经在 Panel 类中添加了这个组件,但是如果我尝试绘制它,它不会显示出来。我不明白为什么。纠结了这么久,终于决定在这里问一个问题。
【问题讨论】:
标签: java swing animation graphics components