【问题标题】:How do I use one single PNG image for multiple sprites?如何将一个 PNG 图像用于多个精灵?
【发布时间】:2012-08-27 11:08:48
【问题描述】:

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

示例

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

谁能提供一些代码和解释?

【问题讨论】:

  • 我认为“一些代码”部分是您的责任,但是您可以有一个带有精灵网格的精灵表,将其作为 BufferedImage 读取,然后从图像中分离精灵使用 BufferedImage 的getSubImage(...) 方法。
  • 这可能会有所帮助:stackoverflow.com/q/621835/469220
  • 感谢你们,这对我帮助很大:D
  • 这种技术叫做:纹理图集。 :)
  • 另请参阅this example,其中我将图像雕刻成 9 个部分,用作GridLayout 中按钮和标签的图标。

标签: java image png


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-08
    • 2015-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    • 1970-01-01
    相关资源
    最近更新 更多