Рассчитать время замедления, используя начальную скорость и затухание - PullRequest
1 голос
/ 30 сентября 2011

Я пытаюсь подсчитать, сколько времени понадобится мувиклипу во Flash, чтобы замедлить до нуля. Начальная скорость будет меняться, но для примера скажем:

Кадров в секунду: 30

Скорость: 50

Распад: .8 * текущая скорость каждого кадра

onEnterFrame(event:Event):void
{
    movieClip.x += speed;
    speed *= .8;

}

Как бы я вычислил время в секундах или в общем количестве кадров, которое потребуется для замедления до нуля?

Спасибо!

1 Ответ

2 голосов
/ 30 сентября 2011

Прежде всего, то, что вы называете ускорением, это скорость / скорость в пикселях на кадр.

Начиная с самого первого кадра (i-го), когда вы начинаете регулировать скорость с коэффициентом 0,8, вы можете выразить скорость как:

v (i) = v (i-1) * 0,8
и v (0) = 50

Вы можете повторно выразить v (i), используя v (0), как:

v (i) = v (0) * 0,8 i

Я могу вспомнить 2 разных условия остановки:

1. v (i) <1 </b> (имеется в виду: скорость падает ниже 1 пикселя / кадр)
2. v (i) - v (i + 1) <0,1 </b> (что означает: скорость изменяется менее чем на 0,1 пикселя между кадрами)

За первое, что вы получите:

v (0) * 0,8 i <1 </p>

0,8 i <1 / v (0) </p>

i> log0,8 (1 / v (0))

изменение логарифмической базы с использованием logb (x) = loga (x) / loga (b):

i> ln (1 / v (0)) / ln (0.8)

i> ln (1/50) / ln (0,8)

i> 17,531

За секунду вы получите:

v (0) * 0,8 i - v (0) * 0,8 i + 1 <0,1 </p>

v (0) * 0,8 i - v (0) * 0,8 i * 0,8 <0,1 </p>

v (0) * 0,8 i * (1 - 0,8) <0,1 </p>

0,8 i <0,1 / (v (0) * (1 - 0,8)) </p>

i> log0,8 (0,1 / (v (0) * (1 - 0,8)))

i> ln (0,1 / (v (0) * (1 - 0,8))) / ln (0,8)

i> ln (0,1 / (50 * (1 - 0,8))) / ln (0,8)

i> 20,638

Итак, с этими числами вы получаете около 20 кадров времени, пока движение не остановится. Настройте числа по своему усмотрению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...