專利名稱:在計算機顯示輸出內協(xié)調動畫和媒體的制作方法
技術領域:
本發(fā)明一般涉及計算機系統(tǒng),尤其涉及用于在計算機系統(tǒng)上顯示的圖形以及其它視聽信息的處理。
背景技術:
在當代計算系統(tǒng)內,標記語言技術的發(fā)展導致了對于程序作者的一種直接的方式以提供給用戶有價值的信息,和接收相應于與顯示的信息的用戶交互的交互請求等。一般地,處理標記以構建元素樹,然后處理元素樹用以在顯示器上呈現(xiàn)相應的輸出數(shù)據。
美國專利申請序號為10/693,630和10/693,822在幾個有關其它事物的專利申請(轉讓給本發(fā)明的受讓人)中,描述一種一般被用以簡化程序編寫、稱為XAML(可擴展的應用標記語言)的標記語言。一般地,程序作者使用XAML指令與對應用編程接口(API)的調用來將對象放置在場景圖形數(shù)據結構內。例如,為了構建用戶接口,基于XAML的程序通常添加子可視對象至其它可視對象以建立分級場景圖形、編寫用以輸出的諸如幾何數(shù)據、圖形數(shù)據和其它數(shù)據的指令表、以及可指定在可視對象上的轉換、裁剪以及暗度特性。
在上述專利申請中描述的XAML的一個能力是能允許程序指定動畫參數(shù)和/或媒體相關數(shù)據,然后有效率地輸出包括相應動畫和/或媒體的相應顯示數(shù)據。例如,程序作者可使用參數(shù)描述理想的動畫效果,諸如隨著時間的推移多少顯示的對象特性應該被更改;例如,一矩形的暗度特性可被設置成從不透明至透明地漸變,然后過些時間返回。在通常情況下,系統(tǒng)管理動畫以使程序代碼只需要初始地指定動畫參數(shù),而不需要程序代碼本身隨著時間的推移定期地重畫更改的圖形來完成效果。
為此,在一實現(xiàn)中,操作系統(tǒng)規(guī)定使用定義隨著時間的推移動畫的演變的時間線對象,并且如果需要,例示一時鐘對象以表現(xiàn)用于該動畫的時間線。時鐘被較低級的圖形組件使用以確定更新的、時變的特性參數(shù)或用于正加以動畫制作的顯示的對象的參數(shù),而不是定期地返調(例如,每一幀一次)應用程序以重畫具有其更新的特性的動畫圖形,然后圖形基于更新的特性數(shù)據被重畫。一般地,媒體也被類似地處理。
盡管這樣直接的編程提供程序作者以改進的和簡化的方式作為用戶接口的一部分實現(xiàn)動畫和媒體,迄今為止的定時信息必須被獨立地應用到每個動畫或媒體元素。結果,迄今為止程序作者需要手動地同步可在不同時間線上發(fā)生的各種動作(舉例來說,開始和停止、動畫和媒體的次數(shù)、和/或接收到的事件如何處理)。這可導致不一致的狀態(tài),諸如一個動畫的特性在另一個動畫的特性之前(至少暫時),即使程序作者希望兩者同步。這也增加復雜性;例如,在重新開始事件后,和該事件有關的每個單獨的動畫需要被發(fā)現(xiàn)并重新開始。
發(fā)明概要簡單地說,本發(fā)明提供允許作者安排一組動畫的方法和系統(tǒng),這通過在指定的時間線對象(相當于故事板)內把它們分組。在一個實現(xiàn)中,故事板API組提供一種方法以將影響各種對象和特性的時間線組成單一時間線樹,使程序作者以直接的方式組織和控制復雜定時事件組。故事板可在特定動畫/視頻/音頻實例上使用,或用以特定式樣的動畫。
在一實現(xiàn)中,故事板包括允許時間線樹在元素樹內對于元素被指定的對象。在樹內的每個時間線設定元素的特性值,并且控制元素的動畫和它的子樹。故事板實質上對應于可被開始、停止或暫停、或用以尋找的特定類型的時間線對象,從而控制與該故事板關聯(lián)的動畫元素和/或媒體行為的外觀。
故事板也可包括可與元素關聯(lián)并且能獨立地開始的最高級時間線集合。例如,作者可把兩個不同的動畫與一個在相同故事板集合內的元素關聯(lián),并且雖然那些動畫可被獨立地觸發(fā),但它們被包括為一個單元。如此,故事板在定時樹和一元素樹之間提供連接點,該元素樹允許在故事板內的動畫相對于故事板附加于的元素解析它們的目標。
故事板也可包括觸發(fā)器集合,該觸發(fā)器可由狀態(tài)更改、事件、或其它動作所激活并包括當觸發(fā)器激活時將要被執(zhí)行的一組可擴展的活動(例如,時間線的開始或停止)。故事板是基礎對象模型的一部分,該對象模型允許用戶從代碼中在故事板內交互地開始和停止時間線。
一般地,在故事板內的時間線表現(xiàn)可被應用于各種子樹、元素和其它對象的動畫模板。故事板可直接在樹內的框架元素上被設定,或通過式樣(包括一個或多個數(shù)據值的資源,該數(shù)據值可被應用于諸如按鈕的顏色、大小和其它特性的元素)應用于框架元素。故事板也可被用以把動畫應用于對象,該對象支持復制,諸如可復制原始信息并且然后在復制的信息上操作以使原始信息可被復原的可變的。
如此,故事板提供一種方法以將其它影響各種對象和特性的獨立的時間線組成單一時間線樹,使程序作者以直接的方式組織和控制復雜定時事件組。例如,定時樹和元素樹的分離允許作者使用定時樹及時做出處理,諸如順序運行一組動畫、或循環(huán)復雜的定時結構。故事板可在動畫/視頻/音頻的特定實例上使用,或被用以特定式樣的動畫。
故事板與能使作者指定要動畫制作的對象和特性以及它們從那里進行動畫制作的基值的特性關聯(lián)。故事板使作者能組織和控制動畫組為一組而不是封閉地定義隨著時間的推移的每個動畫的改變,從而使以復雜方式相互同步的動畫的直接創(chuàng)建成為可能,包括并行動畫和順序動畫(以下描述)。
故事板允許特性觸發(fā)器和事件觸發(fā)器的使用以控制它們的操作(例如,開始、暫停、尋找和停止活動)。一般地,特性觸發(fā)器對應于某個諸如真/假的狀態(tài)/值,而事件啟動。例如,當鼠標在一元素上方盤旋時,特性觸發(fā)器可具有真值,當不在元素上方盤旋時,可具有假值,并且當鼠標點擊該元素時可啟動一事件。每個真或假狀態(tài)和/或事件可被用以在一故事板(或多個故事板)內獨自地開始、停止、暫停、和/或搜索。通過這種方式,動畫通過與顯示的元素樹表現(xiàn)的用戶交互作用是可控制的。除了事件觸發(fā)器,在觸發(fā)時間線內,特性進入/退出觸發(fā)器也是可用的。
故事板和觸發(fā)器可被設計,其中式樣允許作者把表現(xiàn)一個或多個以后可被作為組應用于元素的相應特性的特性的數(shù)據集合在一起。在式樣內,這些特性可以是動畫的和/或相應于觸發(fā)器。
其它好處和優(yōu)勢將從以下結合附圖的詳細描述中變得明顯,其中
附圖簡述
圖1是一框圖,表現(xiàn)了一示范計算機系統(tǒng),本發(fā)明可合并入該系統(tǒng)中;圖2是一框圖,表現(xiàn)了根據本發(fā)明的一方面的媒體整合層架構;圖3是根據本發(fā)明的一方面,用以對具有可視API層的接口解釋標記語言代碼的組件的表現(xiàn);圖4和圖5是框圖,一般表示根據本發(fā)明的一方面,具有用于把時鐘特性數(shù)據轉變?yōu)樵诖_定進程數(shù)據內使用的時間間隔的兩級架構;圖6是根據本發(fā)明的一方面,故事板如何以代碼的方式被安排以把時間線與元素樹元素關聯(lián)的表現(xiàn);和圖7是根據本發(fā)明的一方面,在包括表現(xiàn)故事板時間線的例示的時鐘的數(shù)據結構之中關系的表現(xiàn)。
發(fā)明的詳細描述示范操作環(huán)境圖1示出了一合適的計算系統(tǒng)環(huán)境100的示例,在該環(huán)境中可實現(xiàn)本發(fā)明。計算系統(tǒng)環(huán)境100只是一合適的計算環(huán)境的一例,而不是要提出對本發(fā)明使用范圍或功能性進行任何限制。計算環(huán)境100也不應解釋成對于在示范操作環(huán)境100中所示出的任一組件或其組合有任何依賴或要求。
本發(fā)明用多個其它通用或專用計算系統(tǒng)環(huán)境或配置是可運行的??梢赃m用于該本發(fā)明的公知的計算系統(tǒng)、環(huán)境、和/或配置的示例包括,但不局限于,個人計算機、服務器計算機、手持設備或膝上型設備、寫字板設備、多處理器系統(tǒng)、基于微處理器的系統(tǒng)、機頂盒、可編程消費者電子設備、網絡PC、小型機、大型計算機、包括任何諸如以上系統(tǒng)或設備的分布式計算環(huán)境等。
本發(fā)明可以在正由計算機執(zhí)行的諸如程序模塊的計算機可執(zhí)行指令的一般上下文中被描述。一般地,程序模塊包括完成特殊任務或執(zhí)行特殊抽象數(shù)據類型的例行程序、程序、對象、組件、數(shù)據結構等。本發(fā)明也可以在分布的計算環(huán)境中實踐,在此由通過通信網絡而連接的遠程處理設備來執(zhí)行任務。在分布式計算環(huán)境中,程序模塊可以定位于包括記憶體儲存設備的本地和遠程計算機存儲介質。
參見圖1,對于實現(xiàn)本發(fā)明的示范的系統(tǒng)包括一以計算機110形式出現(xiàn)的通用計算設備。計算機110的組件包括,但不局限于,處理單元120、系統(tǒng)存儲器130、以及將包括該系統(tǒng)存儲器在內的各種系統(tǒng)組件耦合至處理單元120的系統(tǒng)總線121。上述系統(tǒng)總線121可以是幾種總線結構類型中的任何一種,包括存儲總線或存儲控制器、外圍總線和使用各種總線體系結構的任一種的局域總線。舉例來說,而非限制,此類體系結構包括工業(yè)標準體系結構(ISA)總線、微通道體系結構(MCA)總線、增強型ISA(EISA)總線、視頻電子標準技術協(xié)會(VESA)局域總線、加速圖形端口(AGP)總線和也被稱為Mezzanine總線的外圍部件互連(PCI)總線。
計算機110通常包括各種計算機可讀介質。計算機可讀介質可以是任何計算機110能夠訪問的可用介質,包括易失性的和非易失性的介質、可移動的和不可移動的介質。舉例來說,而非限制,計算機可讀介質可以包含計算機存儲介質和通信介質。計算機存儲介質包括能以任何方法或技術實現(xiàn)的易失性的和非易失性的、可移動的和不可移動的介質,用于存儲諸如計算機可讀指令、數(shù)據結構、程序模塊或其它數(shù)據等信息。計算機存儲介質包括,但不局限于,RAM、ROM、EEPROM、閃存或其它存儲技術,CD-ROM、數(shù)字化多功能光盤(DVD)或其它光盤存儲、盒式磁帶、磁帶、磁盤存儲器或其它磁存儲設備,或任何其它可以被用來存儲想要的信息并且可以被計算機110訪問的介質。通信介質通常具體體現(xiàn)了諸如載波或其它傳送機制的已調制數(shù)據信號中的計算機可讀指令、數(shù)據結構、程序模塊或其它數(shù)據,也包括任何信息傳遞介質。術語“已調制數(shù)據信號”是指在該信號中以編碼信息的方式來設置或改變其一個或多個特征的信號。舉例來說,而非限制,通信介質包括諸如有線網或直線連接的有線介質,和諸如聲音、射頻、紅外線和其它無線介質的無線介質。任何以上所述的組合也應該包括在計算機可讀介質的范圍之內。
系統(tǒng)存儲器130包括以諸如只讀存儲器(ROM)131和隨機存取存儲器(RAM)132的易失性和/或非易失性存儲器的形式的計算機存儲介質。包含如在啟動期間幫助在計算機110內各元件之間傳送信息的基本例行程序的基本輸入/輸出系統(tǒng)133(BIOS),通常存儲在ROM 131中。RAM 132通常包含可以被處理單元120立即訪問和/或當前操作的數(shù)據和/或程序模塊。舉例來說,而非限制,圖1示出了操作系統(tǒng)134、應用程序135、其它程序模塊136和程序數(shù)據137。
計算機110還可以包括其它可移動/不可移動、易失性/非易失性的計算機存儲介質。僅作為示例,圖1示出了從不可移動、非易失性磁性介質讀出或寫入不可移動、非易失性磁性介質的硬盤驅動器141、從可移動、非易失性磁盤152讀出或寫入可移動、非易失性磁盤152的磁盤驅動器151、以及從諸如CDROM或其它光學介質的可移動、非易失性光盤156讀出或寫入可移動、非易失性光盤156的光盤驅動器155。其它可以使用在示例的操作環(huán)境中的可移動/不可移動、易失性/非易失性計算機存儲介質包括,但不局限于,盒式磁帶、閃存卡、數(shù)字多功能光盤、數(shù)字錄像帶、固態(tài)RAM、固態(tài)ROM等。硬盤驅動器141通常通過諸如接口140的不可移動存儲接口連接到系統(tǒng)總線121,磁盤驅動器151和光盤驅動器155通常通過諸如接口150的可移動存儲接口連接到系統(tǒng)總線121。
以上討論并且在圖1中示出的驅動器及其它們相關的計算機存儲介質為計算機110提供了計算機可讀指令、數(shù)據結構、程序模塊和其它數(shù)據的存儲。在圖1中,例如,示出硬盤驅動器141存儲操作系統(tǒng)144、應用程序145、其它程序模塊146、和程序數(shù)據147。需要注意的是這些組件可以和操作系統(tǒng)134、應用程序135、其它程序模塊136和程序數(shù)據137相同,也可以和它們不同。在此對操作系統(tǒng)144、應用程序145、其它程序模塊146和程序數(shù)據147給出了不同的標號來說明至少它們是不同的副本。用戶可以通過諸如寫字板(電子數(shù)字轉換器)164、麥克風163、鍵盤162和定位設備161的輸入設備把指令和信息輸入到計算機110中,定位設備161通常指如鼠標、跟蹤球或觸摸板。其它輸入設備(圖1中未示)可以包括操縱桿、游戲墊、圓盤式衛(wèi)星天線、掃描儀等等。這些和其它輸入設備通常由用戶輸入接口160連接到處理單元120,上述輸入接口160和系統(tǒng)總線121相耦合。但是上述和其它輸入設備也可以由其它接口和總線結構連接到處理單元120,諸如,并行端口、游戲端口或通用串行總線(USB)。監(jiān)視器191或其它類型顯示設備也可以通過諸如視頻接口190的接口連接到系統(tǒng)總線121。監(jiān)視器191也可以和觸摸屏畫板193等集成在一起。該觸摸屏面板193等可以經由接口(例如觸摸屏接口192)將諸如筆跡的數(shù)字化輸入到計算機系統(tǒng)110。需要注意的是監(jiān)視器和/或觸摸屏畫板可以物理地耦合到包含了計算機110,諸如寫字板式個人計算機的一外殼,其中觸摸屏面板193實質上用為寫字板164。另外,計算機(例如,計算設備110)也包括其它外圍輸出設備,諸如可以通過一輸出外圍設備接口194等連接的揚聲器195和打印機196。
計算機110可以在網絡化的環(huán)境中運行,該環(huán)境使用與一臺或多臺諸如遠程計算機180的遠程計算機的邏輯連接。遠程計算機180可以是個人計算機、服務器、路由器、網絡個人計算機、對等設備或其它共用網絡節(jié)點,通常包括以上描述的和計算機110相關的多個或全部元件,盡管在圖1中只示出了記憶存儲設備181。在圖1中描繪的邏輯連接包括局域網(LAN)171和廣域網(WAN)173,但是也可以包括其它網絡。這樣的網絡環(huán)境在辦公室、企業(yè)范圍的計算機網絡、內聯(lián)網和因特網中是普遍的。
當在LAN網絡環(huán)境中使用時,計算機110通過網絡接口或適配器170連接到LAN171。當在WAN網絡環(huán)境中使用時,計算機110通常包括調制解調器172或通過諸如因特網的WAN173建立通信的其他裝置。調制解調器172可以是內置的或外置的,可以通過用戶輸入接口160或其它適當?shù)臋C制連接到系統(tǒng)總線121。在一網絡化的環(huán)境中,所描述的和計算機110相關的程序模塊或其中的各個部分可以存儲在遠程記憶體存儲設備內。舉例說明,但非限制,圖1示出了駐留在存儲設備181上的遠程應用程序185??梢岳斫獾氖撬镜木W絡連接是示例的,也可以使用在計算機間建立通信鏈路的其他裝置。
示例架構層本發(fā)明的一方面一般涉及在計算機系統(tǒng)上提供流暢、復雜的動畫和/或媒體。為此,如圖2中所一般表現(xiàn)的,提供媒體整合層架構200。應用程序、控制或其它類似的較高級程序代碼(例如,操作系統(tǒng)組件的用戶接口)202通過一組應用編程接口(API)204等訪問媒體整合層架構200以訪問(讀或寫)圖形信息。需要注意的是雖然在此描述的例子中的多個例子涉及與API連接的應用程序,但可以理解的是其它較高級程序代碼和組件(例如,操作系統(tǒng)的用戶接口)也可用以與在此描述的較低級組件連接口。如此,任何涉及這樣的較高級程序代碼,不管是否涉及應用程序、用戶接口等,都應該被同等考慮。
在一實現(xiàn)中,媒體整合層架構200包括高級合成和動畫引擎206、定時和動畫組件208、以及低級合成和動畫引擎210。如在此使用的,術語“高級”和“低級”類似于那些在其它計算情況中使用的,其中一般地,相對于較高級組件而言越低級的軟件組件是越靠近硬件的組件。如此,例如,發(fā)送自高級合成和動畫引擎206的圖形信息可在低級合成和動畫引擎210處被接收,在210處信息被用以發(fā)送圖形數(shù)據至包括硬件的圖形子系統(tǒng)。
一般地,高級合成和動畫引擎(在此也稱為高級合成器和動畫制作者或高級引擎或組件)206構建顯示元素樹以表現(xiàn)由應用程序202提供的圖形場景,而定時和動畫組件提供說明性的(或其它)動畫和定時控制。低級合成和動畫引擎(在此也稱為低級合成器和動畫制作者或低級引擎或組件)210組成用以多個應用場景的呈現(xiàn),并利用呈現(xiàn)組件來實現(xiàn)對于屏幕真實的圖形呈現(xiàn)。注意,在較高層上依然可能做消耗時間的或特定應用的呈現(xiàn),并發(fā)送涉及位圖等至較低層。
高級合成和動畫引擎206構建元素樹結構并遍歷該結構,創(chuàng)建被發(fā)送至低級合成和動畫引擎210的呈現(xiàn)指令和簡單動畫時間間隔。由高級合成器生成的呈現(xiàn)指令可包括定時和動畫信息。低級合成和動畫引擎210采用呈現(xiàn)指令和動畫時間間隔并管理以后提供給圖形子系統(tǒng)(舉例來說,圖形軟件和硬件)212的場景的動畫制作、呈現(xiàn)和編寫。除了本地顯示的輸出以外,高級合成和動畫引擎206(或此外一類似的)可以合適的格式提供呈現(xiàn)和動畫指令給較低級打印代碼220以發(fā)送固定的圖形數(shù)據至打印機222等,和/或可以合適的格式提供呈現(xiàn)指令和簡單動畫時間間隔給較低級終端傳送服務器226以傳送至遠程機器228。注意大量的信息也可通過網絡發(fā)送,舉例來說,在沒有任何網絡流通量的情況下,具有本地的遠程機器處理鼠標滾動影響是理想的。
在該實現(xiàn)中,媒體整合層架構200把圖形處理分割成多個層次,并且這些層次中的每個層次執(zhí)行某些智能圖形處理,這些處理一起允許應用程序的用戶接口202等輸出具有流暢動畫的圖形、合成這些圖形和其它應用圖形、以及與視頻幀一起處理。動畫和/或合成也可和音頻輸出同步。例如,通過同步音頻與在低級組件上的幀速率,音頻的定時實質上可與視頻或圖形的定時一致,并且不依賴于任務調度、復雜預處理的能力以保持刷新速率。
圖3表現(xiàn)了一實現(xiàn),其中諸如基于XAML的代碼的標記代碼302可由句法分析器/翻譯器304解釋。一般地,句法分析器/翻譯器304添加元素至元素樹/特性系統(tǒng)314;元素是實行自己布局的可視對象。此外,注意標記代碼的某些或所有可被按需編譯而不是解釋,從而提高效率。
一般地,元素是在參與特性系統(tǒng)、觸發(fā)和布局/表現(xiàn)系統(tǒng)的元素層內的對象。句法分析器304查找標記并且確定是否那些標記幫助定義元素或資源對象。在VisualBrush的特殊情況中,例如,相同的標記可被解釋成元素或也被解釋成資源對象,這取決于那些標記出現(xiàn)地方的上下文,例如,如在美國專利申請序號為10/401,717中描述的那樣,取決于是否在復雜特性句法中出現(xiàn)。
除了在標記內的內聯(lián)表現(xiàn)以外,資源實例也可定位在其它任何位置(例如,在標記內或文件內,該文件可以是在本地或在遠程網絡上并能適當?shù)叵螺d),并能由名稱所引用,(例如,文本名稱、引用或其它合適的標識符)。通過這種方式,場景設計者可在整個場景內重用元素樹中的元素,包括由復雜特性句法描述的元素。
句法分析器304通過按必要訪問類型轉換器308來處理在復雜特性句法內的標記,并且也通過把特定的參數(shù)與對象特性匹配來處理在復雜特性句法內的標記,從而為場景設計者處理復雜性。如此,句法分析器304不僅僅建立對象,也設置對象上的特性。由于相同的呈現(xiàn)模型在元素層次和API層次之間共享,對象中的多個對象實質上是相同的。這使得句法分析器/翻譯具有高效率,并且也允許不同類型的編程語言(例如,類似C#等語言)可容易地從標記轉換成自己的句法,并且反之亦然。注意的是如圖3中所表現(xiàn)的,另一個這樣的編程語言310(可包括編譯過的標記)能添加元素至元素樹208,或能直接與可視API層316連接。
還如圖3中所表現(xiàn)的,相同的標記302可被用以在一元素層次和資源層次上編程。一般地,元素層次給場景設計者全部的可編程性、提供繼承的特性系統(tǒng)的使用(例如,如特征的式樣表)、以及觸發(fā)(例如,由此元素可具有附加的代碼以響應用戶輸入事件或動作來更改它的外觀、位置等)。然而,本發(fā)明還提供資源層機制,場景設計者實質上可由此簡化元素樹以及直接對可視API層編程。對于不需要元素層次特性的許多類型的靜態(tài)形狀、圖形等,這提供一種更有效率和輕便的方式輸出適當?shù)膶ο蟆?br>
為了控制動畫和媒體輸出,如以下參照圖4和圖5描述的那樣,包括時鐘的定時樹也被維持。一般地,高級合成器和動畫制作者引擎206執(zhí)行復雜處理(有時指編譯),該復雜處理大大簡化處理量并且大大減少較低級需要處理的數(shù)據量以呈現(xiàn)正確的輸入。然而,需要的注意的是,由較高級執(zhí)行的處理的數(shù)量和類型在很大程度上可取決于較低級的裝載、配置和能力。例如,如果高能力圖形硬件存在,較高級可進行較少數(shù)量的處理,反之亦然。高級和低級層被適應于這些因素。
一般地,動畫通過高級合成器和動畫引擎206以及低級合成器和動畫引擎210完成。在一實現(xiàn)中,高級引擎206遍歷場景并且用關于稍后的插補的時間間隔更新動畫參數(shù),以及把這些簡化的數(shù)據結構封裝至發(fā)送到較低級引擎210的指令中。這可以同步和/或異步的方式完成。時間間隔數(shù)據可被考慮成包括定時端點(開始和結束定時數(shù)據)和用于呈現(xiàn)指令的參數(shù)化的值。注意的是高級引擎204可執(zhí)行請求的插補中的某些插補或所有插補,例如,如果一插補或其它運動函數(shù)對于較低級引擎210而言太復雜而不能處理,或較低級不能跟上放置其中的處理需要,較高級引擎可執(zhí)行計算中的某些計算或所有計算并提供給較低級簡化的數(shù)據、指令、格局等以實現(xiàn)理想的結果。
在典型的情況下,當較低級執(zhí)行插補時,對于動畫的每個幀,低級引擎210插補參數(shù)時間間隔以獲得即時值,并解碼指令為由圖形設備執(zhí)行的呈現(xiàn)命令。圖形設備通過添加任何可在場景中出現(xiàn)的視頻幀以合成最終的場景。其它數(shù)據也可被添加,諸如由數(shù)字化版權管理保護的內容。
如此,高級引擎206遍歷場景數(shù)據結構、計算描述一段時間內每個動畫的參數(shù)的時間間隔、以及發(fā)送這些時間間隔和簡化的參數(shù)化的畫圖指令至低級引擎210。參數(shù)數(shù)據包括開始時間、結束時間、插補者和插補數(shù)據。作為示例,高級合成器和動畫引擎206可指示低級合成器和動畫引擎210關于圖形應該隨時間的推移如何改變,例如,開始坐標、結束坐標、圖形應該在坐標之間移動的時間量(時間間隔)、以及諸如線性的運動函數(shù)(注意運動不是動畫所要求的,如固定對象可通過更改例如它的顏色特性而被動畫制作),而不是擦除和重畫圖像以使它看上去移動。低級合成器和動畫引擎210將插補以確定幀之間新的位置,把這些轉換成圖形設備可理解的畫圖指令,并發(fā)送命令至圖形設備。高級引擎206的每個發(fā)送較好地提供足夠數(shù)據給低級引擎210以執(zhí)行隨著幾個幀的推移的流暢的動畫。
低級(例如,快速記號)引擎210是從高級引擎206中分離的任務。低級引擎210從高級引擎206接收簡化的參數(shù)化的畫圖指令和描述場景的參數(shù)時間間隔。低級引擎維持和遍歷這些數(shù)據結構直到新的數(shù)據結構由高級引擎206提供。低級引擎可服務多個高級引擎206,對于每個高級引擎維持獨自的數(shù)據結構。在低級引擎210和高級引擎206之間一對多的關系允許系統(tǒng)同步地流暢地動畫制作多個場景。
低級引擎210實質上基于高級引擎的提供的時間間隔來插補即時動畫參數(shù),更新畫圖指令和呈現(xiàn)每一幀的場景。低級引擎210任務在系統(tǒng)上以高優(yōu)先級運行以確保幀準備好顯示,諸如在圖形硬件屏幕刷新速率。由低級引擎210執(zhí)行的插補一般因此限制于簡單、快速的函數(shù),諸如線性、分段線性、三次樣條以及類似速度的那些函數(shù)。
關于動畫和媒體,一般如圖4和圖5中顯示的,諸如應用程序202的程序結合定時信息(被稱為時鐘或時鐘特性)對高級組件206指定動畫特性值。如以下描述的,實質上任何獨立動畫或媒體(例如,諸如視頻和音頻的線性媒體)以及協(xié)調指定的動畫的故事板具有對于其在高級組件上維持的時鐘。一般地,作者指定例示至時鐘以合適地保持它們同步的時間線數(shù)據。
時鐘特性包括定義給定的時鐘和定時結構的其它部分之間初始同步關系的定時特性。如圖5所示,高級組件206可調用高級動畫函數(shù)520H(例如,以管理的代碼書寫,該代碼以元數(shù)據的形式提供信息,該元數(shù)據允許通用語言運行時間,其上可運行元數(shù)據以控制它的操作)以確定動畫特性的當前值。在快速幀速率計算期間,低級組件210調用類似(或相同)的具有由引擎414計算的進程的動畫函數(shù)520L以確定動畫的當前特性值。注意的是在可供選擇的實現(xiàn)中,動畫函數(shù)可構建進例如較低級組件中。
一般地,動畫和線性媒體與一組時鐘關聯(lián),該組時鐘通過同步圖元和規(guī)則相互涉及。時鐘可被分級地安排,例如,應用程序具有父時鐘,而應用程序的動畫的對象是子程序,其依次具有其它子時鐘。當時鐘的特性被定義或修改時,該時鐘的任何子時鐘可被影響。例如,暫停父時鐘可暫停其子時鐘的任何一個,以及加倍父時鐘的速度可加倍子時鐘的任何一個的速度。
這些時鐘特性可由包括由應用程序在運行時間啟動的交互的控制事件的資源事件所修改。如此,時鐘是交互的,通過這種方式每個時鐘可各自地由應用程序在任意時間,例如,響應于用戶輸入,開始、暫停、繼續(xù)執(zhí)行以及停止。此外,新的時鐘可被添加至定時結構,并且現(xiàn)有的時鐘可被移除。
如在上述美國專利申請10/693,822中描述的,高級定時組件可基于存儲的事件表(開始、暫停等)和關聯(lián)的同步圖元對于每個時鐘生成時間間隔表。激活時間間隔是描述在真實世界時間內的不同點上給定的時鐘表示的時間的直接的、非重疊片斷。
如圖4中所示的,時鐘特性中的至少某些特性可在時鐘的定時樹402內被分級地關聯(lián)。三個這樣的時鐘與它們的特性在圖4中示出,即時鐘特性4041-4043,然而,可以理解的是在給定的情況下可存在許多更多的時鐘和可供選擇的定時樹。對每個時鐘,例如可相對應顯示的動畫對象(或故事板協(xié)調的對象組),高級組件206包括狀態(tài)機,稱為可從時鐘特性生產生事件表(例如,4061)的事件表生成器408。一般地,事件表生成器408把由特定的時鐘特性初始安排的事件與任何諸如暫停和繼續(xù)執(zhí)行接收到的關于動畫的請求的清晰的交互事件分組成一個事件表。時鐘對于每個動畫(或如以下描述的通過故事板的動畫組)維持,并且這樣就存在相應于每個獨立的動畫/動畫組的事件表以及存在一個對于每個獨立線性媒體的事件表。
高級組件包括對于每個動畫或媒體使用事件表(例如,4063)的時間間隔生成器410以計算發(fā)送至低級組件210的相應的時間間隔表(例如,4123)。依次地,低級組件210包括基于關于時間間隔數(shù)據的當前時間來控制輸出的低級計算引擎414,該引擎通過諸如基于對于該對象的時間間隔數(shù)據和當前時間提供進程值至確定動畫對象的變化特性的當前值的低級動畫功能子系統(tǒng)520t來控制輸出。例如,對于任何給定的幀,低級計算引擎414基于時間間隔數(shù)據和當前時間(可以是系統(tǒng)時間或相對時間)來插補動畫對象的位置。注意的是如圖4和圖5中所示,高級定時組件包括定時樹402和事件表4061-4063,而低級定時組件210包括時間間隔表4121-4123,然而這些數(shù)據結構實質上可維持在存儲器,一般在高速隨機存取存儲器內的任何位置。
總而言之,高級定時組件206查看同步規(guī)則和圖元所敘述(例如,分級地)的時鐘的樹402。本發(fā)明在高級定時組件206內使用時鐘以編譯由低級定時引擎消耗的活動時間間隔412表。低級定時引擎查看表現(xiàn)獨立(例如,每一動畫對象或每一線性媒體)時鐘的時間間隔表412。如圖5中所示,存在提供一致的時間給給高級定時組件和低級定時組件的諸如系統(tǒng)時鐘524的時鐘以使多個級保持同步。
響應于從應用程序202(或某些其它源)接收到的交互更改,高級定時組件需要更新時鐘的狀態(tài),該狀態(tài)直接涉及該更改,和任何如同步圖元所指定的那樣間接涉及的。注意的是對于單時鐘的更改可影響在定時結構內其它時鐘是可能的。例如,幻燈片的陳述者可暫停整個顯示,由此當前在顯示的任何動畫和線性媒體需要被暫停。如以下描述的,根據本發(fā)明的一個方面,故事板允許動畫和/或媒體被一起分組并且以這種理想的方式協(xié)調。
一般地,任何時候發(fā)生關于對象的交互作用,事件表按需重新生成并且時間間隔表重新計算并被發(fā)送至較低級定時組件。較高級組件執(zhí)行這些操作(例如,以每秒大約6到10次的頻率)以使較低級組件(例如,每秒操作60次)只需要處理對于每個動畫的對象當前的時間間隔表。
除了對象的該時間間隔信息和開始以及結束值,額外的參數(shù)可被發(fā)送至較高級組件并導致對于時間間隔表的更改。例如,應用程序可及時尋找對應于一事件的時間段。該應用程序指定尋找何時將要發(fā)生、以及到什么程度。象倒帶或快進媒體,通過在動畫上的尋找,應用程序可及時前跳或回跳至特定點。倒轉事件是應用程序可指定的另一類型的計劃的或交互的事件。當?shù)罐D事件在表中時,進程自動倒轉,例如,從百分之百至百分之零。速度更改也被支持,例如,低于某個時鐘的每個事物可被設置成運行速度高于或低于實際時間。其它屬性也可被指定,諸如對于特定時鐘表明是否允許重新開始,和/或如果當前不運行是否再開始,例如,在一秒處啟動,在10秒處再開始,在100秒處再開始等,但是如果當前運行,重啟或不重啟是可選擇的。
用于協(xié)調動畫和媒體的故事板本發(fā)明在其它事情之中涉及故事板,該故事板包括允許對于元素(例如,諸如窗體、面板的FrameworkElement(框架元素),諸如按鈕等的控制器)特定時間線樹的對象。時間線設置元素的特性值,并且控制元素和它子樹的動畫。故事板實質上對應于可被開始、結束或暫停、或用以尋找特定類型的時間線對象,從而控制與該故事板關聯(lián)的動畫元素和/或媒體行為的外觀。
可以理解的是,本發(fā)明的一個方面是故事板包括可與元素關聯(lián)并且能獨立開始的最高級時間線集合。例如,如以下描述的,模型允許作者在同一故事板集合內的元素上具有鼠標浮過動畫和鼠標點擊動畫。鼠標浮過和鼠標點擊動畫時間線可被獨立地觸發(fā),但是它們包括在同一單元內。故事板也在定時樹和一元素樹之間提供連接點,該元素樹允許在故事板內的動畫相對于故事板附加于的元素解析它們的目標。故事板也可包括觸發(fā)器集合,該觸發(fā)器可由狀態(tài)更改、事件、或其它動作所激活并包括當觸發(fā)器激活時將要被執(zhí)行的一組可擴展的動作(例如,時間線的開始或停止)。故事板是基礎對象模型的一部分,該對象模型允許作者從代碼中在故事板內交互地開始和停止時間線。
一般地,在故事板內的時間線表現(xiàn)可被應用于各種子樹、元素和其它對象(例如,文本字母、單詞、線、段落等)的動畫模板。故事板可直接框架元素上被設定,或通過式樣(如以下描述的,包括一個或多個數(shù)據值的資源,該數(shù)據值可被應用于諸如按鈕的顏色、大小和其它特性的元素)應用于框架元素。故事板也可被用以把動畫應用于對象,該對象支持復制,諸如可變性(例如,畫筆、轉換、幾何等,其中可變性可用以設置FrameworkElement(框架元素)的特性,如在美國專利申請序號為10/693,438的申請中描述的)。例如,畫筆是可變的,其通過復制原始背景信息然后在復制的信息上操作來設置按鈕或面板的背景,以使原始信息被恢復。如此,故事板可被用以動畫制作設置FrameworkElement(框架元素)特性的可變性。換句話說,存在兩種涉及故事板的對象,稱為參與故事板的元素(諸如FrameworkElement(框架元素))和那些沒有參與故事板的元素(例如,以上描述的可變性)。故事板的算法/數(shù)據結構是那些參與特定任務的,甚至那些只要支持復制的沒有參與特定任務的。
根據本發(fā)明的一個方面,故事板(例如,通過API訪問的對象)允許程序作者通過對時間線內的動畫分組(成為元素特性)來安排協(xié)調的動畫組。換句話說,故事板把定時樹和元素樹整合,通過相同的時間線以協(xié)調的方式提供能力以操作對于不同動畫的不同特性的定時。如此,故事板提供一種方法以將其它影響各種對象和特性的獨立的時間線組成單一時間線樹,使程序作者以直接的方式組織和控制復雜定時事件組。例如,作為故事板一部分的時間線下的動畫分組允許通過僅僅重啟故事板來立即重啟所有動畫,而不是必須尋找和重啟單獨的動畫。此外,定時樹和元素樹的分離允許用戶使用定時樹及時做出處理,諸如順序運行一組動畫、或循環(huán)復雜的定時結構。
故事板可在動畫/視頻/音頻的特定實例上使用,或被用以特定式樣的動畫。
作為對比,考慮以下在沒有故事板情況下寫的示例代碼,以及如此需要后臺編碼以添加交互響應(在這個例子中,兩個獨自按鈕在鼠標點擊后理想的同時動畫)。代碼的作者需要確定對于每個按鈕的動畫設定相同的開始時間,這使由于這些時間需要在每個按鈕的時間線上各自聲明。注意的是盡管該代碼目的在于同時動畫制作兩個按鈕,由于它們由兩個獨自的(開始)調用所啟動,實際上在第一動畫和第二動畫之間將存在一些滯后
根據本發(fā)明的各個方面,在一實現(xiàn)中,為了動畫而使用故事板,程序作者添加時間線、關聯(lián)機制(例如,SetterTimeline或附加的故事板特性)、動畫對象至FrameworkElement(框架元素)的故事板特性中。故事板可被直接應用于特定元素,或在式樣內被定義(如以下所描述的)。在該實現(xiàn)中,故事板具有至少一個用于鏈接一個或多個時間線至特定對象的特定特性的SetterTimeline。除了以上描述的時間線的基本定時特性外,SetterTimeline有三個使作者指定要動畫制作的對象和特性的唯一特性,并且從那里進行動畫制作的基值稱為TargetID,該TargetID指向對象動畫;PropertyPath(在此與“特性”或“路徑”同義),指向要動畫制作的特性;以及值,該值(如果存在的話)是指定指向的特性的基值的選擇特性。需要注意的是在作者使用SetterTimeline指向對象和特性后,作者添加時間線和動畫作為它的子時間線和動畫應用到指向的特性。
以下示例代碼說明故事板如何相對于先前的示例代碼簡化編碼和提高功能性(注意的是該示例使用SetterTimeline示例實現(xiàn)而不是通過在Storyboard(故事板)類中附加的特性操作的一可供選擇的實現(xiàn),如以下描述的)
作為選擇,該第二個示例XAML代碼組使用故事板啟動點擊事件后兩個按鈕上的同時動畫。為此,在圖層的單一故事板時間線內,存在一把一元素特性(myButton元素的暗度特性)連接到該故事板時間線的SetterTimeline以及另一把另一元素特性(myButton2元素的位置特性)連接到該相同故事板時間線的SetterTimeline。一單一事件(點擊myButton)觸發(fā)故事板開始一協(xié)調的動畫,該動畫隨時間的推移更改myButton的暗度以及myButton2的位置。
如可從對比代碼示例中看出,故事板的使用減少代碼復雜度并在動畫的開始時間之間產生真正的協(xié)調。在該例子中,由于沒有獨自對于開始的調用,兩個動畫真正地同時開始。此外,沒有在XAML后臺的代碼被需要實現(xiàn)交互性,所以作者可完全用XAML編寫代碼。此外,結合故事板,作者只需要在一處,也就是說在故事板的時間線上,設定協(xié)調的開始時間。
如此,故事板使作者能組織和控制動畫組為一組而不是個別地定義隨著時間的推移的每個動畫的改變,從而使同步的動畫和順序動畫的直接創(chuàng)建成為可能(以下描述)??紤]以下的例子,其對應于具有三根不同寬度和顏色的矩形指針的時鐘,有黑色的小時指針、綠色的分鐘指針以及紅色的秒指針,該時鐘通過設定角度的旋轉變換的使用來自動顯示當前系統(tǒng)時間。在例子中,一單一故事板時間線被用以協(xié)調三根指針的動畫
運行完以上的代碼后,通過呈現(xiàn)轉換特性和旋轉轉換角度子特性,時間管理器基于當前時間自動計算每個指針的旋轉量,(由于在公元0年的00:00:00時,指針被認為在角度為0度處)以及當呈現(xiàn)時使用的更新角度。每個新的動畫計算更新指針的角度位置,例如,每幀一次或以某個其它的速率。所有三個指針一起啟動并且如果,例如,某個事件(在以上示例代碼中未示出)停止時鐘,所有三個指針一起停止。
可以被容易地理解的是,元素特性的動畫復雜性可以是重要的,如例如,多個SetterTimelines可以在單一故事板時間線下被分組,每個SetterTimeLines依次涉及不同的目標元素以及那些元素的特性。故事板可結合;例如,一故事板可把轉換與元素關聯(lián)并且另一個故事板可對該轉換設定值,(雖然代碼內的排序需要正確以使轉換在設定值之前存在)。盡管如此,故事板的使用使作者能直接設計理想的元素、特性和動畫行為。
圖6是這種代碼可如何被安排的一般表現(xiàn),該表現(xiàn)結合具有故事板組(例如,故事板1-故事板n)的圖層,組中的每個故事板(例如,故事板1)包括具有可能多個SetterTimelines(例如,SetterTimelin1-SetterTimelinm)(或以下描述的,具有諸如結合特性的ParalleTimeline的等效元素樹聯(lián)合機制)的時間線。圖層也可包括也在以下描述的事件觸發(fā)器信息,以及有關與故事板關聯(lián)的元素和資源(作為目標具有動畫的特性的目標)的信息(諸如式樣和文件標識符)。
可以被容易地理解的是,各種實現(xiàn)本發(fā)明各個方面的選擇性方式是可行的。例如,不使用SetterTimeline,一可選擇的聯(lián)合機制通過附加的特性在故事板類上指定類似聯(lián)合信息。注意的是該方法促進媒體和故事板的結合。對于該選擇性方法的示例XAML如以下所示
注意的是在以上的例子中,存在用于將某個媒體文件(my.wmv)與故事板關聯(lián)的MediaTimeline,以及在其中設定故事板特性的ParallelTimeline(具有一些用于簡明的省略號)。注意的是“ParallelTimeline”實際上是先前理解的故事板時間線,使用不同的名稱以將其從其它類型的時間線中區(qū)分,包括MediaTimeline(以上描述的)以及SequentialTimeLine(以下描述)。然而,ParallelTimeline也通過故事板特性的使用,例如,Storyboard.Property、Storyboard.Value以及Storyboard.Target(而不是SetterTimeline的TargetID、PropertyPath以及Value),消除對于SetterTimeline的需要,雖然故事板特性的使用使附加的特性變長并且不很容易被發(fā)現(xiàn)。一般地,故事板特性可被附加于任何時間線,只要對于每個故事板,存在某個目標特性(例如,TargetID),其它故事板特性在與TargetID相同的時間線上,并且沒有嵌套的Targets(目標)。注意的是如果沒有TargetID被指定,可以假設目標是操辦故事板的元素,例如,在先前例子中的圖層。對于媒體而言,MediaTimelines不指定Storyboard.Property或Storyboard.Value。
以下的表格表述示例性的Storyboard(故事板)類以及它的對象特性和方法
其它用于把元素樹與故事板的時間線樹關聯(lián)的可供選擇的方式在以下的XAML示例中示出
注意的是在以上的選擇性方式中,MediaTimeline不是SetterTimeline的子類,但應該是時間線樹的一部分,而不是時間線上的值。如此,這個方法一般是較不理想的句法。
注意以上的選擇性方式添加另一個類,MediaSetterLine。
以上的選擇性方式遵循動畫模式,但由于值和子類要成為同一特性的值而會產生混淆,并且還由于其允許MediaTimeline在寬度上放置。
盡管有多個可能的可供選擇的方式,為了解釋,在此其它的示例一般將通過使用SetterTiemline被描述。
在一實現(xiàn)中,故事板可以是在FrameworkElement上的時間線集合特性;當?shù)谝淮螒玫皆貢r,時間線集合被例示至元素上的時鐘。在Storyboards(故事板)特性內的值是時間線實例,例如,具有每個是SetterTimeline(在一實現(xiàn)內用以設定特性的基值)等的時間線層級的葉子的IList<Timeline>,或在該實現(xiàn)中具有SetterTimeline下的動畫的動畫實例(用以修改基值)。SetterTimeline是一時間線,并且可具有子類,然而在一實現(xiàn)中SetterTimeline唯一合法的子類是Animation(動畫)。
注意的是Storyboards(故事板)特性不是依賴特性。在故事板特性中的時間線實例的每個實例潛在地表現(xiàn)分層結構。這些時間線分層結構被例示至TimelineClcok分層結構,并且內部地存儲在主FrameworkElement上。然后這些單獨的時鐘實例可通過使用采用Timeline作為輸入(需要是來自故事板的時間線中的一個)的FindStoryboardClock API被獲取,并且使用其以尋找關聯(lián)的時鐘。
在當前的實現(xiàn)中,當ISupportInitialize.EndInit在主框架元素上被調用時,故事板被處理。一旦故事板已經被處理,F(xiàn)rameworkElement.Storyboards可被設定成只讀以幫助反映“更改不被處理”的事實。
如以上描述的,SetterTimeline是用于指定特性的時間線,該特性可以隱含地指向主FrameworkElement或如果特定的,指向目標FrameworkElement,以及任意的值。如果特定的,TargetID是在主FrameworkElement的派生內的FrameworkElement ID的引用。在SetterTimeline上的Path(在此與PropertyPath同義)特性描述哪個特性正經由故事板被動畫制作,并且被請求。
SetterTimeline的Value特性也可以是任意的。如果特定的,它指示當Timeline活動時,特性應該采用的基值。當沒有動畫或當動畫需要暗示的值時,使用該基值。基值可相符地來自本地值(直接在元素上設定)、繼承、式樣等的值相等。例如,以下動畫制作了從值10至20的特性
注意的是如果以上的LengthAnimation指定From和To值,那么基值(SetterTimeline.Value)可以被忽略。
在一實現(xiàn)中,目標需要在與Storyboards特性的主FrameworkElement相同的樹中成為FrameworkElement的引用。PropertyPath的第一組件需要成為依賴特性支持的特性。例如,由于Window.WindowAutoLocation不是依賴特性,所以它不是故事板可實現(xiàn)的。
特性可以是在索引的集合內的項。在SetterTimeline上的PropertyPath(或Path)屬性可使用附加的特性在括號中包括的特殊情況“記錄”至對象中。例如,如果“畫筆”是Brush,以下的特性路徑在線性梯度畫筆的停止的顏色上訪問阿爾法brush.Stops[1].Color.A而以下的路徑訪問在元素上附加的特性的駁接button.(DockPanel.Dock)注意的是以上的特性路徑是在附加的特性句法內,但實際上不是附加的特性。而是,BackgroundProperty在Button本身上使用按鈕上的通用語言運行時間特性存取程序被定義,而不是使用具有靜態(tài)Set/Get方法存取程序的傳統(tǒng)附加的特性。這個是必要的,由于在編譯期間,TargetID不能被解析為特定類型,所以不能知道“Background″特性解析哪個類。
PropertyPath如以下定義
以下描述復雜特性路徑,也就是那些具有一個以上特定組件的路徑。
根據本發(fā)明的一個方面,除了將定時樹和元素樹整合外,故事板允許特性觸發(fā)器和事件觸發(fā)器的使用以控制它們的操作(例如,開始、暫停、尋找和停止動作)。一般地,特性觸發(fā)器對應于諸如真或假的某個狀態(tài)/值而事件啟動(以及如此不具有假值)。例如,當鼠標在元素上方盤旋時,特性觸發(fā)器可具有真值。當鼠標不在元素上方盤旋時,具有假值。每個真或假狀態(tài)可被用以在一故事板內(或多個故事板內)分離地開始、停止、暫停、和/或尋找。諸如鼠標點擊元素的事件啟動并且不具有可變的狀態(tài),但是同樣地可控制故事板的操作。通過這種方式,動畫通過與顯示的元素樹表現(xiàn)的用戶交互作用是可控制的。
觸發(fā)器是在FrameworkElement上的集合特性。觸發(fā)器可指定包括SetAction和TimelineAction的動作。SetAction指定特性的值。TimelineAction在Storyboards特性內操作時間線。
作為例子,以下給按鈕在鼠標浮過的特定背景
TriggerAction和SetAction被定義為
注意SetAction遵循SetterTimeline的模式,但SetAction不是Timeline(時間線)。
TimelineAction是抽象類,具有用于在TimelineClock上每個動詞方法的子類
TimelineAction的TargetID是字符串,字符串在當前范圍內被解析并且解析成時間線。
如以上描述的,除了特性觸發(fā)器之外還存在事件觸發(fā)器,其中事件觸發(fā)器采用當該事件在主元素上啟動時導致動作發(fā)生的事件作為它的源。注意的是,不象特性觸發(fā)器,事件觸發(fā)器是沒有范圍的;它執(zhí)行一操作然后該操作確定它自己的生存期。例如,一事件可開始時間線,并且該時間線可運行直到它的持續(xù)時間結束,或直到另一事件觸發(fā)器等停止它。
以下一般地描述一觸發(fā)器
結合關聯(lián)的時間線使用事件觸發(fā)器,以下示例代碼示出了被“on(開)”和“off(關)”按鈕操作的時間線受控內容
注意以上代碼使用順序的時間線而不是獨立時間線。順序時間線有它被順序觸發(fā)的子時間線,例如,某個對應于“bar”(未示出)的故事板在“foo″結束之后被觸發(fā)并且不是在任何程序指定的時間數(shù)據上。
除了事件觸發(fā)器以外,特性進入\退出觸發(fā)器也被用在觸發(fā)時間線內,如一般在以下示例中顯示的
根據本發(fā)明的另一方面,故事板和觸發(fā)器可被式樣化的(雖然不完全象依賴特性,由于Storyboard本身不是依賴特性)。換句話說,如以上描述的,Style(式樣)允許作者把表現(xiàn)一個或多個特性的數(shù)據分在一起,然后可作為一組應用到元素的相應的特性;這些Style內的特性可被動畫制作和/或與觸發(fā)器對應。例如,應用以下的Style可式樣化在頁面上的按鈕以在紅色和藍色之間順序地閃爍
如被理解的,使用控制來自包括觸發(fā)器、時間線、故事板、在標記內本體設定的值以及其它的不同機制的元素特性值的能力,特性值之間的沖突解析需要被處理以確定應該是什么特性值。例如,設置為Storyboards特性一部分的值覆蓋在元素上本地設置的值。如此,存在于特定FrameworkElement上特性值的優(yōu)先,使用Triggers(觸發(fā)器)特性開始的作為最高優(yōu)先權。注意的是如果多個觸發(fā)器嘗試設定相同的特性,應用“最后寫入者贏”的規(guī)則,例如,在標記的情況下,在標記內最后發(fā)生的觸發(fā)器讓它的值被應用。
Storyboards(故事板)特性有下一個最高優(yōu)先權,如果多個故事板設置者嘗試設置相同的特性,則再次利用“最后寫入者贏”的解決方案。最后寫入者通過使用時間線樹的深度優(yōu)先途徑被解釋。
在元素上本地設置的值是下一個,(例如,F(xiàn)raneworkElement.SetValue)。式樣一般使用在式樣內相同的優(yōu)先次序跟隨下一個,就是說,Style(式樣)觸發(fā)器(如果在相同的層次處有沖突,則再次利用“最后寫入者贏”,接著Style Storyboards(式樣故事板),接著Style(式樣)目標類型值。
參考復雜特性路徑的解釋,設置者不僅僅修改在目標上的特性,而且在某些情況下修改在目標的子特性中的一個是可能的。一般地,復雜特性通過首先建立特性值對于元素而言是什么,然后記錄至該特性用以動畫來加以處理。例如,以下的代碼示例了一紅色矩形,該矩形通過動畫制作暗度來反復地和逐漸地淡入和淡出
在一個實現(xiàn)中,特性的第一組件被要求是依賴特性(例如,在以上示例中正被填充的Background(背景))。由于復制副本以使復制的副本可被修改的需要,該依賴特性的類型也被要求是可變的;(選擇性方式包括深度復制解決方案,或保留其為模板)。注意的是由于式樣和故事板/觸發(fā)器依然根本上是基于依賴特性,該方案是可行的。如果任何涉及Button.Background的事物更改,整個背景值被重新計算。
如此,在以上的例子中,首先做出純色畫筆的副本并且存儲在矩形實例中。內部地,由于當觸發(fā)器不活動時值需要被保存,本地值實際上沒有被替換。其次,觸發(fā)器在該副本上執(zhí)行,如重放腳本。
如此,特性無效算法在兩個傳遞中發(fā)生,即觸發(fā)特性無效的第一傳遞,正如沒有復雜特性路徑存在,以及在其內觸發(fā)器使用復雜特性路徑(也就是說,在其內使用點)僅僅使基本依賴特性無效的第二傳遞。
為了動畫制作,特性值計算算法使用標準搜索算法尋找基本特性值,而忽略任何在其上具有復雜特性路徑的任何值。其次,算法使用復雜特性路徑尋找可應用的觸發(fā)器和設置者,并且把它們應用于來自上述的基值。這個可需要做出可變性的副本,該副本的做出可通過無論何時,只要可能的共享值被優(yōu)化;副本僅僅在必要時做出。
使用復雜特性路徑需要在特性重建中維持一致的時鐘。例如,以下的標記代碼顯示獲得來自故事板的線性梯度畫筆背景的按鈕,在此第一停止由一特性觸發(fā)器修改(當鼠標在按鈕上方時),以及第二停止由第二觸發(fā)器修改(當按鈕被按下時)
在該例子中,在第一分鐘期間,按鈕的背景是線性梯度的,從紅色至綠色。當鼠標在按鈕上方時,畫筆更改為從粉紅色至綠色的線性梯度。當鼠標按鈕被按下時,顏色線性地從粉紅色變?yōu)榈G色,直到當鼠標按鈕被釋放時,在那個時候背景更改回從粉紅色至綠色的線性梯度畫筆。當鼠標離開按鈕時,背景返回紅色至綠色的線性梯度。注意的是在SetAction對象中具有復雜特性路徑是可行的。
適應該情況的第一步是當式樣被應用時(也就是說,在OnStyleInvalidated期間),在式樣化的父元素上存儲時鐘。這個允許當特性被重建時,相同的時鐘被重用。第二步是忽略特性路徑錯誤;也就是,在第一分鐘后,當時間線不活動時,按鈕不再具有線性梯度畫筆。在該點,修改停止的觸發(fā)器不再有意義,并且(與數(shù)據綁定一致)被沉默地忽略。
來自Storyboard(故事板)特性,每個Timeline(時間線)樹被例示至TimelineClock(時間線時鐘)樹,內部地存儲在操辦Storyborads(故事板)的相同F(xiàn)rameworkElement上。對于每個設置者和動畫時鐘,指向的元素也被給予對于時鐘的引用。對于每個設置者時鐘,指向的元素聽時鐘上的活動/不活動事件,其中的每個事件觸發(fā)特性的無效。對于每個動畫時鐘,時鐘被合并至用于特性的目標元素的動畫時鐘表內。
圖7提供當故事板在元素上被設定和處理時,步驟和數(shù)據結構更新的例子。一般地,圖7顯示了用于以下簡化SetterTimeline例子的對象和引用
最初,一個或多個Timeline(時間線)實例被添加至DockPanel的Storyboards(故事板)特性中,例如,通過調用DockPanel.Storyboards.Add(new SetterTimeline(...))。
當DockPanel的ISupportInitialize.EndInit被調用時,故事板(例如,相應于圖7中DockPanel702的SetterTimeline700)被處理以使在Storyboards(故事板)中的每個時間線都通過TimelineClock.CreateFromTimeline被示例至時鐘(例如,圖7中標識為704),并且私密地存儲在FrameworkElement(例如,圖7鐘的矩形706)上。
每個設置者的目標被給予對于與影響的依賴特性關聯(lián)的時鐘的引用。目標也在諸如(已開始和已結束)的時鐘邊界事件上設置收聽者。在設置者下的任何動畫被添加至目標的動畫表(通過FrameworkElement.GetAnimationClocks)。
當式樣在FrameworkElement(每個FrameworkElement)上設置時,時鐘從在Style.Storyboards集合中的Timeline分層中被例示。對于指向式樣化父類的設置者,F(xiàn)rameworkElement維持對時鐘的引用(與關聯(lián)的依賴特性聯(lián)系),并且式樣化的父類在時鐘的已開始/已結束事件上設置收聽者。對于指向在Style.VisualTree內元素的設置者,當FrameworkElement例示元素時,類似的引用/收聽者被設置。
注意的是當時間線被處理時,具有單簡單特性路徑(單組件)的設置者時間線從具有復雜路徑的設置者時間線中分離。這個允許如以上描述的,對于特性值的雙通道尋找。
結論如從以上詳細的描述中可看出,提供了以故事板的形式的機制,其中其優(yōu)勢是消除作者在不同時間線上手動同步各種在動畫期間發(fā)生的操作(例如,開始和停止時間或對事件的響應)需要。此外,通過使用式樣化系統(tǒng),故事板的可用性消除必須被個別地應用于每個動畫或媒體元素的定時信息的需要。
盡管本發(fā)明允許各種修改和可供選擇的構造,其中某些示例的實施例在附圖中顯示并在以上被具體描述。然而,可以理解的是,沒有限制本發(fā)明于公開的特定形式的意圖,而相反,是為了涵蓋在本發(fā)明的精神和范圍內的所有的修改、可供選擇的結構以及同等物。
在此引用的每個專利申請被轉讓給本發(fā)明的受讓人,并在此并入作為引用。
權利要求
1.在一計算環(huán)境內,一方法包括處理指令,所述指令把定時數(shù)據組和一元素的特性以及另一元素的特性關聯(lián);以及基于所述定時數(shù)據組來更改對應于這些特性的值的數(shù)據以使元素的表現(xiàn)隨著時間的推移更改。
2.如權利要求1所述的方法,其特征在于,其中處理指令包括分析可擴展應用標記語言。
3.如權利要求1所述的方法,其特征在于,其中處理指令包括從與元素關聯(lián)的式樣中獲取定時數(shù)據。
4.如權利要求1所述的方法,其特征在于,其中元素在元素樹內,并且進一步包括遍歷元素樹以提供呈現(xiàn)指令。
5.如權利要求1所述的方法,其特征在于,其中更改數(shù)據包括例示維持時間線信息的時鐘對象。
6.如權利要求1所述的方法,其特征在于,其中更改數(shù)據包括響應于觸發(fā)器來開始對應于定時數(shù)據的故事板。
7.如權利要求6所述的方法,其特征在于,其中觸發(fā)器相應于特性觸發(fā)器,以及其中開始故事板包括估計特性觸發(fā)器的狀態(tài)。
8.如權利要求6所述的方法,其特征在于,其中觸發(fā)器相應于事件觸發(fā)器,以及其中開始故事板包括檢測事件觸發(fā)器啟動的事件。
9.如權利要求6所述的方法,其特征在于,其中觸發(fā)器相應于進入/退出觸發(fā)器以及其中開始故事板包括對于一進入事件估計特性觸發(fā)器的狀態(tài)。
10.如權利要求1所述的方法,其特征在于,其中更改數(shù)據包括在目標元素的復雜特性路徑內修改子特性。
11.如權利要求10所述的方法,其特征在于,其中修改子特性包括建立對于目標元素的特性值,以及然后修改子特性值。
12.如權利要求1所述的方法,其特征在于,其中更改數(shù)據包括建立特性值。
13.如權利要求1所述的方法,其特征在于,其中建立特性值包括基于沖突解析次序搜索值。
14.如權利要求1所述的方法,其特征在于,其中更改相應于值的數(shù)據包括確定要更改的元素的特性,以及從中更改特性的基值。
15.至少一個計算機可讀介質具有計算機可執(zhí)行指令,當所述指令被執(zhí)行時,它們執(zhí)行權利要求1所述的方法。
16.在一計算環(huán)境內,一系統(tǒng)包括包括故事板的數(shù)據結構,所述故事板包括關聯(lián)機制,所述機制把定時信息與元素的特性關聯(lián);處理組件,所述處理組件處理數(shù)據結構至元素樹以及與元素相關的定時數(shù)據;以及呈現(xiàn)機制,所述呈現(xiàn)機制提供輸出數(shù)據至相應顯示的圖形子系統(tǒng),呈現(xiàn)機制基于定時數(shù)據更改樹中的元素的至少一個元素特性的值以使元素的顯示的表現(xiàn)隨著時間的推移更改。
17.如權利要求16所述的系統(tǒng),其特征在于,其中關聯(lián)機制包括設置者時間線。
18.如權利要求16所述的系統(tǒng),其特征在于,其中關聯(lián)機制包括故事板對象特性。
19.如權利要求16所述的系統(tǒng),其特征在于,其中處理組件包括可擴展性應用標記語言分析器。
20.如權利要求16所述的系統(tǒng),其特征在于,其中處理組件通過從與元素關聯(lián)的式樣中獲取定時數(shù)據來處理數(shù)據結構。
21.如權利要求16所述的系統(tǒng),其特征在于,其中呈現(xiàn)機制通過例示維持時間線信息的時鐘對象更改數(shù)據。
22.如權利要求16所述的系統(tǒng),其特征在于,進一步包括用于響應于觸發(fā)器來開始對應于定時數(shù)據的故事板的方式。
23.如權利要求22所述的系統(tǒng),其特征在于,其中觸發(fā)器相應于特性觸發(fā)器。
24.如權利要求22所述的系統(tǒng),其特征在于,其中觸發(fā)器相應于事件觸發(fā)器。
25.如權利要求22所述的系統(tǒng),其特征在于,其中觸發(fā)器相應于進入/退出觸發(fā)器。
26.在一計算環(huán)境內,一系統(tǒng)包括相應于要呈現(xiàn)的數(shù)據的元素樹;一個或多個時間線的集合,每個時間線相應于可被應用至元素樹內的元素、子樹或其它對象的動畫模板以及可被獨立地開始的動畫模板;以及動畫機制,所述動畫機制基于時間線的集合來更改相應于元素樹內的元素、子樹或其它對象的特性值的數(shù)據以使元素樹的表現(xiàn)隨著時間的推移更改。
27.如權利要求26所述的系統(tǒng),其特征在于,其中一個或多個時間線的集合通過標記語言指定。
28.如權利要求26所述的系統(tǒng),其特征在于,其中動畫機制開始時間線以隨著時間的推移更改數(shù)據。
29.如權利要求28所述的系統(tǒng),其特征在于,其中動畫機制基于特性觸發(fā)器的狀態(tài)開始時間線。
30.如權利要求28所述的系統(tǒng),其特征在于,其中動畫機制基于進入觸發(fā)器的狀態(tài)開始時間線。
31.如權利要求28所述的方法,其特征在于,其中動畫機制基于事件開始時間線。
32.如權利要求28所述的系統(tǒng),其特征在于,其中動畫機制基于另一時間線的完成開始時間線。
33.如權利要求28所述的系統(tǒng),其特征在于,其中動畫機制在目標元素的復雜特性路徑內修改子特性以更改數(shù)據。
34.如權利要求33所述的系統(tǒng),其特征在于,其中動畫機制在建立用于目標元素的特性值后修改子特性。
35.如權利要求26所述的系統(tǒng),其特征在于,其中時間線通過關聯(lián)機制被應用至元素、子樹或其它對象。
36.如權利要求35所述的系統(tǒng),其特征在于,其中關聯(lián)機制包括設置者時間線。
37.如權利要求35所述的系統(tǒng),其特征在于,其中關聯(lián)機制包括故事板特性。
全文摘要
描述的是一種故事板對象可用以協(xié)調多個在計算機圖形顯示器上顯示的元素和/或媒體的動畫的方法和系統(tǒng)。故事板把元素樹內元素的特性與時間線關聯(lián)以使與故事板關聯(lián)的特性通過開始、停止、尋找或暫停故事板作為組被一起動畫制作/播放。諸如由與顯示的信息的用戶互動控制的,并包括響應于狀態(tài)更改以更改值的特性觸發(fā)器,和啟動事件的事件觸發(fā)器的觸發(fā)器可導致故事板開始、停止、暫停和尋找。故事板可通過基于XAML的程序被使用,并且可直接與元素關聯(lián),或通過式樣間接地與元素關聯(lián)。復雜特性和可變性是被支持的。媒體重放可通過故事板控制,從而與其它媒體重放和/或動畫協(xié)調。
文檔編號G06F17/30GK1776672SQ20051011611
公開日2006年5月24日 申請日期2005年10月18日 優(yōu)先權日2004年11月18日
發(fā)明者E·K·納爾遜, G·D·謝克特, L·E·布蘭科, M·W·卡爾金斯, M·J·希爾伯格, N·古普塔, S·蘇布拉馬尼亞恩, K·雅各布, K·L·揚, P·馬倫 申請人:微軟公司