通过动画对象实例来支持图形显示元素的动画制作的系统

申请号 CN03801872.1 申请日 2003-05-15 公开(公告)号 CN1689046A 公开(公告)日 2005-10-26
申请人 微软公司; 发明人 M·卡尔金斯; J·S·比答三世; K·加罗; G·K·翁; L·E·布兰克;
摘要 揭示了一种图形显示动画制作系统,该系统支持图形显示内的元素的元素属性值的定时的 修改 。该动画制作系统利用显示结构,该显示结构用于维护与用图表表示的显示场景内的显示对象相对应的一组元素。这些元素包括可变属性值。该动画制作系统也利用属性系统,该属性系统维护与该显示结构所维护的元素关联的属性。这些属性包括能够随时间的推移而改变的动态属性——因而会影响图形显示上的这个对应的元素的外观。该动画制作系统包括一些动画类,动画对象从这些动画类中被加以实例化并且与运行时间的元素属性相关联。这些动画对象实例提供时变值,这些时变值会影响被分配给该属性系统所维护的这些动态属性的值。
权利要求

1.一种支持元素属性值的定时修改的图形显示动画制作系统,该图形 显示动画制作系统的特征在于包括:
-显示结构,用于维护一组元素,其中,元素包括影响该元素的显示特征 的可变属性值;
-属性系统,用于维护与由该显示结构所维持的元素关联的属性,包括能 够随时间的推移而改变的动态属性;以及,
一些动画类,动画对象从中被加以实例,其中,这些动画对象实例提供影 响被分配给这些动态属性的值的时变值。
2.权利要求1的图形显示动画制作系统,其特征在于进一步包括:
-动态动画类,它使一个或多个动画对象与该显示结构内的元素的动态属 性相关联。
3.权利要求1的图形显示动画制作系统,其特征在于进一步包括:
-动画收集类,用于为一组动画类对象分组,其中,该动画收集类的实例 通过将这个动画类对象集应用于基本值,来提供组成的输出值。
4.权利要求1的图形显示动画制作系统,其特征在于:其中,这些动 画类每个都规定内部时间线索。
5.权利要求4的图形显示动画制作系统,其特征在于:其中,动画对 象实例附属于父时间线索,该父时间线索提供关于该内部时间线索所定义的定 时序列的上下文。
6.权利要求5的图形显示动画制作系统,其特征在于:其中,该父时 间线索由关于这些动画对象实例的容器来加以规定。
7.权利要求1的图形显示动画制作系统,其特征在于:其中,这些动 画类中的一些动画类都与它们为其呈现时间可变值的特定数据类型有关联。
8.权利要求7的图形显示动画制作系统,其特征在于:其中,这些动 画类中的一个动画类提供浮点值。
9.权利要求7的图形显示动画制作系统,其特征在于:其中,这些动 画类中的一个动画类提供关于提出框的维数。
10.权利要求7的图形显示动画制作系统,其特征在于:其中,这些动 画类中的一个动画类提供矩形的左上部的位置
11.权利要求7的图形显示动画制作系统,其特征在于:其中,这些动 画类中的一个动画类提供时变彩色值。
12.权利要求7的图形显示动画制作系统,其特征在于:其中,这些动 画类中的一个动画类提供布尔值。
13.一种用于为图形显示系统中的显示元素制作动画的方法,该图形显 示系统包括用于维护由执行程序生成的一组运行时间显示元素的显示结构以 及用于管理与这些显示元素关联的属性的属性系统,并且,其中,通过响应于 时间的流逝来修改显示元素属性值,可以实现为这些显示元素中的任何显示元 素制作动画,该方法的特征在于包括:
创建包括可修改的属性的图形显示元素;
定义可分配给这个可修改的属性的动画行为;
根据来自运行时间的程序的请求,来使该动画行为与该元素的这个可修改 的属性相关联;以及,
根据该动画行为,来将一连串时变值提供给这个可修改的属性。
14.权利要求13的方法,其特征在于:进一步包括提供一组动画类,其 中,每个动画类定义动画行为。
15.权利要求13的方法,其特征在于:其中,这个动画类的集合规定动 画类型,其中,一个动画类型对应于由一种动画类的一些实例来处理的一种类 型的数据。
16.权利要求13的方法,其特征在于:其中,从具体表现该动画行为的 动画类中被实例化的动画对象促进了该提供步骤。
17.权利要求13的方法,其特征在于:其中,这个定义动画行为的步骤 包括为动画收集类内的一动画类实例的集合分组,其中,该动画收集类的一个 实例通过将这个动画类实例集合应用于一基本值,来提供组成的输出值。
18.权利要求13的方法,其特征在于:其中,该关联步骤包括:实例化 动态动画类,该动态动画类将一个或多个动画对象附属于该元素上的这个可修 改的属性。
19.权利要求13的方法,其特征在于:其中,根据与定义该动画行为的 一个或多个动画对象关联的定时树节点,来规定关于该时变值序列的进展的定 时。
20.权利要求13的方法,其特征在于:进一步包括:使父时间线索附属 于动画对象,从而提供关于内部时间线索所定义的局部定时序列的全局定时上 下文。
21.权利要求20的方法,其特征在于:其中,该动画对象的该父时间线 索由关于动画对象实例的一个收集的容器来规定。
22.权利要求13的方法,其特征在于:其中,这个提供一连串时变值的 步骤包括:在活动动画周期内,多次将当前时间和基本属性值应用于具体表现 该动画行为的动画值发生器,以便呈现关于这个可修改的属性的当前值;以及
根据关于这个可修改的属性的该当前值,来生成更新的布局。
23.一种方法,用于将动画行为应用于属性系统所维护的元素属性,以 便在这段时间内执行对该元素属性值的顺序修改,所述方法的特征在于包括:
从规定基本动画行为的动画对象类中实例化动画对象实例;
从规定组成的动画对象列表的动画收集类中实例化动画收集对象;以及
从动画收集类中实例化动态动画收集,该动画收集类使该动画收集对象与 该属性系统所维护的该元素属性相关联。
24.权利要求23的方法,其特征在于:进一步包括:将父时间线索分配 给这些动画对象类的实例。
25.权利要求23的方法,其特征在于:进一步包括:定动画对象实例 的这些属性。
26.权利要求23的方法,其特征在于:进一步包括:锁定动画收集对象 实例的这些属性。
27.权利要求23的方法,其特征在于进一步包括:
将当前时间和基本属性值应用于该动画收集对象的这些组成的动画对象, 以便呈现关于该元素属性的当前属性值;以及,
根据关于该元素属性的该当前属性值,来生成更新的布局。
28.一种包括计算机可执行指令的计算机可读介质,这些计算机可执行指 令用于提供支持元素属性值的定时的修改的图形显示动画制作系统,其特征在 于:该图形显示动画制作系统包括:
-显示结构,用于维护一组元素,其中,元素包括影响该元素的显示特征 的一可变属性值;
-属性系统,用于维护与该显示结构所维护的元素关联的属性,包括能够 随时间的推移而改变的一些动态属性;以及,
一些动画类,动画对象从中被加以实例化,其中,这些动画对象实例提供 影响被分配给这些动态属性的值的时变值。
29.权利要求28的计算机可读介质,其特征在于:其中,该图形显示动 画制作系统进一步包括:
动态动画类,它使一个或多个动画对象与该显示结构内的元素的动态属性 相关联。
30.权利要求28的计算机可读介质,其特征在于:其中,该图形显示动 画制作系统进一步包括:
-动画收集类,用于为一动画类对象的集合分组,其中,该动画收集类的 实例通过将这个动画类对象集合应用于基本值,来提供一组成的输出值。
31.权利要求28的计算机可读介质,其特征在于:其中,这些动画类的 每个都规定一内部时间线索。
32.权利要求31的计算机可读介质,其特征在于:其中,动画对象实例 附属于父时间线索,该父时间线索提供关于该内部时间线索所定义的定时序列 的上下文。
33.权利要求32的计算机可读介质,其特征在于:其中,该父时间线索 由关于这些动画对象实例的容器来加以规定。
34.权利要求28的计算机可读介质,其特征在于:其中,这些动画类中 的任何动画类都与它们为其呈现时间可变值的特定数据类型相关联。
35.权利要求34的计算机可读介质,其特征在于:其中,这些动画类中 的一个动画类提供浮点值。
36.权利要求34的计算机可读介质,其特征在于:其中,这些动画类中 的一个动画类提供关于提出框的维数。
37.权利要求34的计算机可读介质,其特征在于:其中,这些动画类中 的一个动画类提供矩形的左上部的位置。
38.权利要求34的计算机可读介质,其特征在于:其中,这些动画类中 的一个动画类提供时变彩色值。
39.权利要求34的计算机可读介质,其特征在于:其中,这些动画类中 的一个动画类提供布尔值。

说明书全文

发明领域

本发明一般涉及计算设备。更具体地说,本发明涉及计算机系统组件和子 系统,它们用于维护和提供由来自操作系统和/或应用程序的数据和指令输入 来驱动的图形用户界面视图。

发明背景

