0

所以我做了一个控制台游戏,我想把它做成 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 小程序,我覆盖了“paint”,我已经改变了它。我尝试使用透明图像来表示“空气”(认为这应该工作可能搞砸了)。尝试添加一个条件以防止在不应该绘制的情况下绘制。

我可能做了一些以错误方式工作的东西。帮助以正确的方式做到这一点会很好。(或者告诉我哪里可能错了)

4

1 回答 1

1

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

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

于 2012-05-05T22:51:58.323 回答