如何将一张 PNG 图像用于多个精灵?

Pim*_*ert 5 java png image

如何将单个 PNG 图像用于多个精灵?我正在尝试制作一个简单的 2d 游戏,但我不想拥有 20 多个不同的图像文件。我只想将它们放在一个 PNG 文件中。

例子

《我的世界》中的terrain.png(和items.png) 上有不同的图块,每个 16x16 像素区域用于块的不同纹理。

有人可以提供一些代码和解释吗?

mik*_*era 2

几年前我写了一个 Java 游戏,希望能给你一些有用的建议和代码示例。

您可以将精灵组织在单个图像中,如下所示:

https://github.com/micera/tyrant/blob/master/src/main/resources/images/creature32.png

上面的示例使用 32x32 精灵,您可以使用任何您喜欢的尺寸,但这有助于保持它们规则。

然后,当您在游戏过程中绘制屏幕时,您只需选取相应的精灵并在正确的位置绘制即可。

代码可能如下所示:

public void drawImage(Graphics g,double x, double y, int image) {
    int px = (int)((x - scrollx) * TILEWIDTH);
    int py = (int)((y - scrolly) * TILEHEIGHT);
    int sx = (image%20) * TILEWIDTH;
    int sy = TILEHEIGHT * (image/20);
    g.drawImage(sourceImage, px, py, px + TILEWIDTH,
            py + TILEHEIGHT, sx, sy, sx + TILEWIDTH, sy + TILEHEIGHT,
            null);
}
Run Code Online (Sandbox Code Playgroud)

这里int image是精灵表上要使用的位置的索引。增加 1 可以将 1 个精灵向右移动,增加 20 可以在精灵表中向下移动 1 个精灵。

更完整的源代码位于:https://github.com/mikera/tyrant/blob/master/src/main/java/mikera/tyrant/MapPanel.java