您能否帮我找出以下情况的正确减速率:汽车必须停在 A 点。假设汽车距离 A 200 像素,它以 50 的速度行驶。现在我怎样才能实现正确的减速,使汽车逐渐降低速度并最终停在 A 点?在现实世界中这很容易,但在计算机世界中,我们必须考虑到汽车不动的事实,实际上它只是屏幕每次在更新的位置重新绘制它。顺便提一下,有一个时间表可以触发以给定速度使汽车前进的方法。所以我认为在计算时还必须考虑调度间隔。我不认为语言、设备或平台很重要,但以防万一
问问题
165 次
1 回答
1
别担心,你不需要特殊的数学,你可以使用你的“真实世界数学”就好了。调度程序和帧率的问题也不是真正的问题,而是与帧率相关的运动有关。假设你有这个函数来移动你的对象(半伪代码):
- (void)move
{
if(velocity.x < 5)
return;
car.x += velocity.x;
velocity.x -= 5;
}
此代码取决于帧速率,例如,如果您以 30 FPS 渲染并从velocity.x
150 开始,则对象减速到 0 将需要一秒钟。但是,如果您以 60 FPS 运行相同的方法, 物体减速到 0 只需要半秒。
因此,您真正想要的是一种独立于帧速率移动汽车的方法,这样无论您运行代码的帧速率如何,它都能在一秒钟内移动 n 点。实现这一点的方法是使用帧将用于渲染的时间,并将这个增量时间与您的移动相乘。而且由于您无法预测在渲染之前或渲染时帧需要多长时间,因此您通常使用前一帧的增量时间。然后你最终得到如下代码:
- (void)move
{
if(velocity.x < 5 * delta)
return;
car.x += velocity.x * delta;
velocity.x -= 5 * delta;
}
(如果你真的使用它,你会发现你的移动突然变得慢了很多,因为之前你每帧移动 5 个点,现在你每秒移动 5 个点!)
我不是 Cocos 2D 专业人士,但看起来(通过快速的 google 搜索)您可以通过几种方法获得 delta 时间(我无法命名它们,类引用似乎没有提及它们,但是如果你在某个地方有一个方法可以让ccTime
每一帧都通过,那可能就是其中之一)
于 2012-06-23T20:18:57.267 回答