如何为多个精灵使用一个PNG图像?

时间:2012-09-02 11:23:05

标签: java image png

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

实施例

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

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

1 个答案:

答案 0 :(得分:1)

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

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

https://github.com/mikera/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);
}

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

更完整的源代码可在以下位置获取:https://github.com/mikera/tyrant/blob/master/src/main/java/mikera/tyrant/MapPanel.java