0

这听起来像是一个奇怪的问题,但在这种情况下我无法弄清楚纹理。我正在为班级制作一个游戏,你可以让老鼠穿过迷宫,如果你碰到墙就会输。

在标题屏幕之后,有一个过渡,玩家被指示在开始之前将鼠标放在一个正方形上,以便他们从正确的位置开始。这个正方形是有纹理的。需要释放纹理才能绘制迷宫。触摸墙壁后,有一个带纹理的矩形填充游戏结束屏幕的显示。然而,即使我告诉它在绘制它之前为正方形绑定纹理,在游戏结束屏幕之后它似乎没有纹理。我怎样才能解决这个问题?

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;
4

1 回答 1

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;

我希望这会奏效。

于 2013-06-17T18:50:27.280 回答