【问题标题】:How to use paintComponent() without calling multiple "draw()" methods?如何在不调用多个“draw()”方法的情况下使用paintComponent()?
【发布时间】:2013-04-29 05:28:47
【问题描述】:

我是 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 在任何时候绘制车辆 visualComponent.draw(g);被调用。

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

我一直在谷歌搜索,但找不到答案。

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

【问题讨论】:

标签: java swing graphics awt paintcomponent


【解决方案1】:

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

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

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

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

【讨论】:

  • 谢谢,我会研究一下。
  • 我只需要标记它被接受。很高兴你把事情解决了。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-07
  • 1970-01-01
相关资源
最近更新 更多