惯性机制

惯性用于对对象移动进行动画处理,并支持在合并 Windows Touch 的应用程序中使用通用可用性。 本部分说明了惯性启用的以下功能。

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

惯性物理概述

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

显示用于计算对象位置illustration showing the graph and formula used for calculating object positionsillustration showing the graph and formula used for calculating object positions的图形和公式的插图

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

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

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

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

场景 属性集 减速值 典型速度输入缩放 笔记
译本 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 显示器上具有自然的感觉。

 

使用 Desired 排量属性的平滑对象动画

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

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

拥有在屏幕上移动的对象后,通常需要在对象超出用户观点之前停止该对象。 惯性处理器通过边界和弹性边距属性实现此功能。 下图演示了典型应用程序中的各种边界和边距属性。

显示边界和弹性边距属性screen shot showing boundary and elastic margin propertiesscreen shot showing boundary and elastic margin properties的屏幕截图

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

注意

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

 

在非托管代码 中处理惯性

惯性