惯性机制

惯性用于执行计算,以便对对象移动进行动画处理,并在包含 Windows Touch 的应用程序中启用对通用可用性的支持。 本部分介绍由惯性启用的以下功能。

  • 惯性物理的简要概述。
  • 使用速度和减速属性的平滑对象动画。
  • 使用置换属性平滑对象动画。
  • 使用弹性边界从屏幕边缘弹跳。

惯性物理概述

惯性处理器使用包含位置、减速值和初始速度的简单物理模型。 时间用作模型的动态输入,以确定被置换的对象的当前位置。 下图和公式概述了用于计算对象位置的物理模型。

显示用于计算对象位置的图形和公式的插图

在用于计算当前位置 (x) 的公式中,初始速度 (v) 乘以经过的时间 (t) ,并按减速因子 (d) 乘以时间平方来减小。 这会导致对象平稳减速。 在上图中,初始 (曲线最左侧) 部分,对象正在快速移动,因为它的当前速度是初始速度。 在曲线的最后 (最右侧) 部分,对象已完全停止,因为它的速度为 0。 x 速度、y 速度和旋转速度的对象速度计算都使用此公式进行计算。

用于惯性处理器的所有距离都是相对的。 如果要使用屏幕坐标,请将屏幕坐标传递给操作 (或惯性) 处理器;如果要使用绝对坐标,请将这些坐标传递到正在使用的处理器中。 无论使用的值如何,操作处理器都将使用毫秒时钟刻度来处理时间。 可以使用 ProcessTime 方法直接将这些值传递给惯性处理器,也可以通过调用 Process 使用默认时间戳。

使用速度和减速属性的平滑对象动画

通过在惯性处理器接口中设置速度和减速值,然后调用 Process,可以直接与物理模型交互来启用平滑动画。 调用 Process 将触发对象操作,这反过来又会导致 UI 更新。 传递给惯性处理器的对象速度值通常在完成后从操作处理器中获取。 减速值将取决于希望对象的动画显示时长以及用于计算的单位。 由于值是依赖的,因此有时必须缩放操作处理器的输入速度,并使用任意值进行减速。 以下值是将 centipixel 值从 TOUCHINPUT 结构的 x 和 y 属性传递到操作处理器的各种方案的典型值。

方案 属性 Set 减速值 典型速度输入缩放 说明
翻译 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 显示器上具有自然的感觉。

 

使用所需置换属性的平滑对象动画

在某些情况下,你不希望使用用户的输入进行对象置换,但你仍希望对象在屏幕上流畅地进行动画处理。 在这种情况下,可以使用惯性处理器中的位移属性让处理器计算在屏幕上移动对象的初始速度。

使用弹性边界控制对象位置

当你有一个对象在屏幕上移动后,你通常希望它停止,然后它进入用户视点之外。 惯性处理器通过边界和弹性边距属性启用此功能。 下图演示了典型应用程序中的各种边界和边距属性。

显示边界和弹性边距属性的屏幕截图

为应用程序设置左边界、上限、右边界和下边界和弹性边距,惯性处理器将处理将 UI 元素保留在边界内。 当对象达到弹性边距时,它会减慢速度,直到到达边界。 在惯性期间,它永远不会再次离开该边距,但仍会移动,直到对象的垂直惯性分量减速到 0。 在图中,一个圆向左弹性边界移位。 实线箭头显示操作方向;实心圆是对象的初始位置;实心箭头是在圆达到弹性边距之前所做的更改;虚线箭头显示惯性处理器在达到边距后操作圆圈的位置;和虚线圆圈显示对象停止的位置。

注意

设置边距属性会将边界向外移动。 例如,如果顶部边界设置为 50,然后将顶部弹性边距设置为 10,则顶部边界实际上将变为 40。

 

处理非托管代码中的惯性

惯性

操作