就其本性而言,图形用户界面是高度形象化的。涉及用户和图形用户界面 的典型交互式会话包括多个实例:用户执行有关显示元素的动作(例如,移动 指针,并且选择图标或控制器),以调用操作;然后,观察该操作的各种结果。 引起用户对特定元素或图形用户界面的注意或者指出活动状态或变化状态的 一种方法是:通过该图形元素的动画动作。这里所使用的动画包括:通过在一 段时期内对显示元素所应用的一连串递增量,来改变该图形显示元素(例如, 图标、控制器、窗口等)的外观或位置。但是,动画也包括对非视觉显示元素 的基于时间的更改。这样,如这里所提及的动画既包括视觉动画(即,改变视 觉显示参数值),又包括非视觉动画(即,随时间的推移来改变参数值,而不 影响视觉显示元素)。
动画制作有潜来增强计算机系统和应用程序的可用性和美学吸引力。用 户界面,尤其是图形用户界面在计算机/用户交互作用中发挥重要的作用。通 过为该用户提供传达计算机程序或其组件的状态的附加类型的信息或方法,动 画增强了该计算机/用户交互作用的体验。例如,动画允许显示变化的进展, 这结合所理解的上下文来告诉用户已发生的情况(例如,被删除的文件浮动到 回收站),而不是使所选择的项目仅仅消失或立即更改。另外,许多人将会同 意:动画可以让与计算机系统的交互作用更加有趣,并且能够更有效地吸引用 户的注意力。另外,动画也可以令对属性值的变化自动化。特别是,用户模式 应用程序设立手动计时器,然后,响应于那些计时器来更改值。
动画很可能不被并入许多用户界面,其中,这类动画将对用户有益。一个 原因只是出于为用户界面元素制作动画的成本。动画制作通常是一项耗时/麻 烦的任务。通过采取成本/利益方法来执行图形用户界面中的动画,加入动画 的利益应该超过其成本。由于动画编程的当前相对较高的成本,会得益于动画 的许多应用程序因其相对较高的实施成本而不会被加以动画化。
降低动画制作成本的一种方法是:对于多种不同的用途而再使用动画编 程。但是,通常不会再使用动画代码。而是使用编程工具,在开发时间、完全 在这些应用程序本身以内为单一(应用程序)用途动画代码进行编程。该动画 行为在这个编译的程序代码以内被明确地加以定义。在运行时间期间,通过只 执行这个先前被编程的代码段,来实现该动画。除十分耗时以外,将动画并入 程序潜在地会导致过度大的程序,这是由于被用来执行显示元素中的这些所需 动画行为的详细的数据和指令的缘故。
努力增强用户界面中的动画的可编程性(programmability)已产生不可 编辑的/整体式的动画脚本序列的设计和供应,从中引用可执行的脚本段,以 提供所需的动画行为。这类(例如)基于“同步多媒体集成语言”(SMIL)标 准的已知动画编程方法结合了关键形成方法。这些关键帧形成方法依靠引用 整体式、不可编辑的、动画脚本的特定段。
原先已知的关键帧形成方法展示了“在图形用户界面中为新的动画行为编 程”这一方面相对缺乏灵活性。该关键帧形成本包括使指定的起点与终点之间 的显示元素(或元素合成)形态变化的编译的、不可编辑的一连串动画指令。 在动画序列中选择两个点、然后在那两个点之间执行该程序脚本的这个已知的 关键帧形成动画制作方法可协助程序设计人员尝试执行在这些先前所创建/编 译的动画脚本以内被加以具体表现的动画行为。但是,该关键帧形成方法将所 支持的动画制作的范围局限于由现存的基础动画脚本定义的这些线性进展。在 将这些动画脚本发送给用户/开发者之前,需要识别所有这些得到支持的动画 行为并为它们编码,该基础动画脚本开发受到这一点的阻碍。在该动画脚本的 使用期限期间,很可能会出现许多实例——其中,该脚本中不包含所需的动 画行为。但是,该脚本不可以由用户/开发者来加以编辑,所以无法被用来执 行先前没有在该编译的动画脚本中被加以编码的新的所需动画行为。
所以,需要一种更有效率、更灵活、费用不太高的方法,用于在图形用户 界面显示中执行有趣的、可提供信息的、有意义的动画行为。
发明概述
举例来讲,以下所描述和声明的动画制作系统提供了一种框架,用于为图 形用户界面显示元素和非视觉参数值定义、创建和执行动画行为。当这些动画 行为被应用于元素时,它们使与该属性关联的该值在该动画行为活动的时间内 变化。
该动画制作系统被并入利用显示结构的系统,该显示结构用于维护与场景 (例如,计算机系统图形用户界面的显示窗口)内所显示的对象相对应的一组 元素。这些元素包括影响该元素的显示特征的可变属性值。这种可变属性的例 子包括位置、维数、颜色、不透明度等。
该动画制作系统也利用属性系统。该属性系统维护与由该显示结构所维护 的这些元素关联的属性。该属性系统支持动态属性——能够随时间的推移而 加以修改的属性。
该动画制作系统也包括一些动画类,这些动画类规定可以对基本值执行的 特定动画行为。从这些动画类中实例化动画对象。这类动画对象实例提供影响 被分配给这些动态属性的值的时变值。在正在根据关联的动画对象来驱动显示 (包括随时间的推移而变化的这些元素)的应用程序的指导下,创建这类动画 对象,并将其附属于由该属性系统维护的属性。
附图简述
所附权利要求书详细陈述了本发明的各种特点,但通过以下结合附图而进 行的详细说明,可以最佳程度地理解本发明的各种优点。在这些附图中:
图1是框图,描绘了用于执行本发明的实施例的示范计算机系统;
图2是示范的高级示意图,描绘了一种图形管理结构的主要组件,该图形 管理结构包括用于支持图形显示元素的动画制作的动画制作系统;
图3是流程图,概述了具体表现本发明的系统中所执行的示范的一连串重 复的步骤,以维护/呈现动画图形用户界面;
图4是示范的动画类定义,用于对规定的元素属性实行动画制作;
图5概述了用于为元素属性进行动画的一组示范的动画构造器类型;
图6概述了关于具体表现本发明的动画结构的示范动画收集类;以及,
图7概述了关于具体表现本发明的动画结构的示范的动态动画收集类。
附图的详细说明
所描述的图形用户界面结构包括动画系统、属性系统和显示元素组织结 构。这些组件联合支持图形用户界面显示元素的基于属性的动画,甚至支持非 显示值。这个所揭示的动画结构包括动画系统,该动画系统包括动画类、界面 和收集,它们促进创建和跟踪附属于各种图形显示(和非显示)元素(例如, 图标、对话框、滚动条等)的动画实例,以实现这些元素所需的动画行为。通 过更改这些显示元素的属性值,来实现为这些显示元素动画化。在本发明的实 施例中,由从动画类中被例示的并被附属于该属性的动画对象来驱动对属性值 的变化。
在本发明的实施例中,通过使动画收集与元素树内的特定元素上的呈现操 作相关联,来实现图形的动画制作。一旦最初绘制动画元素,该呈现系统就根 据动画行为并按时间间隔来更新该元素的显示状态,该动画行为由从规定的动 画类中被例示的动画对象的组件来加以定义。
在本发明的实施例中,在具有不同的刷新周期的图形显示系统中的多个层次 处指定动画制作。按相对较高的刷新率来更新某些容易计算的动画。按相对较低的 刷新率来更新其他更加复杂的动画(例如,影响其他图形显示对象的动画)。
当被视作整体时,这里所描述的该动画结构提供高度灵活的平台,用于执 行各种新的动画行为,并将这些新的行为附属于显示元素,以创建新的、非常 吸引人的动画显示界面。
作为例示,图1描绘了用于执行具体表现本发明的该动画结构的合适的操 作环境100的例子。操作环境100只是合适的操作环境的一个例子,它并不意 在对本发明的使用或功能性的范围提出任何限制。可能适用于本发明的众所周 知的计算机系统、环境和/或配置包括(但不局限于)个人计算机、服务器计 算机、膝上型/便携式计算设备、手持计算设备、多处理器系统、基于微处理 器的系统、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分 布式计算环境,以及类似物。
在正由计算机执行的计算机可执行指令(例如,程序模)所实行的一套 步骤和过程的一般上下文中描述本发明。通常,程序模块包括执行特殊任务或 实施特殊的抽象数据类型的例行程序、程序、对象、组件、数据结构等。虽然 参照在单一计算机系统上被局部执行的过程来描述该示范实施例,但是,本发 明潜在地被加入在分布式计算环境中进行操作的网络节点内,在这些分布式计 算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计 算环境中,程序模块通常位于包括记忆存储设备的本地计算机存储介质和远程 计算机存储介质中。
继续参照图1,用于执行本发明的示范系统包括采取计算机110的形式的 通用计算设备。计算机110的组件可以包括(但不局限于)处理单元120、系 统存储器130和系统总线121,系统总线121将包括该系统存储器的各种系统 组件耦合到处理单元120。系统总线121可以是几种类型的总线结构(包括存 储总线或存储控制器、外围总线和使用各种总线构造中的任何总线构造的局域 总线)中的任何总线结构。举例来讲(不作限制),这类构造包括“工业标准 结构”(ISA)总线、“微通道结构”(MCA)总线、“增强的ISA(EISA)” 总线、“视频电子标准协会”(VESA)局域总线和也被称作“中层楼(Mezzanine) 总线”的“外围组件互连”(PCI)总线。
计算机110通常包括各种计算机可读介质。计算机可读介质可以是可由计 算机110访问的任何可用介质,它包括易失和非易失介质、可移动和不可移动 的介质。举例来讲(不作限制),计算机可读介质可以包括计算机存储介质和 通信介质。计算机存储介质包括易失和非易失的可移动和不可移动介质,该介 质以用于信息(例如,计算机可读指令、数据结构、程序模块或其他数据)存 储的任何方法或技术来加以执行。计算机存储介质包括(但不局限于)RAM、 ROM、EEPROM、快闪存储器或其他存储技术、CD-ROM、数字通用光盘(DVD)或 其他光盘存储器、盒式磁带、磁带、磁盘存储器或其他磁性存储设备、或可以 被用来存储所需信息并可以由计算机110来存取的任何其他的介质。通信介质 通常具体表现计算机可读指令、数据结构、程序模块或调制数据信号(例如, 载波或其他传送机制)中的其他数据,它包括任何信息传递介质。术语“调制 数据信号”意味着一种信号,该信号的一个或多个特征按这样一种方式来加以 设置或更改,以便为该信号中的信息编码。举例来讲(不作限制),通信介质 包括有线介质(例如,有线网络或直线连接)和无线介质(例如,声音、RF、 红外线和其他无线介质)。以上任何内容的组合也应该被包括在计算机可读介 质的范围以内。
系统存储器130包括采取易失和/或非易失存储器(例如,只读存储器(ROM) 131和随机存取存储器(RAM)132)形式的计算机存储介质。基本输入/输出系 统133(BIOS)有时被存储在ROM 131中,该基本输入/输出系统包含有助于在 计算机110内的各个元件之间传送信息(例如,在启动期间)的这些基本例行 程序。RAM 132通常包含可立即由处理单元120进行存取并且/或者目前正由处 理单元120进行操作的数据和/或程序模块。举例来讲(不作限制),图1展示 了操作系统134、应用程序135、其他程序模块136和程序数据137。
计算机110也可以包括其他可移动/不可移动的易失/非易失计算机存储介 质。仅仅举例来讲,图1展示了从不可移动的非易失磁性介质读取或对其写入 的硬盘驱动器140、从可移动的非易失磁盘152读取或对其写入的磁盘驱动器 151,以及从可移动的非易失光盘156(例如,CD ROM或其他光学介质)读取 或对其写入的光盘驱动器155。该示范操作环境中可以使用的其他可移动/不可 移动的易失/非易失计算机存储介质包括(但不局限于)卡型盒式磁带机、快 闪存储卡、数字通用光盘、数字录像带、固态RAM、固态ROM和类似的存储介 质。硬盘驱动器141通常通过不可移动的存储接口(例如,接口140)而被连 接到系统总线121,磁盘驱动器151和光盘驱动器155通常由可移动的存储接 口(例如,接口150)连接到系统总线121。
以上所讨论的和图1中所展示的这些驱动器及其关联的计算机存储介质为 计算机110提供计算机可读指令、数据结构、程序模块和其他数据的存储。在 图1中,例如,硬盘驱动器141被展示为存储操作系统144、应用程序145、其 他程序模块146和程序数据147。注意,这些部分可以等同于或不同于操作系 统134、应用程序135、其他程序模块136和程序数据137。操作系统144、应 用程序145、其他程序模块146和程序数据147在这里被提供不同的号码,以 展示:它们至少是不同的副本。用户可以通过输入设备(例如,键盘162)和 指点设备161(通常被称作“鼠标”、“跟踪球”或“触摸垫”)来将命令和 信息输入计算机100。其他输入设备(未示出)可以包括话筒、操纵杆、游戏 垫、圆盘式卫星电视天线、扫描仪或类似的输入设备。这些和其他的输入设备 经常通过被耦合到该系统总线的用户输入接口160而被连接到处理单元120, 但也可以由其他接口和总线结构(例如,并行端口、游戏端口或通用串行总线 (USB))来加以连接。监视器191或其他类型的显示设备也可以经由接口(例 如,视频接口190)而被连接到系统总线121。除该监视器以外,计算机还可 以包括其他外围输出设备(例如,扬声器197和打印机196),这些外围输出 设备可以通过输出外围接口195来加以连接。
计算机110潜在地在使用与一台或多台远程计算机(例如,远程计算机180) 的逻辑连接的联网环境中进行操作。远程计算机180可能是个人计算机、服务 器、路由器、网络PC、对等设备或其他公共网络节点,它通常包括以上相对于 计算机110而描述的许多或全部的这些单元,尽管图1中只展示了记忆存储设 备181。图1中所描绘的这些逻辑连接包括局域网(LAN)171和广域网(WAN) 173,但也可以包括其他网络。这类联网环境在办公室、企业范围的计算机网 络、内联网和因特网中很普遍。
当被用于LAN联网环境中时,计算机110通过网络接口或适配器170而被 连接到LAN 171。当被用于WAN联网环境中时,计算机110通常包括调制解调 器172或用于在WAN 173(例如,因特网)上建立通信的其他装置。调制解调 器172(可能是内置的,也可能是外置的)可以经由用户输入接口160或其他 合适的机制而被连接到系统总线121。在联网环境中,相对于计算机110而描 绘的程序模块或其各个部分可以被存储在该远程存储器存储设备中。举例来讲 (不作限制),图1将远程应用程序185展示为驻留在存储器存储设备181上。 将会理解:所示的这些网络连接起示范的作用,可以使用在这些计算机之间建 立通信链路的其他装置。
图2是高层示意图,它识别具体表现本发明的一种图形显示结构的各个组 件,并且并入动画制作系统的一套交互作用的功能组件。图2中所描绘的该图 形显示结构被分成一套功能组件,以帮助描述本发明的示范实施例。本发明不 局限于采用说明性描绘的该方式的这些组件的布置。相反,这里所描述的这些 组件的功能性在本发明的选择性实施例中被加以不同地分组。
该动画制作系统包括许多子组件,这些子组件根据应用程序200所提出的 高层指令以组方式促进了图形显示对象(以及非视觉参数)的动画化。应用程 序200可以是驻留在该操作系统以内或以外的任何应用程序或控制器。这里所 描述的该动画基础结构在很大程度上允许委托概括通用化的动画制作组件来 为动画制作编程并执行动画制作。在本发明的实施例中,应用程序200将命令 提交给为一个或多个显示对象规定/定义动画的该动画制作系统,而不是计算 被更新的位图。
根据应用程序200的命令,该动画制作系统构建动画对象。一旦动画对象 被实例化,它们就可以与元素树202相关联。响应于应用程序200所生成的事 件,来创建元素树202。这类事件的例子包括应用程序200的开始或导致新视 图的创建的其他某个被执行的命令。其后,在元素树202中,该应用程序创建 新的元素,以后移去这些元素。
元素树202包括分层布置的一组元素。在本发明的实施例中,元素树202 在结构上定义了一个文档。每个元素描述一个对象,在大多数情况中,该对象 对应于可以显示在(例如)图形用户界面上的视觉图像。元素的例子包括:按 钮、表格、表格单元、列表控制、帧、图像和段落(流动面板)。元素树202 中的元素一般包括一个或多个属性(例如,颜色、高度、宽度、位置、透明度 等)。被分配给元素的这些属性的值有助于定义该元素的显示状态。在本发明 的实施例中,动画对象被分配给一个或多个元素/属性组合。其后,该动画对 象实例用于根据与这些动画对象实例中的每个动画对象实例相关联的时间线 索来呈现元素的属性上的动画行为。
“时间线索”
定时和时间线索驱动这里所描述的该动画制作系统。这里所描述的该动画 制作系统的定时方面父于该“同步多媒体集成语言”(SMIL 2.0)W3C规范。 一旦被创建并在执行以前,每个动画对象与时间线索(例如,时序定义)相关 联,该时间线索控制与该动画对象的定义行为关联的一连串变化的进程。另外, 以上所述的时间线索只定义动画行为(例如,该动画的持续时间、重复、加速 等)的局部/相对的时标序列。这样,直到已为该动画对象分配“父”(present) 时间线索(要么直接通过另一个对象,要么间接通过另一个对象),动画对象 才能够执行。所以,为了执行该动画对象,该相对的时间线索附属于“父”定 时定义(“父时间线索”),该“父”定时定义将该动画对象的相对定时定义 与父时间线索所定义的实际执行时间联系起来。这样,该父时间线索不会控制 动画对象的该动画行为。而是该父时间线索控制该外部行为(例如,当该动画 制作实际上开始时)。这些时间线索被保存在分层定时树形结构中,并且,单 独的时间线索具有相对于父时间线索来定义其行为的性质。相对于根部(例如, 文档、页、帧等)时间线索来定义项层时间线索。
有许多方法可以使父时间线索与动画对象相关联,该动画对象具有定义其 局部动画定时行为的其自己的内部时间线索。举例来讲,父时间线索是该动画 对象所附属的定时定义。在指定时间线索的一种示范模式中,请求创建动画对 象的实体(例如,应用程序)规定关于该动画对象的时间线索所附属的父时间 线索。在这种情况下,该动画对象的时间线索在创建时刻识别该父时间线索, 并且,这个被创建的动画对象是一个或多个元素/属性组合(该动画对象其后 与之关联)所使用的那个实际执行的动画对象(与副本相对)。
在指定关于动画对象的时间线索的另一种示范模式中,创建部分完全的动 画对象类,该类包括其自己的时间线索,但不包括父时间线索。这种不完全形 式的动画对象定义(缺乏父时间线索)在这里被称作“动画模板”。不执行这 些动画模板,而是创建动画模板的副本(或克隆),并且,为这些新的动画实 例中的每个动画实例分配这个新的动画所附属的元素的动画父时间线索。在这 类实例中,被克隆的动画对象的该父时间线索是由这个被克隆的动画对象所附 属的元素规定的那个父时间线索。若缺乏特殊的父时间线索定时定义,则允许 从单一动画模板中创建多个克隆,并且,每个“被克隆”的动画对象采用由它 所附属的该元素定义的元素指定动画执行(例如,开始、暂停等)定时。由于 本系统支持以后指定父时间线索,因此,为放置到元素树202上而被创建的动 画对象不要求在创建时刻明确地指定父时间线索,尽管要完成这类定时信息, 以允许执行该动画制作。
作为选择,应用程序200经由媒体集成层(MIL)界面206,将动画对象直 接传递到媒体集成层(MIL)204。举例来讲,Beda等人的、2002年6月27日 提交的标题为《多层图形处理系统和方法》的美国专利申请(序号为10/184795) 中描述了MIL 204,该专利申请的这些内容通过引用被特别包括于此,包括其 中所包含的任何引用的内容。在本发明的实施例中,从应用程序200那里直接 被传入MIL界面206的动画对象要求明确地指定父时间线索,或者,不执行该 动画对象。
MIL 204包括经由MIL界面206来存取的一套图形显示对象呈现和控制组 件。举例来讲,Beda等人的、2002年6月27日提交的标题为《关于场景图的 类属参数化》的美国专利申请(序号为10/184796)中描述了MIL界面206, 该专利申请的这些内容通过引用被特别包括于此,包括其中所包含的任何引用 的内容。MIL界面206是应用程序200或提出系统(presenter system)208 (以下所描述的)借以依靠来建立应用程序的显示帧的低层说明的界面。MIL 界面206包括一组方法调用:DrawLine(...)、PushTransform(...)和 PopTransform(...)。由MIL界面206提供服务的这些调用描述场景/文档/或图 形用户界面。
这里所提到的本发明提供了一种基础结构,用于定义关于图形对象的动画 以及随时间的推移而改变的任何参数值。这样,可以由各种图形呈现引擎(例 如,包括这里所概述的MIL 204)中的任何图形呈现引擎来执行这个实际的动 画。
元素树202所维护的这些元素代表高层图形项目(例如,按钮、滚动条等)。 在本发明的实施例中,不可以直接由MIL 204组件使用在高层描述的这类图形 对象。这样,提出系统208内的提出器(presenter)将元素树202(该提出器 与其关联)的组成部分编译/转变为构成元素树202的这些元素的视觉图象(例 如,线、填满的矩形等)。提出系统208经由MIL界面206,将这些视觉图象 传入MIL 204。有许多方法可执行提出系统208的功能性。Parikh等人的、2003 年5月9日提交(快递邮件EV 329734584美国)的标题为《用于主控图形布 局/展示对象的系统》的美国专利申请(序号为10/(还未被分配的序号))中 详细描述了提出系统208的示范实施例,该专利申请的这些内容通过引用被特 别包括于此,包括其中所包含的任何引用资料的内容。
在本发明的特定实施例中,MIL 204包括视觉高层视觉树210,视觉高层 视觉树210能够处理由提出系统208经由MIL界面206传入MIL 204的这些视 觉图象。视觉高层视觉树210包含一组结构化的图元(例如,线、矩形、图像 等)。这组结构化的图元描述关于应用程序的单个图像帧。视觉高层视觉树210 支持被称作“独立动画”的一种类的动画。以下将进一步加以描述的这些独立 动画不依靠提出系统208布局功能来实现动画制作。
视觉低层视觉树212潜在地是视觉高层视觉树210的平直版本。视觉低层 视觉树212被配置成迅速呈现并执行经由视觉高层视觉树210而被传递到视觉 低层视觉树212的独立动画。视觉低层视觉树212潜在地在对其结构形式(例 如,视觉高层视觉树210)的各项更新之间执行多个帧。
视觉低层视觉树212被配置成与输出驱动器接口。远程机器网络通信驱动 器214是与应用程序200在那里呈现输出的机器相对应的对象。该机器潜在地 不同于应用程序200在其上执行的机器。在这种情况下,应用程序200在网络 连接上传达其视觉输出,以便为应用程序200的用户在远程机器上显示输出。
作为选择,视觉低层视觉树212向图形显示驱动器216呈现输出。图形显 示驱动器216表现该帧显示数据与本地机器上的硬件的通信,该本地机器负责 为本地用户将该帧引到当前正在运行应用程序200的机器的输出显示设备(例 如,视觉显示屏幕)。
当正在进行动画时,呈现队列项目213确保动画之间互相同步。每次需要 呈现新的帧时——例如,当更改元素树202时或当动画对象使值变化时,创 建呈现队列项目213。呈现队列项目213一得到完全的处理,就会消逝。在执 行其同步任务的过程中,呈现队列项目213组织以下过程:为(以上所描述的) 定时树228做标记,因而使依赖的动画属性无效;调用提出系统208,以便将 布局最后定下来,并且在该标记程序完成之后更新视觉高层视觉树210;以及, 在提出系统208将该布局最后定下来之后,请求视觉树210编译这些变化并将 其向下传播到视觉低层视觉树212。以下参照图3来描述执行呈现队列项目213 的各种功能的过程中的各个步骤。
已描述了根据所提供的动画值来维护并生成一个帧的数据的某些示范功 能框,现在来注意元素树202内的动画属性的这些来源及其时间驱动的变化。 属性系统220负责维护关于属性的值。属性系统220存储并计算元素上的值, 以便提出系统208可以使用它们来创建视觉高层视觉树210。属性系统220支 持关于属性值的遗传模型——其中,关于特定属性的元素的值由该元素的子 元素(children)集来继承。
如图2中作为例证所描绘的,属性系统220从许多来源接收输入值。应用 程序200设置由属性系统220维护的、关于动态属性的基本值(并且也检索其 当前值)。元素树202向属性系统220请求值(关于元素树202内的元素属性), 以提供给提出系统208。提出系统208依次又使用这些属性值来生成输入,用 于对MIL界面206的调用。在处理元素树202的这些元素的过程期间,提出系 统208向属性系统220请求动态属性基本值以及与这些元素关联的其他信息, 以便组织值,并将其分配给构成与提出系统208关联的特定视图的这些元素。
属性系统220为来自这些不同来源的值区分优先次序。例如,属性系统220 允许在本地规定的属性值优先于属性页中所规定的值或从父继承的值。属性系 统220包括逻辑,以便为各种来源所提供的值分类,并将最高优先值返回给该 值的任何接收者。属性系统220在计算关于属性的当前值时,考虑附属于该属 性的任何活动动画。如果用户向特定来源请求值,那么,属性系统220处理这 类请求。
从动画类222中实例化对由属性系统220所维护的属性值作出更改的动画 对象,动画类222定义并执行根据与这些动画对象实例(或其父)关联的时间 线索来修改属性值的方法。动画类对象实例由应用程序200来创建。应用程序 200也在从动画类222中被实例化的这些动画对象上设置值。应用程序200也 能够请求特定动画类对象上的当前值。当不存在关于动画类对象的引用时,移 去该动画类对象。动画类222每个都具有描述特定动画行为的、能指定的属性 (例如,“From”、“To”和“Duration”)。
键入动画类,以便存在关于不同的动画行为及其对应的数据类型的不同 类。动画类的例子包括:
FloatAnimation——提供浮点值,
BoxUnitAnimation——提供关于提出框的维数,
PointAnimation——提供矩形的左上部的位置,
ColorAnimation——提供时变彩色值;以及,
BoolAnimation——提供布尔值。
动画类220的实例是不可改变的。这样,一旦创建它们,它们的属性值就 永远无法改变。这意味着:应用程序书写者可以在多个地方再使用动画实例, 而无须关心其定义的行为将会改变。
动画收集类224组织动画类222。动画收集类由应用程序200来创建。应 用程序200规定动画收集类内所包含的一个或多个动画类222。然后,应用程 序200将动画收集类设置为将为属性系统220中的动态属性制作动画的该动画 收集。应用程序200也可以使动画收集类实例与任何动态属性相关联,该任何 动态属性与元素树202中的任何特定元素关联。应用程序200能够列举动画收 集类224的特定动画收集类中的这些包含的动画类,并且能够向该动画收集类 请求组成的动画值。动画收集类实例是当不存在关于这个特定动画收集类实例 的引用时所收集的无用信息。
动画收集是处理同一种数据类型的动画对象收集。动画收集类知道其列表 中的这些动画类的相对属性以及如何根据被传入该动画收集类实例的基本值 来共同组成这些动画类,并且,该动画类返回当前值。在本发明的实施例中, 动画类在动画收集类中被栓连在一起。该动画收集的输入接收基本属性值。第 一个阶段(动画对象)将相同类型的修改过的属性值呈现为到下一个潜在阶段 的输入(在动画收集类对象内的多个动画对象的情况中)。该动画收集的这些 流线动画对象所执行的该基本值的流水线处理呈现关于该动画属性的当前 值。这种流水线处理的结果是:创建被串联执行的合成动画功能。
存在用于每种类型的属性值(为其支持动画制作)的动画收集类(例如, FloatAnimationCollection、BoxUnitAnimationCollection、 PointAnimationCollection、ColorAnimationCollection和 BoolAnimationCollection)。这个动画收集类类型列表只是起示范的作用。 精通该技术领域的人将会容易理解不同动画收集类类型的潜在的宽度。至于动 画类220,来自动画收集类224的动画收集类的实例是不可改变的。
动态动画收集类226建立于动画收集类224的功能性上。动态动画收集类 226的一个实例保持对动画收集类224的动画收集类一个实例的引用。此外, 动态动画收集对象的一个实例保持对元素树202内的元素以及对该动态动画收 集实例正在为其制作动画的该元素上的属性的一个引用。在本发明的实施例 中,应用程序书写者无法创建或存取动态动画收集实例。而是一当从应用程序 220那里接收到请求,属性系统220就创建动态动画收集实例。
当动画收集类实例与动态属性关联时,动态动画收集对象实例由属性系统 220来创建。该动态属性保持并/或计算与关于元素树202中的元素的单一定义 属性(例如,宽度、高度、顶部、左边或任何种类的元素的任何其他的定义属 性)有关联的值。该动态动画收集也保存从动画收集类224的动画类中被实例 化的动画收集,并且因而使该动画收集类与元素树202中的特定元素/属性组 合相关联。如果向属性系统220要求动态属性的当前值,则属性系统220确定 该动态属性是否具有从动态动画收集类226中被实例化的关联的动态动画收集 对象,并且,属性系统220通过该动态动画收集中的任何当前活动的动画类来 处理该基本值,以提供当前动画值。在本发明的实施例中,当属性系统220请 求关于当前值的特定动态动画收集对象时,这个规定的动态动画收集将该请求 传给从动画收集类224之一中被实例化的合适的动画收集对象。该动画收集对 象又循环通过从动画类222中被实例化的其动画对象集,以呈现它们的当前值, 从而提供关于该动画收集对象向其调用动态动画收集呈现最终值的基础。
应用程序200所创建的一些动画可能不规定父时间线索,并且期望该动画 制作系统为所请求的动画选择这个合适的父时间线索。在该关联过程期间,属 性系统220最初确定该动画收集类内的每个动画类是否具有父时间线索。如果 任何动画类都不与父时间线索关联,那么,创建与显示元素(与该动态动画收 集关联)的父时间线索关联的新的动画类。另外,注意,如果改变与显示元素 关联的该父时间线索,那么,再建该动态动画收集,以反映该父时间线索中的 这个变化。
为了正确地发挥作用,动画收集类内的所有动画类最后都必须规定控制其 执行定时的父时间线索。如果这个规定的动画收集类中的所有这些动画类都与 父时间线索关联,那么,该动态动画收集使用这个规定的动画收集类。否则, 鉴于动画类和动画收集类的不变性,属性系统220创建新的动画收集类,并且, 这个新的动画收集类包括新的动画类——每个具有被分配的父时间线索。一 旦属性系统220已创建这个新的动画收集类(其每个动画对象具有父时间线 索),属性系统220就为与该元素/动态属性对关联的该动态动画收集提供该 动画收集类。如果还没有与这个对关联的动态动画收集,则该属性系统将创建 新的动态动画收集226。
如以上多次指出,定时驱动与动画对象关联的这些动画行为,这些动画对 象附属于元素树202中的元素的属性。如这里所使用的,时间线索是根据一组 定时性质来维护运行时间状态的定时实体的实例。在本发明的实施例中,定时 树228是包含按分层方式来布置的定时节点(时间线索)的数据结构。定时节 点之间的关系由遗传规则并由与定时树228中的定时节点相对应的每个时间线 索的这些节点特定定时性质来加以定义。这些遗传规则包括:定义与父开始时 间有关的子段开始时间(children begin times)的偏移量。另外,这些遗传 关系规定控制关系。例如,如果重新开始、重复、暂停、恢复、查找或结束父, 则所有这些子段(及其子段等)都这样做。这类关系允许通过在单一父时间线 索上的动作来起动一整组子时间线索。定时树228保持:(1)潜在地驱动对 动画类实例的值的变化的时间线索,以及(2)包含其他时间线索的容器时间 线索。使用从这些时间线索中导出的进展值来计算任何给定的动画对象的当前 值。在应用程序200的启动时刻创建定时树228。
定时树228为图2中所描绘的该动画基础结构实行定时事件通知任务。最 初,当实例化动态动画收集时,该动态动画收集向定时树228发出请求,以便 只要其动画收集类对象中的动画实例已有进展,就发出通知。当该动态动画收 集从定时树228那里接收到通知“其动画之一已有进展”时,该动态动画收集 实例通知属性系统220:该显示元素(与它关联)上的该动态属性现在无效。 显示元素属性的无效依次又开始在这里被称作“从属动画”的过程。在从属动 画处理期间,要求提出系统208根据与该动画制作关联的该值变化来建立视觉 高层视觉树210。
定时树228也为动画类222的实例执行进展测量和报告任务。响应于无效, 要求动画类222的实例报告其当前值。动画类222向定时树228询问与每个动 画类关联的时间线索进展值。其后,动画类222根据该定时树所提供的进展值 来计算其当前值,并将这些当前值提供给任何请求实体。
呈现队列项目213也与定时树228相互作用。该呈现队列项目是该操作系 统队列中的队列项目,当被执行时,该操作系统队列使应用程序200所生成的 该应用程序/页/场景被向下编译到视觉低层视觉树212,并且最后被呈现到该 显示设备上。一旦被调用,该呈现队列项目所执行的第一件事是为定时树228 “做标记”。这具有“让该定时树将其时间线索更新为该当前时间”的效果。 结果,定时树228发出可能会引起属性系统220中的许多无效的通知。当执行 该标记时,也更新独立动画的进展值。如果在呈现队列项目213的处理期间修 改定时树228,该呈现队列项目将同时循环和“再标记”,直到定时树228稳 定为止。
独立/从属动画
以上提到了独立动画和从属动画。在本发明的实施例中,图2中所描绘的 该动画制作系统至少支持这两种类型的动画实例——其分类基于它们与其他 动画实例的关系。独立动画实例不影响视图的布局,因此可以按更高的速率来 加以刷新。独立动画的例子是彩色动画。对象的颜色不修改其宽度或高度,所 以,该颜色变化动画不影响如何在该页上布置该颜色变化动画元素(例如,尺 寸或位置)。
从属动画一般更改与这些从属动画关联的元素的布局,所以,从属动画要 求再计算图形用户界面布局。这些从属动画实例被存储在元素树202结构内, 以确保所有受到影响的显示元素属性的正确处理。由于潜在的相当多的计算和 存储器存取要求,MIL 204按潜在较低的刷新率来计算从属动画。
关于“动画”类的三个层次/阶段
在本发明的实施例中,通过三个层次的类及其对应的实例来执行被应用于 显示元素属性的该动画行为。继续参照图2,动画类222包括定义对象的一组 对象类,它们能够计算属性值上的特定的、被定义的动画操作(通常是单一动 画行为)。
在下一个层次处,动画收集类224定义一组对象,这组对象将来自动画类 222的一个或多个单独的动画类分组/分配到单一动画类定义中,从而支持单一 元素属性上的合成动画行为的创建。
在下一个层次处,动态动画收集226定义对象类型,以实行/执行元素树 202内的元素的属性上的动画行为(由动画收集类224之一来定义)。这种功 能性得到动态动画收集226的实例的促进,动态动画收集226保持:对动画收 集类224的动画收集类实例的一个引用;以及,对元素树202内的元素的引用, 以及对该动态动画收集实例正在为其制作动画的该元素上的属性的引用。当动 画收集类实例与动态属性关联时,动态动画收集由属性系统220来创建。该动 态属性保存并/或计算与关于元素树202中的元素的单一定义属性(例如,宽 度、高度、顶部、左边或任何种类的元素的任何其他的定义属性)关联的值。 该动态动画收集也保持对从动画收集类224之一中被例示的动画收集类对象的 引用,并因此使该动画收集类对象与元素树202中的特定元素/属性组合相关 联。
参考图3,为图2中的呈现队列项目213所执行的示范呈现序列概述一套 步骤。如以上所解释的,当被执行时,呈现队列项目213使应用程序200所生 成的该应用程序/页/场景被向下编译到视觉低层视觉树212,供显示设备来呈 现。注意,这一连串步骤起示范的作用,并且,该呈现队列项目操作在本发明 的其他实施例中被加以修改。
最初,在步骤300期间,呈现队列项目213引起定时树228的标记。为定 时树228做标记具有这个效果:让定时树228将其时间线索更新为该当前时间。 结果,定时树228发出可能会在属性系统220中引起许多无效(例如,使从属 动画属性无效)的通知。在本发明的实施例中,已受到该更新时间影响的动画 对象提出Changed事件。这些事件由动画对象的关联的“动态动画收集”对象 实例来收集和处理。该“动态动画收集”对象又使元素上的其动态属性无效。 当在步骤300中执行该标记时,也更新独立动画的进展值。
在为定时树228做标记之后,在步骤310期间,由呈现队列项目213来执 行布局过程。在布局过程310期间,自从最后一次执行呈现队列项目以后,根 据对元素树202的任何更改来更新视觉高层视觉树210。在本发明的实施例中, 负责在视图中布置已改变属性值(作为该时间的标记的结果)的图形元素的提 出器成为无效——这意味着:它们必须再计算其布局,并创建将这些变化并 入这些受到影响的动态属性的新的视觉高层视觉树。也在步骤310期间,该显 示系统从潜在地影响该布局的应用程序、该操作系统外壳程序等接收和分派请 求。这类请求的例子包括命中测试、对用户程序的回收,以及影响该图形显示 的一般应用动作。
在布局过程310期间,定时树228结构可以潜在地改变(例如,增加新的 定时节点、移去现存的节点、建立对现存的定时节点的新参考等)。如果在步 骤320中确定该定时树结构已改变,那么,控制传回到步骤300,并且在采取 其新形式的定时树228上再执行该定时标记。
如果定时树228在结构上还没有改变,那么,控制从步骤320传递到“呈 现”步骤330——其中,视觉高层视觉树210将新的/更新的图形显示数据编 译和传播到视觉低层视觉树212。根据这些所接收的变化,视觉低层视觉树212 向驱动器262和/或264呈现被再计算的输出。
其后,在步骤340期间,询问与该动态动画收集关联的这些时间线索,以 便下一次确定:需要为它做标记(最接近的事件)。如果不需要进一步的标记, 那么,控制传递到“结束”360。如果需要该树的额外标记,那么,控制传递 到步骤350——其中,为这个动画元素属性的动态动画收集实例创建呈现队列 项目213的新实例。这个新的呈现队列项目规定其应该被执行的时间。如果这 个规定的执行时间是还没有被达到的某个时间,那么,该呈现队列项目最初被 放置在不活动列表中。当达到该时间时,该呈现队列项目被放置在活动队列内, 用于根据图3中所陈述的这些步骤来执行。在创建这个新的呈现队列项目之后, 控制传递到“结束”360。
关于元素属性的动画行为由从动画类222中被例示的一个或多个动画对象 来实行。每个动画对象包括动画功能,该动画功能采取第一组输入(至少包括 当前时间线索值),并产生适合用于呈现动画显示元素的一种类型的输出。动 画类222中的各种动画类(例如,PointAnimation)将时间线索进展值转换成 关于元素属性的合适的数据类型(例如,点)。
参考图4,概述示范的高级动画类结构。这各种动画类遵循共同的式样, 并执行一组类似的界面。这些差异主要出现在这些属性的数据类型中,并出现 在一些计算中,这些计算被加以执行(鉴于诸如浮点、布尔值、点等该特定数 据类型),以便鉴于所计算的进展值来将当前值分配给输入值。鉴于这里所包 含的动画类的功能性的这些例子和说明,这类修改正好在精通该技术领域的人 的技能范围以内。
在本发明的实施例中,该动画类结构包括一组“动画属性”400。From属 性指定开始动画值。To属性规定结束动画值。By属性规定动画制作结束时的 变化(δ)值。该By属性规定结束动画值与初始动画值之间的差异,而不是在 该To属性中规定明确的最终值。
动画类可以包括利用每个段内的不同的定时参数的多个段。KeyValues属 性规定关于动画的值的列表。插入法属性规定用于在该KeyValues属性中所规 定的两个关键字值之间进行插入的方法。插入法的例子包括:离散、线性、步 距和样条。KeyTimes属性指定被用来控制该动画的步距的时间值列表。该列表 包含与该KeyValues列表相同的元素数量。以增加的时间值对列表排序,并且, 该列表中的第一个值是0,最后一个值是1(除非InterpolationMethod被设 置为“离散”,在这种情况下,这最后的值可能小于或等于1)。KeySplines 属性规定与KeyTimes列表关联的一组贝齐尔曲线控制点。这些贝齐尔曲线控 制点定义控制该动画的间隔步距的立方函数。该列表包含比该KeyTimes列表 少一个的元素。如果该InterpolationMethod性质被设置为“样条”,则只使 用该列表。
动画类结构内的这些动画属性包括某些布尔性质。如果该动画对象的时间 线索是活动的或在填充时期内,则将IsOverridingBaseValue属性设置为“真”。 另外,IsAccumulating属性允许重复的动画序列对元素的属性产生累积的影 响。当将该IsAccumulating属性设置为“真”时,而不是在重复的动画序列 的每个迭代上重复相同的轨迹,动画累积每个迭代的效果,本质上是利用自身 来组成并建立于对元素的属性的先前的动画诱发的变化。
如果对于(以下联合一套方法420所描述的)该动画对象的GetValue的 返回值取决于该基本值(被提供给该动画对象),则UsesBaseValue属性返回 “真”。如果该UsesBaseValue属性返回“假”,那么,该动画对象完全忽略 该基本值。如果该动画对象在列表中,则该UsesBaseValue属性允许优化,其 中在一些情况下,只需要评估这些动画对象的子集。
该动画类结构也包括一组定时属性410。CurrentTime属性提供关于该动 画对象的、该时间线索本地的当前时间。ParentTimeline属性指定时间线索, 该时间线索是该动画对象的时间线索的定时父。该ParentTimeLine属性可以 参考任何其他的时间线索,或者可以参考两个特殊引用值之一: Timeline.VisualParent或Timeline.RootTimeline。如果该ParentTimeline 属性被设置为Timeline.VisualParent,那么,该时间线索在使用方面自动成 为与它被用于其中的该视觉图象关联的那个时间线索的父。如果该视觉图象没 有关联的DefaultTimeline,那么,用递归方式检查该父视觉图象。如果该 ParentTimeline属性被设置为Timeline.RootTimeline,那么,这个时间线索 在使用方面自动成为定时树228的该“根”的父。
这个定时属性集也包括Begin属性,该属性用于指定关于该特定动画对象 的时间线索应该开始的时间。默认的情况是:该开始时间值是相对于父时间线 索的开始时间,但也潜在地规定偏移量,从而提供相对于其他某个时间线索的 开始时间或结束时间的时间。在后一种情况下,这另一个时间线索必须成为与 关于这个特定动画对象的时间线索相同的时间线索的父。动画对象上的 Duration属性指定从始到终单个周期的持续时间。Progress属性指定该时间 线索的当前进展值。如果(以下所描述的)IsOverridingBaseValue是假的, 那么,该Progress属性返回0。在所有情况中,该Progress属性的这个返回 值始终是包括0与1之间的值。
在本发明的实施例中,支持对动画的重复。RepeatCount属性规定在这个 动画对象的使用期限期间应该重复从始至终的周期的次数。该RepeatCount属 性值潜在地是分数值。特殊值float.PositiveInfinity指出:该时间线索应 该连续重复。如果它重复的话,则CurrentRepeat属性规定该时间线索的当前 迭代。第一个迭代是迭代1。如果该IsOverridingBaseValue动画属性是假的, 则该CurrentRepeat属性返回0。
RepeatDuration属性规定应该在其内重复从始至终的周期的时间长度。这 会潜在地导致分数执行(重复计数)。Time.Indefinite的该RepeatDuration 属性值指出:该时间线索应该永远重复。如果该IsOverridingBaseValue属性 是假的,则这个属性返回Time.Unspecified。如果为该RepeatCount属性和该 RepeatDuration属性规定值,那么,该总活动持续时间是这两个被规定的属性 的最小值。
关于这些动画类的这些定时属性还包括指定0与1之间的一个值的加速属 性,该值表示该时间加速阶段中所花费的该简单持续时间的分数。减速属性指 定0与1之间的一个值,表示在该时间减速阶段中所花费的该简单持续时间的 分数。由于该动画无法同时加速和减速,因此,该加速属性值和减速属性值的 和不超过1(该简单持续时间)。
Autoreverse属性指定:该动画是否将从始至终地进展,然后返回。如果 该Autoreverse属性具有“真”的值,那么,该时间线索从始至终地进展,然 后立即从终至始地向后进展。该时间线索维持活动的时间将是该动画对象的该 Duration属性所规定的时间数量的两倍。
End属性所维持的值为关于该动画对象的时间线索规定最长的结束时间。 如果该End属性值小于该Begin属性值和Duration属性值的和,那么,该激 活时期缩减该End属性值。此外,忽略越过该End性质所规定的时间的所有规 定的动画开端(按计划的或交互式的)。
EndSync属性值定义时间线索的隐含的持续时间。如果没有明确设置该 Duration属性,则使用该EndSync属性所规定的该隐含的持续时间。时间线索 的该隐含的持续时间可以由它控制的该计时对象来定义,或者由可能成为它的 父的其他时间线索来定义。
在该结束时间过去之后,Fill属性规定该动画对象的这个时间线索的行 为。默认的情况是:该时间线索只是从始至终维护“运行”,但如果该Fill 属性被设置为“冻结”,那么,该时间线索在越过该结束时间后仍然维护运行。 在那种情况下,该结束时间之后的该动画对象的该进展值等于它在该结束时间 的无论什么值。关于该Fill属性值的设置是“移去”(该全局默认值)、“冻 结”和“维护”。FillDefault属性指定关于该Fill属性的默认值。如果没有 规定该Fill属性值,那么,该DefaultFill属性的这个值规定该填充行为。 此外,这个默认值由成为这个时间线索的父的时间线索来继承,除非它们具有 其自己的FillDefault性质集。关于该DefaultFill属性的这些可能的值等同 于关于该Fill性质的值。
当达到第二个(或以后的)开始时间时,Restart属性指定该动画对象的 时间线索的行为。默认的情况是:开始时间中断任何活动时期,并回到关于该 时间线索的时间t=0。但是,如果该Restart属性被设置为WhenNotActive, 那么,忽略将会中断活动时期的开始时间。关于该Restart属性的这些可能的 值是:Always、WhenNotActive和Never。Restart Default属性为该Resart 属性指定默认值。
Speed属性指定关于该动画对象的该时间线索(与其父时间线索相比较) 的、时间应该经过的相对速度。例如,1的值意味着正常速度,而2的值则意 味着时间以两倍快的速度流逝(所以,该察觉到的持续时间结束只是该 Duration性质所规定的持续时间的一半)。这个值可能是负数,在这种情况下, 时间在这个时间线索中从结束时间到开始时间向后流逝,好象该父时间线索被 颠倒。
一组布尔属性被包括在内,以识别该动画对象的动画的状态。 IsForwardProgressing属性识别这个时间线索中的进展是否根据墙钟(wall- clock)时间而从0移到1。该IsForwardProgressing属性考虑被嵌套在潜在 颠倒的时间线索中的效果。如果IsOverridingBaseValue是假的,那么, IsForwardProgressing所返回的值等同于这个时间线索的父时间线索将会返 回的值。从该时间线索自己的本地引用帧中可见,IsReversed属性识别该时间 线索是否在颠倒周期内。与该IsForwardProgressing属性对比,这个属性不 考虑被嵌套在潜在颠倒的时间线索中的效果。如果该IsOverridingBaseValue 属性值是假的,那么,该Is Reversed属性返回假。
其他属性涉及该动画的活动状态的状态。IsChanging属性识别该动画对象 的这个时间线索是否是活动的。相比之下,如果该时间线索是活动的,则 IsPaused属性返回真,但该动画被暂停。
该动画类也包括一套方法420。特定动画类内的一套构造器方法创建动画 对象,这些动画对象并入特殊动画类类型(例如,浮动、布尔值、点等)的特 定动画行为。举例来讲,在以下所描述的图5中,识别与特定动画行为相对应 的一套动画构造器方法类型。
BeginIn方法将偏移时间值作为输入来加以接收。该BeginIn方法将来或 过去及时地在对应于该偏移值的某个点处触发交互式开始。该输入偏移参数规 定关于该动画对象的父时间线索的引用中的时间。如果该父时间线索不是活动 的,则这个方法没有效果。
同样,EndIn方法将另一个相对时值作为输入来加以接收。该EndIn方法 将来或过去及时地在这个规定的点处触发交互式结束。该参数在该动画对象的 父时间线索的该引用帧中。如果该父时间线索不是活动的,则这个方法没有效 果。
在该动画对象维持活动的同时,提供各种方法,以停止/开始该动画对象 的进展。暂停方法暂停该动画对象的时间线索以及引用该动画对象的时间线索 的子段。如果这个时间线索不是活动的,则这个方法没有效果。相反,恢复方 法重新开始该动画对象的时间线索及其所有的子时间线索。如果这个时间线索 不是活动的并且被暂停,则这个方法没有效果。
查找方法允许根据规定的偏移值而直接移到动画执行序列中的特定点。该 查找方法改变潜在地影响其所有子时间线索的、关于这个时间线索的该当前时 间。如果该时间线索不是活动的,则这个方法没有效果。
GetUniqueInstance方法将时间线索作为输入来加以接收,并且返回可以 与其他实例分开地维护其自己的运行时间状态的动画对象的实例。如果该动画 对象包含自动父化的时间线索,则这个被返回的实例具有成为作为参数而被传 入的该时间线索的父的那些时间线索。
GetValue方法将某种类型的基本值作为输入,并且返回与该输入基本值相 同的类型的另一个值。该输出的这个值既取决于该输入(基本值),又取决于 它被传递到那里的该修正器(例如,动画对象/收集)的内部状态。特别是, 这意味着:利用相同的输入来调用GetValue一次以上并不被保证可返回相同 的输出,实际上,它预期在动画序列的过程期间改变。在动画对象类222的情 况中,该GetValue方法接收被传递的基本值,并且根据进展值的其内部修正 器定义计算来返回值。
最后,该动画类结构支持一组事件。只要该动画对象的内部状态改变,就 会出现Changed事件430。使用Changed事件430标记符来指出:需要再呈现 (在位置或维数方面已改变了一些东西)。当对象进入其内部状态正在不断变 化的周期时,出现Begun事件信号。只要该对象离开其内部状态正在不断变化 的周期,就会出现Ended事件信号。只要该动画对象的时间线索重复其简单的 持续时间,就会出现Repeated事件。只要该时间方向在该动画对象的时间线 索上变化,就会出现Reversed事件。响应于完成该动画对象的时间线索上的 对应的“暂停”、“恢复”和“查找”方法,会出现Paused、Resumed和Seeked 这些事件。
参考图5,一组动画对象行为被加以识别。这些被识别的行为中的每个行 为对应于特定的构造器类,在适当的时候,该特定的构造器类得到以上先前所 列出的这些动画类类型中的每种类型的支持。From构造器类型500创建动画对 象,该动画对象将被传递的“From”值作为其初始值,并且进展到该关联的属 性上所规定的基本值。To构造器类型510创建动画对象,该动画对象将该关联 的属性上所规定的并且被改进为所传递的“To”值的该基本值作为其初始值。 From-To构造器类型520接收指定关于该动画对象的该From属性值和To属性 值的被传递的参数——在该动画制作期间不使用该动画元素的属性上的该基 本值。但是,当该动画序列结束时,除非该动画对象上的Fill定时属性是“冻 结”,否则,该元素属性回复到该基本值。
可以通过终点和变化(δ)值的数量来规定动画值范围,而不是为动画规 定终点。By构造器530接收δ值,在基本值处开始动画,并且继续在该动画周 期过程期间对该基本值进行该δ值所规定的该数量的改变。Form-by构造器540 将开始“From”值作为其输入来加以接收,并且继续在该动画周期期间对该初 始“From”值进行所传递的δ值的改变。已描述了关于动画对象的构造器的基 本集合,注意:本发明计划了众多的各种动画行为(和对应的构造器)——包 括这些前述行为的合成物/组合。
已描述了示范的动画类结构,现在来注意这些动画对象的容器——动画 收集类224。参考图6,描绘了关于动画收集类的示范结构。动画收集对象维 持从动画类224中被实例化的动画对象列表。首先求助于这些动画收集类所支 持的一套方法600,GetUniqueInstance方法返回具有与所传递的时间线索标 识相对应的默认父时间线索的动画收集实例。该动画收集类也支持用于设置动 画收集类上的DefaultParentTimeline属性的界面。在本发明的示范实施例中, 属性系统220调用该GetUniqueInstance方法来获得关于动态动画收集对象的 特定动画收集的副本。该动画收集对象包含动画对象列表。构造器功能/实体 将动画对象加入这个所创建的动画收集实例。通过规定该列表内的特定位置 (如同在阵列中),来定位并参考/存取该动画收集内的这些动画对象。
GetValue方法将某种类型的基本值作为输入,并且返回与该输入基本值相 同的类型的另一个值。该输出的这个值既取决于该输入(基本值),又取决于 它被传递到那里的该修正器(例如,动画对象/收集)的内部状态。特别是, 这意味着:利用相同的输入来调用GetValue一次以上并不被保证可返回相同 的输出,并且,实际上,它预期在动画序列过程期间改变。在该动画收集类的 情况中,该GetValue方法将所传递的基本值提供给其收集中的第一个动画对 象。这第一个动画对象的输出成为到该动画收集中的下一个动画对象(如果存 在的话)的该输入基本值。这个过程进行重复,直到该动画收集中的最后一个 动画对象已计算输出为止。该GetValue方法返回该动画收集内的该动画对象 流水线内的最后一个动画对象所提供的该输出值。
该动画收集类也包括一组属性610。IsChanging属性和 IsOverridingBaseValue属性类似于动画对象上的这些被对应地加以命名的属 性。但是,在动画收集类的情况中,这些属性被加以合并,以便如果该动画对 象的对应属性中的任何一个属性返回“真”,则该动画收集上的该对应属性返 回“真”。该动画(阵列)属性维护该动画收集内的这些动画对象的列表。
该动画收集也支持一组事件620。这些Changed事件结合并报告从该动画 收集的这些组成的动画对象中被激发的、以上所描述的这些对应的事件。
现在参考图7,为动态动画收集类226识别一套方法和属性。方法集700 包括动态动画收集构造器方法。该动态动画收集构造器方法将元素引用(在元 素树202上)、该元素上的动态属性和动画收集实例作为输入来加以接收,该 构造器返回动态动画收集对象,该动态动画收集对象作为对这个所传递的动画 收集对象内的动画对象进行的这些时间线索诱导变化与元素树202中所包含的 该元素上的该动态属性之间的界面而工作。
该动态动画收集对象上的界面支持设置/获得与该动态动画收集对象关联 的该动画收集对象。如果该动态动画收集对象所属的该元素被重新定位在元素 树202中,或者改变关于该元素的定时,那么,SetDefaultParentTimeline方 法修改时间线索连接。
GetValue方法返回关于该元素的动画属性的该当前值(由该动态动画收集 所属的该动画收集来提供)。
当该动画收集内的任何动画对象的进展已改变时,调用OnChanged方法。 当被调用时,该OnChanged方法引起该动态属性的无效。这又调用了受到影响 的元素的再呈现。
参考属性710,OriginalDynamicProperty属性将参考返回给与该动态动 画收集关联的该动态属性。Element属性返回与该动态动画收集关联的该元素。 该IsOveridingBaseValue将基于调用的值返回给与它关联的该动画收集上的 这个被对应地加以命名的属性。
已描述了动画结构,通过为元素上的属性提供时变值,可以使用所描述的 该结构来为它们制作动画,这一点通过举例来加以描述。一般而言,每个动画 资源、方法或对象包括一个界面,该界面允许通知该实体的动画制作能力、其 默认父时间线索、它是否已改变、该对象的当前值,以及该实体是否正在变化。 特殊举例来讲,可制作动画的实体的该界面包括DoesChange属性,如果该对 象可能随时间而改变,则该属性返回“真”。一般而言,如果该对象正在保持 任何动画收集,则该DoesChange属性是真的。DefaultParentTimeline属性将 引用返回给时间线索,该时间线索是任何自动父化的时间线索的父。如果设置 该DefaultParentTimeline属性,那么,任何自动父化的时间线索重新成为父, 但不为这些时间线索或这个可制作动画的对象创建新的克隆。如果可制作动画 的对象中的这些动画正在变化,则IsChanging属性返回“真”。如果这个可 制作动画的对象的任何时间线索是活动的或在填充时期内,则 IsOverridingBaseValue属性返回“真”。只要这个可制作动画的实体的值改 变,就会出现Changed事件。
此外,这个可制作动画的实体包括CurrentValue方法,该方法返回被用 作该属性的这个值的对象。这个值是该对象的瞬时值,但它一旦被设置,就不 会改变。规定特定时间线索的GetUniqueInstance方法返回可以被用作属性的 这个值的对象。如果该对象提到任何自动父化的时间线索,则被返回的该实例 具有成为这个规定的默认父时间线索的父的那些时间线索。
可制作动画的实体也为每个可制作动画的属性规定对动画收集类型的对 应的引用,以促进该属性系统创建动态动画收集。在本发明的实施例中,使用 动画收集,而不使用基本动画对象,因为这种用法将会排除动画合成。
通过将动画收集加入单独的属性,来为资源制作动画。以下的例子表现了 如何利用动画颜色来创建SolidColorBrush。     ColorAnimationBuilder animBuilder=new ColorAnimationBuilder();     animBuilder.From=new Color(1.0f,0.0f,0.0f,0.0f);     animBuilder.Begin=new Time(0);     animBuilder.To=new Color(1.0f,1.0f,0.0f,0.0f);     animBuilder.Duration=new Time(1000);     animBuilder.AutoReverse=true;     animBuilder.RepeatDuration=Time.Indefinite;     SolidColorBrushBuilder brushBuilder=new SolidColorBrushBuilder();     brushBuilder.Color=new Color(1.0f,0.0f,0.0f,0.0f),     brushBuilder.ColorAnimations= animBuilder.ToColorAnimation();     SolidColorBrush animateBrush=brushBuilder.ToBrush();
动画资源可以被用于呈现操作中,也可以被用作关于元素属性的值。举例 来讲,通过将动画收集加入绘图上下文方法调用,或者通过使用动画资源,来 为呈现操作制作动画。以下的例子表现了如何将动画不透明度值推入绘图上下 文。
    FloatAnimationBuilder animBuilder=new FloatAnimationBuilder();     animBuilder.From=0.0f;     animBuilder.Begin=Time.Immediately;     animBuilder.To=1.0f;     animBuilder.Duration=new Time(1000);     animBuilder.Fill=TimeFill.Freeze;     myDrawingContext.PushOpacity(0.0f, animBuilder.ToFloatAnimation());
