我正在尝试计算Flash中的动画片段减速到零的时间。起始速度会有所不同,但出于举例的目的,我们可以说:
每秒帧数:30
速度:50
衰变:每帧的当前速度为.8 *
onEnterFrame(event:Event):void
{
movieClip.x += speed;
speed *= .8;
}
我如何计算减速到零所需的时间(以秒为单位)或总帧数?
谢谢!
答案 0 :(得分:2)
首先,你所说的加速度实际上是每帧的速度/速度(以像素为单位)。
从第一帧(第i帧)开始,当您开始将速度调整0.8倍时,您可以将速度表示为:
v(i)= v(i-1)* 0.8
并且 v(0)= 50
您可以使用v(0)重新表达v(i):
v(i)= v(0)* 0.8 i
我可以想到两种不同的停止条件:
1。 v(i)< 1 (意思是:速度低于1 px /帧)
2。 v(i) - v(i + 1)< 0.1 (意思是:帧之间的速度变化小于0.1 px)
首先得到:
v(0)* 0.8 i < 1
0.8 i < 1 / v(0)
我> log0.8(1 / v(0))
使用logb(x)= loga(x)/ loga(b)更改对数基数:
i> ln(1 / v(0))/ ln(0.8)
我> ln(1/50)/ ln(0.8)
我> 17.531
第二个你得到:
v(0)* 0.8 i -v(0)* 0.8 i + 1 < 0.1
v(0)* 0.8 i -v(0)* 0.8 i * 0.8< 0.1
v(0)* 0.8 i *(1 - 0.8)< 0.1
0.8 i < 0.1 /(v(0)*(1 - 0.8))
我> log0.8(0.1 /(v(0)*(1 - 0.8)))
i> ln(0.1 /(v(0)*(1 - 0.8)))/ ln(0.8)
我> ln(0.1 /(50 *(1 - 0.8)))/ ln(0.8)
我> 20.638
因此,使用这些数字,你可以获得大约20帧的时间,直到运动停止。 根据需要调整数字。