2012-07-11 36 views
3

我渲染2D(基於圖塊)場景並註冊按鍵。當按下箭頭鍵時,我移動相機。雖然按鍵註冊很好,我的場景不更新,直到我換到另一個窗口,並返回場景刷新凍結

你能給我一些關於是什麼導致問題的線索嗎?

PS。我正在研究Linux,正在開發OpenGL應用程序的幫助過量freeglut)。

我的渲​​染功能:

void render() { 
    glClear(GL_COLOR_BUFFER_BIT); 
    glLoadIdentity(); 

    if (s_map) 
    for (int i = s_iCameraX; i < sc_iTilesY + s_iCameraY && i < s_map->usiHeight; i++) 
    { 
     for (int j = s_iCameraY; j < sc_iTilesX + s_iCameraX && j < s_map->usiWidth; j++) 
     { 
      short val = s_map->data[i][j];    
      if (val == 0x0010) glBindTexture(GL_TEXTURE_2D, texture[0]); 
      else if (val == 0x0020) glBindTexture(GL_TEXTURE_2D, texture[1]); 

      glBegin(GL_QUADS); 
       glTexCoord2f(0.0f, 0.0f); glVertex2f(j-s_iCameraX, i-s_iCameraY); 
       glTexCoord2f(1.0f, 0.0f); glVertex2f(j-s_iCameraX+1.0f, i-s_iCameraY); 
       glTexCoord2f(1.0f, 1.0f); glVertex2f(j-s_iCameraX+1.0f, i-s_iCameraY+1.0f); 
       glTexCoord2f(0.0f, 1.0f); glVertex2f(j-s_iCameraX, i-s_iCameraY+1.0f); 
      glEnd(); 
     } 
    } 

glutSwapBuffers(); 
} 

我的特殊鍵處理功能:

void keyproc(int key, int x, int y) { 
    switch (key) 
    { 
    case GLUT_KEY_UP: 
     printf("UP: %d %d\n", s_iCameraX, s_iCameraY); 
     if (s_iCameraY - 1 >= 0) s_iCameraY--; 
     break; 

    case GLUT_KEY_DOWN: 
     printf("DOWN: %d %d\n", s_iCameraX, s_iCameraY); 
     if (s_map && s_iCameraY + 1 < s_map->usiHeight) s_iCameraY++; 
     break; 

    case GLUT_KEY_RIGHT: 
     printf("RIGHT: %d %d\n", s_iCameraX, s_iCameraY); 
     if (s_map && s_iCameraX + 1 < s_map->usiWidth) s_iCameraX++; 
     break; 

    case GLUT_KEY_LEFT: 
     printf("LEFT: %d %d\n", s_iCameraX, s_iCameraY); 
     if (s_iCameraX - 1 >= 0) s_iCameraX--; 
     break; 

    default: break; 
    } 
} 
+0

你能告訴你的主循環? – Synxis 2012-07-12 08:49:36

+0

我沒有一個。我利用glut'glutMainLoop()'函數。 – Robin92 2012-07-12 13:00:22

+0

按下按鍵後仍然調用'render()'(你可以用'printf()'跟蹤它嗎?你的空閒回調是什麼? – Synxis 2012-07-12 18:59:30

回答

1

下可能是值得一試:添加空閒回調:

void idle(void) 
{ 
    // Force GLUT to render the scene 
    glutPostRedisplay(); 
} 
+0

這解決了這個問題。謝謝:) – Robin92 2012-07-13 14:05:58