通过将动画收集加入Element属性,可以为元素制作动画。以下的例子表 现了如何以C charp为按钮的宽度制作动画。     BoxUnitAnimationBuilder animBuilder=new BoxUnitAnimationBuilder();     animBuilder.From=new BoxUnit(50);     animBuilder.Begin=Time.Immediately;     animBuilder.To=new BoxUnit(100);     animBuilder.Duration=new Time(1000);     animBuilder.Acceleration=0.2;     animBuilder.Deceleration=0.2;     animBuilder.Fill=TimeFill.Freeze;     myButton.Width=new BoxUnit(50);     myButton.WidthAnimations= animBuilder.ToBoxUnitAnimation();
以下示出XAML中的相同的例子。                   
只要使用动画(或动画资源),该动画(或资源)就被加以克隆,以便为 该目的地提供唯一的、可独立控制的时间线索。对属性执行动画制作的这种特 定的方法的结果是:该原始动画从来不是视觉场景的一部分,所以,它不会作 出响应,以通过动画对象的定时界面来控制调用。为了实现这个效果,该调用 代码必须首先使用动画,然后读回该动画。被读回的该值随后可以被高速缓存, 并被用于定时控制。以下的例子示出想要控制动画的那个代码所遵循的样式:     private FloatAnimation myOpacityAnimation;     public void Initialize()     {         FloatAnimationBuilder animBuilder=new FloatAnimationBuilder();        //Set the Begin property to Indefinite because we want to start         //this animation interactively,not automatically.         animBuilder.Begin=Time.Indefinitely;         animBuilder.From=1.0f;//Fully opaque         animBuilder.Duration=new Time(500);//half a second         animBuilder.To=0.5f;//Half transparent         animBuilder.AutoReverse=true;         //Create the animation         FloatAnimation animation= animBuilder.ToFloatAnimation();         //Animate the opacity of some element we own         myElement.Opacity=1.0f;         myElement.OpacityAnimations=animation;         //ERROR:The following line doesn′t have the intended result:         //myOpacityAnimation=animation;         //         //This line caches an animation″template″,not the actual animation         //that controls the opacity of the element.         //This caches the right animation--the one that is actually in use:         myOpacityAnimation= (FloatAnimation)myElement.OpacityAnimations[0];     }     public void OnSomeEvent()     {         //Whenever we detect some event,″blink″the element         myOpacityAnimation.BeginIn(0);     }
精通该技术领域的人将会理解:已描述了新的示范平台以及被并入其中的 示范的界面、类和结构,用于:在包括图形输出设备(例如,图形用户界面显 示器)的计算环境内,附上并执行对图形显示元素的动画行为。鉴于可以应 用本发明的这些原理的这许多可能的环境以及设计和执行上述动画结构的灵 活性,应该认识到:这里所描述的这些实施例意在起说明的作用,而不应该被 视作限制本发明的范围。精通应用本发明的技术领域的人将会理解:在不脱离 本发明的精神的前提下,可以在布置和细节方面修改这些说明性实施例。所以, 如这里所描述的本发明计划可以将所有这类实施例纳入以下的权利要求书及 其相等物的范围以内。
QQ群二维码
意见反馈