java - 如何在不调用多个 "draw()"方法的情况下使用 paintComponent()?

标签 java swing graphics awt paintcomponent

我是 java 的新手,我正在尝试创建一个“游戏”。

在我的游戏中,我的主类中有 paintComponent 方法:

public void paintComponent(Graphics g) {
    super.paintComponent(g);
    setBackground(new Color(120,120,255));
    BackgroundObject.drawGrass(g,385);
    BackgroundObject.drawRoad(g,420);
    BackgroundObject.drawSun(g,-20,-20);
    myCar.draw(g);
    debugger.draw(g);
}

问题是我要绘制的每个对象,我都必须将它放在 paintComponent 方法下(比如当我想绘制汽车时,我必须将 myCar.draw() 放在 paintComponent 下)

有什么办法吗?

public void paintComponent(Graphics g) {
    super.paintComponent(g);
    setBackground(new Color(120,120,255));
    visualComponents.draw(g);
    GUI.draw(g);
}

在调用 visualComponents.draw() 时,任何类都可以告诉 visualComponent 类绘制对象。

例如: 我的汽车类告诉 visualComponent 在 vi​​sualComponent.draw(g); 时绘制车辆;被称为。

总而言之,我基本上是在询问大多数人如何在他们的程序中使用 paintComponent 的结构

我一直在谷歌四处寻找,但找不到答案。

如果我的问题让您感到困惑,请告诉我。

最佳答案

您可以将元素添加到集合中,然后迭代集合并在循环中绘制每个元素。这可以在几行代码中绘制数百个对象。

example迭代 Area 实例的集合并使用以下方法绘制它们:

    for (Area obstacle : obstacles) {
        if (doAreasCollide(obstacle, player)) {
            g.setColor(Color.RED);
        } else {
            g.setColor(Color.GREEN);
        }
        g.fill(obstacle);
    }

集合中有 3 个绿色和 1 个红色障碍物,而球(黄色小圆圈)是单独绘制的。

关于java - 如何在不调用多个 "draw()"方法的情况下使用 paintComponent()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16382141/

相关文章:

java - Maven 不会部署到 tomcat;给出 '405' 错误

java.net.SocketException : Connection reset by peer: socket write error When serving a file 异常

java - 根据参数在构造函数中调用不同的 super()

字符串数组上的 Java 8 流

java - 火烈鸟丝带: Java. lang.IllegalArgumentException : No interpolator found for java. lang.Float :java. lang.Float

java - 使用JTextPane显示HTML,是否支持SVG?

java - 使用BorderLayout时如何控制JPanel setSize

algorithm - 丢弃视口(viewport)外的元素

image-processing - 配色方案 RGB、XYZ、LCHab、LCHuv、Lab、Luv 的最小和最大阈值/限制是什么?

graphics - JavaFX 设计器