Поделиться через


Механика инерции

Инерция используется для выполнения вычислений для анимации перемещения объектов и обеспечения универсальной удобства использования в приложениях, включающих Windows Touch. В этом разделе показаны следующие функции, включенные инерцией.

  • Краткий обзор физики инерции.
  • Анимация гладкого объекта с помощью свойств скорости и замедления.
  • Анимация гладкого объекта с помощью свойства смещения.
  • Отскочивание от краев экрана с помощью эластичных границ.

Обзор физики инерции

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

иллюстрации с графом и формулой, используемой для вычисления позиций объектов

В формуле, используемой для вычисления текущей позиции (x), начальная скорость (v) умножается на время истекшего времени (t) и уменьшается на коэффициент замедления (d) тайм-квадрат. Это приводит к замедлению гладкого объекта. На предыдущем рисунке на начальной (левой) части кривой объект перемещается быстро, так как его текущая скорость является начальной скоростью. В последней (правой) части кривой объект полностью остановился, потому что его скорость составляет 0. Вычисления скорости объекта для вычислений x-скорости, скорости y и скорости поворота используют эту формулу для вычислений.

Все расстояние, используемое для процессора инерции, является относительным. Если вы хотите использовать координаты экрана, передайте координаты экрана обработчику манипуляции (или инерции); Если вы хотите использовать абсолютные координаты, передайте их в используемый процессор. Независимо от используемых значений обработчик манипуляций будет использовать часы миллисекунда для обработки времени. Эти значения можно передать непосредственно обработчику инерции с помощью метода ProcessTime или с помощью метки времени по умолчанию с помощью вызовов Process.

Анимация гладкого объекта с помощью свойств скорости и замедления

Вы можете включить плавную анимацию, напрямую взаимодействуя с моделью физики, установив значения скорости и замедления в интерфейсе обработчика инерции, а затем вызовите Process. Вызов процесса активирует манипуляции с объектами, которые, в свою очередь, должны вызывать обновления пользовательского интерфейса. Значения скорости объекта, передаваемые процессору инерции, обычно принимаются от обработчика манипуляций после завершения. Значение замедления будет зависеть от времени, в течение которого объект будет анимирован и единиц, которые вы используете для вычислений. Поскольку значения зависят, иногда необходимо масштабировать скорость ввода из обработчика манипляции и использовать произвольные значения для замедления. Следующие значения являются типичными для различных сценариев, когда вы передаете значения centipixel из свойств x и y структуры TOUCHINPUT обработчику манипуляций.

Сценарий Набор свойств Значение замедления Типичное масштабирование входных данных скорости Примечания
Перевод DesiredDeceleration 0.003f Никакой. Использование этого значения приведет к более длительным анимациям расстояния при использовании сенсорного ввода.
Перевод DesiredDeceleration 0.001f 1/20-я начальная скорость для сенсорных входных данных, ни для входных данных мыши Использование этого значения будет анимировать около секунды с заданными типичными входными данными скорости.
Перевод DesiredDeceleration 0.5f Никакой Использование этого значения дает естественное ощущение анимации на больших дисплеях Windows Touch.
Вращение DesiredAngularDeceleration 0.000015f Радианы преобразуются в градусы. Использование этого значения приводит к более длинным анимациям поворота при использовании сенсорного ввода.
Вращение DesiredAngularDeceleration 0.00001f 1/40-й разностный поворот для сенсорных входных данных, ни для ввода мыши Это значение находится в радианах, поэтому необходимо использовать очень небольшие значения замедления и скорости.
Вращение DesiredAngularDeceleration 0.000005f Никакой Это значение имеет естественное ощущение на больших дисплеях Windows Touch.

 

Анимация гладкого объекта с помощью свойства требуемого смещения

В некоторых случаях не требуется использовать входные данные пользователя для смещения объектов, но объект по-прежнему будет плавно анимироваться на экране. В этом случае можно использовать свойства смещения в обработчике инерции, чтобы процессор вычислял начальную скорость перемещения объекта по экрану.

Управление положением объекта с помощью эластичных границ

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

снимок экрана с свойствами границ и эластичных полей

Вы задаете левые, верхние, правые и нижние границы и эластичные поля для приложения, а обработчик инерции будет обрабатывать элементы пользовательского интерфейса в пределах границ. Когда объект достигает эластичного поля, он замедлится, пока не достигнет границы. Он никогда не будет оставить это поле снова во время инерции, но по-прежнему будет двигаться, пока перпендикулярный компонент инерции объекта уменьшается до 0. На рисунке круг перемещается к левой эластичной границе. Сплошная стрелка показывает направление манипуляции; сплошной круг является начальной позицией объекта; сплошная стрелка — это изменения, внесенные до того, как круг попадает в эластичное поле; Пунктирная стрелка показывает, где обработчик инерции управляет кругом после того, как он ударит по полям; и тиреные круги показывают, где останавливается объект.

Заметка

Задание свойств поля перемещает границы наружу. Например, если для верхней границы задано значение 50, а затем для верхней эластичной границы задано значение 10, то верхняя граница будет эффективно 40.

 

обработка инерции в неуправляемом коде

инерции

манипуляций