2011-04-07 45 views
0

我有一些從main函數調用的函數。下面是代碼。如何在GLUT中調度函數

int main(int argc, char *argv[]) 

{ 

    glutInit(&argc, argv); 

    glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE); 

    glutInitWindowSize (500, 500); 

    glutInitWindowPosition (100, 100); 

    glutCreateWindow("Game for Gamers"); 

    glutDisplayFunc(display_func); 

    glutKeyboardFunc(keyboard); 

    glutSpecialFunc(special); 

    glutTimerFunc(50,refreshcheck,0); 

    glutIdleFunc (animate); 

    glutReshapeFunc (reshape); 

    glutMainLoop(); 


    return 0; 

} 

這裏「refreshcheck」首先調用我想打電話給「display_func」 function.How執行後「refreshcheck」功能將安排它。我想打電話給「display_func」先執行功能時,在內存中加載遊戲在「refreshcheck」函數之前,在遊戲運行時沒有必要在「display_func」之後調用「refreshcheck」,但第一次這很重要。

+0

refreshcheck內部是什麼?可能有一種方法可以避免使用定時器。 – 2011-04-07 18:16:26

+0

在這個函數中,我已經使用了碰撞檢測檢查模塊爲每個球和移動對象在plane.display_func創建對象,這就是爲什麼我想打電話給它。 – 2011-04-07 18:18:07

+0

我可以控制邏輯,但我正在尋找一些標準的使用Glut。 – 2011-04-07 18:18:30

回答

1

您不應該在通常情況下在displayFunc中創建對象(正如dark_charlie指出的那樣)。但這只是不好的做法,沒有別的。

如果您需要碰撞檢測,您應該使其與渲染同步,即從displayFunc調用它(在它結束時)。

我想你想使用計時器的原因是有恆定的步驟物理。這通常以另一種方式完成,使用gettimeofday()(或窗口上的GetTickCount())獲取時間,並基於幀之間流逝的時間,物理被稱爲N次。這將使您獲得比使用GLUT定時器更高的精度,因爲定時器只能精確到10毫秒,在處理快速移動的對象時會很多,從而導致口吃。