信息
我使用<Chain>
<MsiPackage Id="mongodb.msi" SourceFile="$(var.mongoSourceDir)\mongodb-win32-x86_64-2008plus-ssl-3.4.4-signed.msi" EnableFeatureSelection="yes" DisplayInternalUI="yes" Compressed="yes" Visible="yes" />
</Chain>
,C
和OpenGL
编写了我的Rhythm游戏(如DJ Max,Jubeat等)代码。
GLUT
。glutTimerFunc()
用单个缓冲区绘制笔记,它显示出良好的速度但有一些闪烁。glFlush()
更改为glFlush()
时,速度会变慢,因此定时器功能不会每10毫秒完全调用一次。问题
如何在没有任何闪烁的情况下实现更快的动画(或重新绘制),每10毫秒刷新一次屏幕?
这是我的代码。
代码
初始化并开始音乐和游戏。
glutSwapBuffers()
显示功能
void musicStart(int id) {
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
glutInitWindowSize(1600, 900);
glutCreateWindow("Rhythm And Lines - Evnas");
glutDisplayFunc(displayMainWindow);
enter code hereglutKeyboardFunc(keyboardMainWindow);
glutKeyboardUpFunc(keyboardUpMainWindow);
glutTimerFunc(10, timerMainWindow, 1);
score = 0;
g_maxNotes = 6000;
myTmpNotes = (TmpNote*)malloc(sizeof(TmpNote)*MAXSIZE);
loadData(id);
initMainWindow();
playMusic(id);
glutMainLoop();
}
计时器功能,每10ms重复显示
void displayMainWindow(){
int tmpIdx=0;
int j,k;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
drawLines();
if (line < g_maxNotes) {
for (j = line; j < line+MAXSIZE; j++) {
strcpy(myTmpNotes[tmpIdx].noteId, g_notes[j].noteId);
myTmpNotes[tmpIdx].timeslice = g_notes[j].timeslice;
myTmpNotes[tmpIdx].originIdx = j;
tmpIdx++;
}
for (k=0; k<=MAXSIZE; k++) {
printNoteGUI(myTmpNotes[k].noteId, k);
}
}
highlightKey();
sprintf(scoreStr, "%d", score);
drawText(MAX_X/2, MAX_Y/2, scoreStr);
//glFlush(); -> Fast but flickering
glutSwapBuffers(); // -> No flickering but slow
}
我必须只使用void timerMainWindow(){
line++;
glutPostRedisplay();
glutTimerFunc(10, timerMainWindow, 1);
}
,C
和OpenGL
,因为这是我学校项目的规则。