Почему анимация иногда выполняется с использованием шагов, основанных на количестве времени, которое прошло? - PullRequest
5 голосов
/ 06 января 2010

Я заметил, что некоторые программисты анимируют объекты, основываясь на разнице во времени. Я не уверен, почему или даже если это логично. Кто-нибудь знает значение?

Ниже приведен фрагмент кода, который объясняет, что я имею в виду:

var timePassed:int = getTimer()-lastTime;
lastTime += timePassed;
var newBallX = ball.x + ballDX*timePassed;
var newBallY = ball.y + ballDY*timePassed;

Ответы [ 6 ]

16 голосов
/ 06 января 2010

Когда вы анимируете на основе времени, вы делаете себя независимым от частоты кадров. Независимо от того, сколько кадров прошло, ваш мяч будет перемещаться на одинаковое расстояние в течение заданного промежутка времени. Сравните это с зависимостью от частоты кадров, которая зависит от многих переменных, например, от того, сколько вычислительной мощности доступно для анимации.

Это распространенная проблема игровой физики - посмотрите на превосходную оценку Гленна Фидлера "Исправь свой временной шаг!" статья для более подробного ознакомления с этим. (Правильно сделать это немного сложнее, чем просто умножить векторы направления на временной шаг.)

4 голосов
/ 06 января 2010

Логика проста.

BallDX => Ball Delta X => Расстояние, на которое мяч может перемещаться по координате x за одну секунду

timepassed => количество прошедшего времени

if OldBallX = 0
if BallDX = 10
if TimePassed = 1 sec
Then NewBallX = OldBallX + (BallDX*TimePassed)

Что означает

NewBallX = 0 + (10 * 1) = 10 pixels

В этом случае

if TimePassed = 0.5 sec (half a second)

Тогда

NewBallX = 0 + (10 * 0.5) = 5 pixels 

Логическое

1 голос
/ 06 января 2010

Почему бы НЕ сделать это таким образом? В отличие от того, что делать? Это простое линейное движение, верно? Вот мысль: это позволяет мячу догнать свое предполагаемое положение в случае, если другие программы замедляют работу компьютера.

0 голосов
/ 06 января 2010

Если вы делаете анимацию как функцию времени, вы можете быть независимым от частоты кадров , что означает, что если вы делаете анимацию для 24 кадров в секунду, вы можете легко настроить анимация для сценария 30 кадров в секунду , если она динамическая (как в , определяемом функцией / , противоположной покадровому рисунку чертежи, где планирование - это все)

Это короткая история, для полного объяснения взгляните на добрую старую главу Роберта Пеннера о Движение, скручивание и расслабление .

0 голосов
/ 06 января 2010

Наиболее важным аспектом независимости от частоты кадров является то, что вам не нужно связывать частоту кадров. Раньше в темные времена игры писались так, чтобы максимально использовать процессор, а частота кадров определялась скоростью процессора. Я помню, как играл в игры на моей машине с частотой 16 МГц, в которых все происходило бы так быстро, что вы не могли среагировать, потому что они были написаны для машин с частотой 1 МГц. Программисты осознали это и начали писать игры с частотой кадров, обычно в начале в 30 кадров в секунду, а затем в 60 кадров в секунду (обычно привязанной к VSYNC монитора). Это решило проблему, но было очень неприятно для тех из нас, у кого есть потрясающие компьютеры, которым нужно более плавное движение. В конце концов они начали писать игры, полностью независимые от частоты кадров, что позволяет вам играть в игру со скоростью 700 кадров в секунду и получать тот же опыт, что и со скоростью 20 кадров в секунду, за исключением более плавной графики. И, как уже говорили другие, он также может справиться с изменением нагрузки во время игры, что может быть очень важно в современных многозадачных ОС.

0 голосов
/ 06 января 2010

Современная компьютерная операционная система выполняет много задач одновременно, и вы не всегда получаете интервалы времени через равные промежутки времени. Используя разницу в часах реального времени, вы сглаживаете движение по сравнению с тем, если вы перемещаете одно и то же количество каждый раз по циклу, что может привести к тому, что оно будет выглядеть прерывисто, если ОС передаст несколько секунд еще одному процессу к твоему.

...