选择正确的减速率以获得零速度

时间:2012-06-23 19:52:17

标签: iphone cocos2d-iphone

请您帮我找出以下情况的正确减速率:  汽车必须停在A点。假设汽车距离A 200像素,它以50的速度行驶。现在我怎样才能达到正确的减速度,以便汽车逐渐降低速度并最终在A点停止?在现实世界中它很容易但是在计算机世界中我们必须考虑到这样一个事实,即汽车不会移动,实际上它只是每次在较新的位置重新绘制它的屏幕。只是要提一下,有一个计划可以触发以给定速度向前推进汽车的方法。所以我认为在计算时也要考虑计划间隔。  我不认为语言,设备或平台很重要,但以防我在iPhone中这样做cocos2d

1 个答案:

答案 0 :(得分:1)

别担心,你这里不需要特殊的数学,你可以使用你的“真实世界数学”就好了。调度程序和帧速率的问题也不是真实问题,而是与帧速率依赖运动有关。假设你有这个功能来移动你的对象(半伪代码):

- (void)move
{
    if(velocity.x < 5)
        return;

    car.x += velocity.x;
    velocity.x -= 5;
}

此代码取决于帧速率,例如,如果使用30 FPS渲染并以velocity.x 150开始,对象减速到0将需要一秒钟。但是,如果运行同样的方法在FPS为60时,对象减速到0只需半秒钟。

所以你真正想要的是一种独立于帧速率移动你的汽车的方法,这样无论你运行代码的帧速率如何,它都会在一秒内移动n点。实现这一目标的方法是使用框架用于渲染的时间,并将此增量时间与您的移动相乘。并且因为您无法预测帧在渲染之前或渲染时渲染的时间长度,所以通常使用前一帧的增量时间。然后你最终得到的代码如下:

- (void)move
{
    if(velocity.x < 5 * delta)
        return;

    car.x += velocity.x * delta;
    velocity.x -= 5 * delta;
}

(如果你真的使用它,你会发现你的动作突然变得慢了很多,因为之前你每帧移动5点,现在你每秒移动5点!)

我不是Cocos 2D专业人士,但它(从快速的谷歌搜索中)看来,您可以通过几种方法获得增量时间(我无法命名它们,类引用似乎没有提及他们,但如果你在某个地方有一个方法,每帧都会传递ccTime,那可能是其中之一)