如何绘制组件以在 Java 中显示对象



好的,所以我有一个GameField类,一个GameObject类和一个面板类。类描述一个对象,该对象具有 x 和 y 位置、宽度和高度以及 x 和 y 方向(它当前正在移动)。GameField 类具有这些对象的几个不同实例,一些单独存储,一些存储在基元数组中。

Panel 类应该在屏幕上显示这些对象。我为此使用了JPanel。但是,当涉及到在屏幕上实际显示它们时,我有点迷茫。我需要实现一个名为paintComponent(Graphics graphics)的函数,它接受一个Graphics对象。

首先,我想在屏幕上显示所有对象,并设置它们的颜色。它们的大小、位置等在其他地方处理。如何使用这些属性将实际对象设置为具有大小、位置和方向?

我可能需要覆盖paintComponent函数来显示GameField中的所有对象。

如果你能帮我写一些代码,那就太好了。

我不太清楚你所说的"它们的大小、位置等在其他地方处理"是什么意思。现在,让我们假设您大致具有以下结构(为清楚起见,省略了字段和其他方法):

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 类的屏幕表示形式。如果你推翻它,你就刚刚从中赢得了这个责任。幸运的是,绘画 - 虽然乏味 - 相当简单。您询问了该图形参数。简而言之,它是通过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 值的位置中减去一半的大小。现在,对于每个游戏对象,您都有一个直径正确的矩形,该矩形在正确的位置以对象的颜色显示。

你应该阅读java.awt.Graphics上的javadoc,了解如何绘制其他东西,也许是图像精灵或方向线或其他东西。这很麻烦,但可行。

相关内容

  • 没有找到相关文章

最新更新