在png中将字符映射到X和Y - JAVA

时间:2015-01-31 21:13:42

标签: java lwjgl

我有这个png图片:

character tile map

和一个字符串,说" Hello World"。为了映射LWJGL的纹理坐标,我需要知道PNG中每个16x16字符的X和Y位置。我完全迷失了如何做到这一点......任何人?

1 个答案:

答案 0 :(得分:1)

从这样的事情开始:

final int spriteWidth = 16;
final int spriteHeight = 16;

 ...

int rows = sheet.getWidth()/spriteWidth;
int cols = sheet.getHeight()/spriteHeight;

BufferedImage sheet = ImageIO.read(new File("\\a\b\\c\\sprite_file.png"));
BufferedImage[] images = new BufferedImage[rows * cols];
for(int y = 0; y < cols; y++) {
    for(int x = 0; x < rows; x++) {
        images[y * x] = sheet.getSubImage(x * rows, y * cols, spriteWidth, spriteHeight);
    }
 }
  • 然后像这样制作最终的int变量:

    public static final int SPRITE_0 = 0;
    public static final int SPRITE_1 = 1;
    ...

并像这样访问:

images[SPRITE_0]


编辑:

考虑到@MadProgrammer所说的内容,我建议您将图像分成两部分,如下所示:

spritesheet

(在红线处分开)

然后简单地改变代码来处理两个不同的部分。除变量final int spriteWidthfinal int spriteHeight外,代码将保持不变。我相信你自己能解决这个问题。


编辑2:

如果你只想要每个精灵左上角的x和y co-ords,请执行以下操作:

final int spriteWidth = 16;
final int spriteHeight = 16;

...

int rows = sheet.getWidth()/spriteWidth;
int cols = sheet.getHeight()/spriteHeight;
Point[] spriteTopLeftCorner = new Point[rows * cols];
for(int y = 0; y < sheet.getHeight(); y += spriteHeight) {
    for(int x = 0; x < sheet.getWidth(); x += spriteWidth) {
        spriteTopLeftCorner[y/spriteHeight * x/spriteWidth] = new Point(y, x);
    }
}

你仍然需要在这个Array中创建代表每个精灵索引的变量,否则你不会知道你正在取出什么精灵。

  • 这样做:

    public static final int SPRITE_0 = 0;
    public static final int SPRITE_1 = 1;
    ...

  • 并像这样访问:

    spriteTopLeftCorner[SPRITE_0];