我不太清楚您所说的“它们的大小、位置等在其他地方处理”是什么意思。现在,让我们假设您大致具有以下结构(为清楚起见,省略了字段和其他方法):
class GameObject {
java.awt.Color getColor() { ... }
java.awt.Point getPosition() { ... }
java.awt.Point getDirection() { ... }
java.awt.Dimension getSize { ... }
}
class GameField {
List<GameObject> getGameObjects() { ... }
}
class Panel extends JPanel {
private GameField getGameField() { ... }
@Override
public void paintComponent(Graphics g) {
// this is where the GameObjects must be painted
}
}
paintComponent 方法负责 Panel 类的屏幕表示。如果你覆盖它,你就赢得了它的责任。幸运的是,绘画——如果乏味的话——相当简单。您询问了该 Graphics 参数。简单地说,它是由 Java 的魔力为您设置的,并为您提供了一个用于绘图的工具箱。
首先,每当重新粉刷面板时,您都希望有一个干净的状态。绘制后您无法删除任何内容,但您可以轻松地以您选择的背景颜色绘制整个面板。
g.setColor(Color.white); // everything that is now painted will be white
g.fillRect(0, 0, getWidth(), getHeight()); // fills the entire area with the set color
现在,对于您拥有的每个游戏对象,让我们将矩形放置在屏幕上对象定义的颜色和大小中,其中心位于对象的位置上。
for (GameObject object : getGameField().getGameObjects()) {
g.setColor(object.getColor());
g.fillRect(object.getPosition().x - (object.getSize().x / 2), object.getPosition().y - object.getSize().y / 2, object.getSize().x, object.getSize().y);
}
fillRect 方法要求前两个参数是矩形的左上角。所以为了让它以对象的位置为中心,我们分别从 x 和 y 值的位置减去一半大小。现在,对于每个 GameObject,您在正确的位置拥有对象颜色的正确直径的矩形。
您应该阅读java.awt.Graphics上的 javadoc以了解如何绘制其他东西,可能是图像精灵或方向线或其他东西。这很麻烦但可行。