我目前正在使用笛卡尔坐标系进行绘画和显示。在我的游戏中,我有快速移动的物体,子弹,我使用以下公式来确定位置:
x += speed * Cos(theta);
y += speed * Sin(theta);
其中 theta 是radian
指标,速度以整体连续性为代价修改速度。 [ lim speed→∞] 然后 x 和 y =更大"跳跃"在开始和下一个计算的x,y点之间。
我不得不以高速'高速度使用这个配方。对象,所以我没有使用限制在毫秒.001的计时器,而是使用了一个while循环:
while(true) {
if(currentTime - oldTime > setInterval) //x,y and intersection operations {
//operations
} if(currentTime - oldTime > setInterval) //paint operations {
//operations
}
sleep(0,nanoseconds);//sleeps thread or if you're a C kind of guy, "task"
}
我希望x,y和交叉操作以比paint事件快得多的速度发生,我计划以每秒30-125次(基本上是监视器的hertage)发生。
实际问题:
*请注意我绘制对象的方法与我的问题无关,万一你想知道。
答案 0 :(得分:2)
每次屏幕刷新时都会启动定时器(60Hz?)。在那个时候,你计算物体在这个时间点的位置。您在确定的位置绘制对象。
每当您想要找出当前物体的位置时,您都会运行物理模拟,直到时间赶上您想要渲染的时间点。通过这种方式,您可以使对象在其应该处于的时间点内进行动画制作。
定义物理模拟运行的频率。您也可以选择60Hz或其任意整数倍。以相同的时间增量(1 /频率)运行物理引擎。当你想要渲染时,找出缺少多少物理刻度并逐个运行它们。
此方案对于缺少或多余的计时器滴答非常强大。 CPU时钟频率也无关紧要。该对象始终呈现在它应该处于的价格位置。