释放后如何使用纹理?

时间:2013-06-17 00:35:19

标签: textures lwjgl

这可能听起来像一个奇怪的问题,但在这种情况下我无法弄清楚纹理。我正在为一个游戏制作一个游戏,你可以通过迷宫使用鼠标,如果碰到墙壁就会丢失。

在标题画面之后,有一个转换,玩家被指示在开始之前将鼠标放在正方形上,以便它们从正确的位置开始。这个方块有纹理。需要释放纹理以便绘制迷宫。触摸墙壁后,有一个纹理矩形填充屏幕上的游戏显示。然而,即使我告诉它在绘制之前绑定广场的纹理,在游戏画面之后它看起来没有纹理。我该如何解决这个问题?

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;

1 个答案:

答案 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;

我希望这会奏效。