【发布时间】:2015-08-23 15:50:55
【问题描述】:
我不知道我是不是……在这里没有看到什么。我已经为此工作了很长一段时间,试图让它发挥作用。我以前使用过精灵表和纹理坐标——所以我很熟悉它们。
我有一个 9 x 9 的精灵表(如图所示)。它是一个等距精灵表(因为我有等距图块)。总图像为 1152 x 576。
我计算出,根据尺寸,每个图块的宽度为128像素,高度为64像素。
每个图块占据的图像百分比为 0.111(纵向和高度 [128 / 1152 | 64 / 576])。
但是,我的代码不起作用。
代码和tilesheet的图像:http://i.imgur.com/JU4YYaB.png
原始代码:
@Override
public void drawTile(int tileX, int tileY, Texture atlas) {
int tileXcoord, tileYcoord;
tileXcoord = (tileX - tileY) * (TILE_XHALF);
tileYcoord = (tileX + tileY) * (TILE_YHALF);
atlas.bind();
//GL11.glColor3f(Red, Green, Blue);
GL11.glBegin(GL11.GL_QUADS);
{
setTextureCoordinates(1);
GL11.glVertex2f(tileXcoord, tileYcoord);
setTextureCoordinates(2);
GL11.glVertex2f(tileXcoord + TILE_XHALF, tileYcoord + TILE_YHALF);
setTextureCoordinates(3);
GL11.glVertex2f(tileXcoord + (TILE_XHALF * 2), tileYcoord);
setTextureCoordinates(4);
GL11.glVertex2f(tileXcoord + TILE_XHALF, tileYcoord - TILE_YHALF);
}
GL11.glEnd();
}
//***** SET TEXTURE COORDINATES *****
public void setTextureCoordinates(int pos) {
Rectangle rect = textureAtlas.getTexture(ID);
switch (pos) {
case 1 :
GL11.glTexCoord2f(0.0f, 0.0555f); // left-middle
//GL11.glTexCoord2f(0.0f, 0.5f);
break;
case 2:
GL11.glTexCoord2f(0.0555f, 0.111f); //top-middle
//GL11.glTexCoord2f(0.5f, 1f);
break;
case 3:
GL11.glTexCoord2f(0.111f, 0.0555f); // right-middle
//GL11.glTexCoord2f(1f, 0.5f);
break;
case 4:
GL11.glTexCoord2f(0.0555f, 0.0f); // bottom-middle
//GL11.glTexCoord2f(0.5f, 0.0f);
break;
}
}
【问题讨论】: