我出于学习目的制作了一个程序(使用 C++,使用 gl/glut),您基本上可以在屏幕上跑来跑去(第一人称),并且场景周围有几个实体。我试图在不同的计算机上运行它并且速度完全不同,所以我搜索了这个主题,我目前正在做这样的事情:
空闲函数:
start = glutGet (GLUT_ELAPSED_TIME);
double dt = (start-end)*30/1000;
<all the movement*dt>
glutPostRedisplay ();
end = glutGet (GLUT_ELAPSED_TIME);
显示函数:
<rendering for all objects>
glutSwapBuffers ();
我的问题是:这是正确的做法吗?空闲功能后正在显示场景吗?
编辑:我只是注意到,按照我的想法,end-start 最终应该是自所有绘图完成后到运动更新之前耗时,因为 idle () 会尽快调用显示 () 结束,所以这里唯一没有考虑的时间是计算机完成所有运动所花费的时间是真的吗? (应该什么都没有?)
抱歉,如果这太困惑了..
提前致谢。
最佳答案
我不知道“过剩”是什么,但作为游戏开发的一般规则,我永远不会根据计算机处理指令的速度来确定移动速度。这就是他们在 80 年代后期所做的,这就是为什么当你玩一款老游戏时,事情会以光速发展。
我会设置一个计时器,让我的所有 Action 都基于明确且具体的定时事件。
关于c++ - 关于在任何计算机上以相同速度运行程序的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2372705/