绘制两次时Java applet 2d图形绘制问题(黑色部分)

时间:2012-05-05 21:59:03

标签: java applet drawing 2d

所以我制作了一个控制台游戏,我想它是2d。 到目前为止一切都很好。 我有运动和其他工作正常。 绘图很好,直到我有了这个想法。

(我的“地图”是Tile [] []) 我想在创建一个代表一个图层的类时,一个可玩的地图就是一个 Layer []和我会在彼此之间绘制图层,并可能将一些图层存储在内存中以便更快地绘制。

我认为这是一个“好”/“好”的想法。(如果有人会告诉我这是不是一个好主意,我将不胜感激)

问题是当我使用2层时,第二层总是混淆第一层。 我用来绘制'地图'的代码如下所示:

    for (TileLayer layer : layers)
        g.drawImage(layer.getImage(), 0, 0, null);

layer.getImage()是正确的(非常确定,只适用于一个图层)。 问题是,当我绘制2层时,第二层将第一层中的所有内容涂黑。 我有这样的图层绘制代码:

    BufferedImage img = new BufferedImage(tiles.length * Tile.TILE_SIZE,
                                          tiles[0].length*Tile.TILE_SIZE, 
                                          ColorSpace.TYPE_RGB);

    for (int x = 0; x < tiles.length; x++) {
        for (int y = 0; y < tiles[0].length; y++) {
            //System.out.println("ID:" + tiles[x][y].getId());
                img.getGraphics().drawImage(tiles[x][y].getImage(),
                                        x * Tile.TILE_SIZE,
                                        y * Tile.TILE_SIZE,
                                        null);
        }
    }

它是一个java applet我压倒'paint',我已经改变了。 我尝试使用透明图像来表示“空气”(认为这应该可以解决它)。 尝试添加一个条件,以防止不应该绘制。

我可能做了一些错误的方法。 帮助正确的方法来做到这一点会很好。 (或者告诉我哪里可能有错)

1 个答案:

答案 0 :(得分:1)

在该示例中,您似乎使用了错误的常量作为BufferedImage类型。

如果您希望BufferedImage允许透明,请将最后一个参数设置为BufferedImage.TYPE_INT_ARGB(或BufferedImage中最后一位有“A”的类型常量之一)。