如何阻止一个drawImage与另一个重叠? - Java

时间:2014-01-31 09:26:27

标签: java swing graphics 2d

我正在尝试使用一个drawImage的2D数组为RPG制作平铺背景。但由于某种原因,Java会自动将背景与玩家重叠,我尝试在背景之前绘制播放器,但没有区别,代码:

地图代码:

Tiles[][] t;

public Map()
{
    t = new Tiles[640 / 32][480 / 32];

    for (int x = 0; x < 640 / 32; x++)
    {
        for (int y = 0; y < 480 / 32; y++)
        {
            t[x][y] = new Tiles(x, y, 32, 32, "./res/grass.png");
        }
    }
}

public void paint(Graphics g)
{
    super.paint(g);

    for (int x = 0; x < 640 / 32; x++)
    {
        for (int y = 0; y < 480 / 32; y++)
        {
            t[x][y].paint(g);
        }
    }

    this.repaint();
}

绘制代码(在其他扩展JPanel的类中):

public void paint(Graphics g)
{
    super.paint(g);

    p.paint(g);
    m.paint(g);

    this.repaint();
}

注意:上面代码所在的类扩展了JPanel,所以我创建了另一个名为Window的类,它将它添加到JFrame,然后在静态void main中,我做了所有的初始化。

1 个答案:

答案 0 :(得分:0)

如果没有完整的代码,很难说出你的错误。我可以指出一些事情,但

  • 您的Map似乎也是JPanel,因为您正在呼叫super.paint。您不需要Map JPanel只需使用drawTiles方法将Graphics上下文传递给常规模型类。

    < / LI>
  • 不要从组件类中显式调用paint方法。

  • 请勿在{{1​​}}方法内拨打repaint()

  • 覆盖paint代替paintComponent


这是我提出的一个例子,在修复上述

时使用了一些代码原则
JPanel

enter image description here