Всем привет. Ребята помогите с формулой. Написал для своей карты Knockback систему. Но столкнулся с проблемой на счет формулы. Т.е. есть функция: UnitKnockback, которая берет unit u, real angle, real distance, real duration.
Мне нужно сделать так, чтобы юнит отталкивался на указанное расстояние за указанное время.
Например: UnitKnockback(u,ang,1000,5) - Наш юнит в течении 5 секунд, двигается и достигает это расстояние. Вроде бы не проблема да. Но дело в том что мне нужно плавное торможение. Что означает, постепенно понижать скорость перемещения. И здесь я запутался с формулой.
Ведь если мы будем постепенно понижать скорость перемещения, то наш юнит не успеет за указанное время преодолеть это расстояние. Что говорит о том, что нужно увеличить начальную скорость. Нужно определить начальную скорость движение и значение, понижающая эту скорость. Итого получиться, что когда наш юнит достигнет это расстояние, общая скорость перещения будет равна или меньше 0.
Период таймера - 0.04

Принятый ответ

Эм. Ну если триггерно делаешь, то мути так: speed=maxspeed*(1-distance/max_distance) , где speed- текущая. maxspeed- начальная скорость (самая максимальная без замедления), distance (уже пройденное расстояние), maxdistance (максимальное расстояние).
Ой. не дочитал. Там зависимость еще от времени. Ну тогда вообще не проблема.
Мб тогда стоит к школьной физике обратиться?) S=V0+(at^2)/2. A будет отрицательной (a=-V0/t), т.к конечная скорость = 0.
S=V0t+(at^2)/2.
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
5
8 лет назад
0
Проблему решил. Кому интересно, использую формулу: speed=((distance*0.04)*duration)*4 - это начальная скорость движения и dec=(speed*0.04)/duration - это значение понижающая переменную speed.
0
6
8 лет назад
0
Поздравляю!
0
5
8 лет назад
0
l_Avenger_l:
Проблему решил. Кому интересно, использую формулу: speed=((distance*0.04)*duration)*4 - это начальная скорость движения и dec=(speed*0.04)/duration - это значение понижающая переменную speed.
ой, точнее speed=(distance*0.04)*duration
0
15
8 лет назад
0
Эм. Ну если триггерно делаешь, то мути так: speed=maxspeed*(1-distance/max_distance) , где speed- текущая. maxspeed- начальная скорость (самая максимальная без замедления), distance (уже пройденное расстояние), maxdistance (максимальное расстояние).
Ой. не дочитал. Там зависимость еще от времени. Ну тогда вообще не проблема.
Мб тогда стоит к школьной физике обратиться?) S=V0+(at^2)/2. A будет отрицательной (a=-V0/t), т.к конечная скорость = 0.
S=V0t+(at^2)/2.
Принятый ответ
0
26
8 лет назад
0
Использовал раньше переменную с неким стартовым значением (например set speed = 30.00 ), а далее при каждом движении юнита уменьшал её немного ( set speed = speed * 0.94 )
Чтобы оставить комментарий, пожалуйста, войдите на сайт.