如何在没有屏幕闪烁的情况下进行while循环
How to make a while loop without the screen flickering
我正在尝试制作 PacMan 游戏的变体,但我 运行 遇到了一些问题,其中之一是不知道如何打印整个地图和吃豆人移动时屏幕不闪烁。
这是我为打印所做的:
while(commmand) {
system("CLS");
display();
if(kbhit()) {
command = getch();
move(command);
}
move(command);
printf("SCORE: %d",score);
}
命令、显示和移动是我的功能,它们可以正常工作。有没有其他不闪屏的方法?
是的,有。你想看看 double-buffering (或多缓冲)。一般的想法是,你有两个(或更多缓冲区),而一个缓冲区,比如缓冲区 A,显示在屏幕上,你正在执行所有计算(即物理、运动、四个幽灵的 AI)并绘制到第二个缓冲区,比如缓冲区 B。当所有计算完成后,我们交换 A 和 B,以便显示缓冲区 B,然后使用缓冲区 A 进行计算。
OpenGL 原生支持双缓冲,请参阅 this tutorial。我从未使用过 DirectX,所以我不能谈论它,但如果它没有办法进行双缓冲,我会感到惊讶。
我正在尝试制作 PacMan 游戏的变体,但我 运行 遇到了一些问题,其中之一是不知道如何打印整个地图和吃豆人移动时屏幕不闪烁。 这是我为打印所做的:
while(commmand) {
system("CLS");
display();
if(kbhit()) {
command = getch();
move(command);
}
move(command);
printf("SCORE: %d",score);
}
命令、显示和移动是我的功能,它们可以正常工作。有没有其他不闪屏的方法?
是的,有。你想看看 double-buffering (或多缓冲)。一般的想法是,你有两个(或更多缓冲区),而一个缓冲区,比如缓冲区 A,显示在屏幕上,你正在执行所有计算(即物理、运动、四个幽灵的 AI)并绘制到第二个缓冲区,比如缓冲区 B。当所有计算完成后,我们交换 A 和 B,以便显示缓冲区 B,然后使用缓冲区 A 进行计算。
OpenGL 原生支持双缓冲,请参阅 this tutorial。我从未使用过 DirectX,所以我不能谈论它,但如果它没有办法进行双缓冲,我会感到惊讶。