这可能听起来像一个奇怪的问题,但在这种情况下我无法弄清楚纹理。我正在为一个游戏制作一个游戏,你可以通过迷宫使用鼠标,如果碰到墙壁就会丢失。
在标题画面之后,有一个转换,玩家被指示在开始之前将鼠标放在正方形上,以便它们从正确的位置开始。这个方块有纹理。需要释放纹理以便绘制迷宫。触摸墙壁后,有一个纹理矩形填充屏幕上的游戏显示。然而,即使我告诉它在绘制之前绑定广场的纹理,在游戏画面之后它看起来没有纹理。我该如何解决这个问题?
case TRANSITION:
IndicatorBeacon.bind();
glBegin(GL_QUADS);
glTexCoord2f(0, 0);
glVertex2i(50, 50); //top left
glTexCoord2f(0, 1);
glVertex2i(50, 100); //bottom left
glTexCoord2f(1, 1);
glVertex2i(100, 100); // bottom right
glTexCoord2f(1, 0);
glVertex2i(100, 50); // top right
glEnd();
break;
case MAZE:
IndicatorBeacon.release();
Maze1.draw();
Maze2.draw();
Maze3.draw();
Maze4.draw();
Maze5.draw();
Maze6.draw();
Maze7.draw();
Maze8.draw();
Maze9.draw();
Maze10.draw();
break;
case GAMEOVER:
GameOver.bind();
glBegin(GL_QUADS);
glTexCoord2f(0, 0);
glVertex2i(0, 0); //top left
glTexCoord2f(0, 1);
glVertex2i(0, 520); //bottom left
glTexCoord2f(1, 1);
glVertex2i(1050, 520); // bottom right
glTexCoord2f(1, 0);
glVertex2i(1050, 0); // top right
glEnd();
break;
答案 0 :(得分:0)
也许我不对,但我认为你应该重新加载纹理。
如果您不知道该怎么做,我会帮助您。
如果您没有加载功能,请执行以下操作:
public void loadData() {
try {
exampleTexture = TextureLoader.getTexture("PNG",new FileInputStream(new File("res/textures/example.png")));
} catch (FileNotFoundException e) {
e.printStackTrace();
Display.destroy();
} catch (IOException e) {
e.printStackTrace();
Display.destroy();
}
}
从现在开始,您可以重新加载纹理,声音等。
好的,我们做了加载,但我建议你不要使用那样的OpenGL函数,把它们放到函数中!
public void drawStartSquare() {
glBegin(GL_QUADS);
glTexCoord2f(0, 0);
glVertex2i(50, 50); //top left
glTexCoord2f(0, 1);
glVertex2i(50, 100); //bottom left
glTexCoord2f(1, 1);
glVertex2i(100, 100); // bottom right
glTexCoord2f(1, 0);
glVertex2i(100, 50); // top right
glEnd();
}
public void drawGameOverRect() {
glBegin(GL_QUADS);
glTexCoord2f(0, 0);
glVertex2i(0, 0); //top left
glTexCoord2f(0, 1);
glVertex2i(0, 520); //bottom left
glTexCoord2f(1, 1);
glVertex2i(1050, 520); // bottom right
glTexCoord2f(1, 0);
glVertex2i(1050, 0); // top right
glEnd();
}
所以,从现在开始,您可以使用这样的语句:
case TRANSITION:
loadData();
IndicatorBeacon.bind();
drawStartSquare();
break;
case GAMEOVER:
loadData();
GameOver.bind();
drawGameOverRect();
break;
我希望这会奏效。