2013-06-17 1 views
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; 

답변

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; 

나는이 일을 바랍니다.

+0

이것은 매력을했습니다. 아직 함수에서 수행 된 텍스처로드가 없었습니다. 그리고 일단 그것을 하나에 배치하면 필요한 경우 텍스처를 다시로드하여 호출 한 후에 다시 바인딩 할 수있었습니다. 고맙습니다! – IceMage88

+0

여러분을 환영합니다! – werck

관련 문제