如何将单个 PNG 图像用于多个精灵?我正在尝试制作一个简单的 2d 游戏,但我不想拥有 20 多个不同的图像文件。我只想将它们放在一个 PNG 文件中。
例子
minecraft 中的terrain.png
(and items.png
) 上有不同的图块,每个 16x16 像素区域用于块的不同纹理。
有人可以提供一些代码和解释吗?
几年前我写了一个 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