(57)【要約】  リッチなメディア（例えば、ＵＩのビジュアルエレメントのアニメーション）間の滑らかな遷移が、第１のアニメーションが既に実行されているビジュアルエレメントのプロパティに関して第２のアニメーションが開始されるとき達成される。「第２の（ｓｅｃｏｎｄ）」アニメーションが開始されるとき、アニメーションシステムは、「第１の（ｆｉｒｓｔ）」アニメーションの実行に起因するプロパティの現在値（すなわち、スナップショット）を格納させ、第１のアニメーションを終端あるいは解除させ、その後、第２のアニメーションが、このスナップショットを、そのプロパティの「フロム（ｆｒｏｍ）」値として用いて実行するようにさせる。第２のアニメーションは、第１のアニメーションが終端したポイントとちょうど同一のポイントから「開始（ｂｅｇｉｎ）」するために、第１と第２のアニメーションの間の遷移は滑らかになる。アニメーションがトリガされたプロパティに対するアニメーション記憶オブジェクトが、そのプロパティの基準値およびスナップショットをアニメートされている間に格納するために生成される。
2009501388.tif 000002
【特許請求の範囲】
【請求項１】
第１のアニメーションと第２のアニメーションとの間で遷移させるためのコンピュータにて実現される方法であって、
前記第１のアニメーションが実行している間に前記第２のアニメーションに対するトリガを検出するステップであって、前記第１および前記第２のアニメーションはビジュアルオブジェクトのプロパティと関連するステップと、
前記第１のアニメーションを実行することに起因する前記プロパティの値を格納するステップと、
前記第２のアニメーションが、前記プロパティの前記格納された値を前記第２のアニメーションを実行する際の「フロム」値として使用するようにさせるステップと、を含む方法。
【請求項２】
更に、前記プロパティに対するアニメーション記憶オブジェクトを割り当てるステップを含み、前記アニメーション記憶オブジェクトは前記第１および第２のアニメーションの実行に起因する前記プロパティの値を格納する、ことを特徴とする請求項１に記載の方法。
【請求項３】
更に、前記第２のアニメーションが開始されたときに前記第１のアニメーションを解除するステップを含む、ことを特徴とする請求項１記載の方法。
【請求項４】
更に、前記第１のアニメーションが、前記第２のアニメーションが実行している間に、前記プロパティの値に影響を及ぼすことなく実行するのを許すステップを含む、ことを特徴とする請求項１記載の方法。
【請求項５】
更に、前記第１のアニメーションの実行を、前記第２のアニメーションが実行している間は休止させるステップを含む、ことを特徴とする請求項１に記載の方法。
【請求項６】
あるプロパティに対するアニメーションは論理的に複数の層に編成され、ある層は、その層内の全てのアニメーションが退去したとき選択的に除去できる、ことを特徴とする請求項１に記載の方法。
【請求項７】
更に、前記第２のアニメーションが実行している間に第３のアニメーションに対するトリガを検出するステップを含み、前記第１および第２のアニメーションは１つの層の部分であり、前記第３のアニメーションは別の層の部分であり、前記第２のアニメーションに起因する前記プロパティの値は前記第３のアニメーションに対する「フロム」値として用いられ、前記第３のアニメーションに起因する前記プロパティの値は前記ビジュアルオブジェクトをレンダリングするときの前記プロパティに対するレンダリング値として用いられる、ことを特徴とする請求項１に記載の方法。
【請求項８】
コンピュータにて実行されたとき、請求項１の方法を実現するインストラクションが格納されている１つまたは複数のコンピュータにて読み出し可能な媒体。
【請求項９】
第１のアニメーションおよび第２のアニメーションを処理するシステムであって、
表示されるべきビジュアルオブジェクトのプロパティに対する値を格納するプロパティシステムと、
前記ビジュアルオブジェクトを、表示装置を介して表示するために用いるデータを提供するグラフィックサブシステムと、
前記表示装置を介して表示されるとき、前記ビジュアルオブジェクトをアニメーティングするために用いられるビジュアルオブジェクトのプロパティの一連の値を計算するアニメーションシステムと、を含み、
前記アニメーションシステムは、前記第１のアニメーションが実行している間に前記第２のアニメーションに対するトリガを検出し、前記第１のアニメーションの実行に起因する前記プロパティの値を格納し、前記第２のアニメーションを、前記プロパティの前記格納された値を「フロム」値として使用して開始する、ことを特徴とするシステム。
【請求項１０】
前記アニメーションシステムは、前記プロパティに対するアニメーション記憶オブジェクトを割り当て、前記アニメーション記憶オブジェクトは、前記第１および第２のアニメーションの実行の結果としての前記プロパティの値を格納する、ことを特徴とする請求項９に記載のシステム。
【請求項１１】
前記アニメーションシステムは、前記第１のアニメーションを、前記第２のアニメーションが開始されたとき解除する、ことを特徴とする請求項９に記載のシステム。
【請求項１２】
前記アニメーションシステムは、前記第１のアニメーションが、前記第２のアニメーションが実行している間に、前記プロパティの値に影響を及ぼすことなく実行するのを許す、ことを特徴とする請求項９に記載のシステム。
【請求項１３】
前記アニメーションシステムは、前記第１のアニメーションの実行を、前記第２のアニメーションが実行している間は休止させる、ことを特徴とする請求項９に記載のシステム。
【請求項１４】
前記アニメーションシステムは、前記第１のアニメーションを実行する前に、前記プロパティに対する少なくとも１つの基準値を前記プロパティシステムから得る、ことを特徴とする請求項９記載のシステム。
【請求項１５】
前記アニメーションシステムは、前記第２のアニメーションが実行している間に第３のアニメーションに対するトリガを検出し、前記第１および第２のアニメーションは１つの層の部分であり、前記第３のアニメーションは別の層の部分であり、前記第２のアニメーションに起因する前記プロパティの値は前記第３のアニメーションに対する「フロム」値として用いられ、前記第３のアニメーションに起因する前記プロパティの値は前記ビジュアルオブジェクトをレンダリングするための前記プロパティに対するレンダリング値として用いられる、ことを特徴とする請求項９記載のシステム。
【請求項１６】
コンピュータにて実行されたとき、請求項９のシステムを実現するインストラクションが格納されている１つあるいは複数のコンピュータにて読み出し可能な媒体。
【請求項１７】
ビジュアルエレメントをアニメーティングするためのコンピュータにて実現される方法であって、
あるビジュアルエレメントに対してセットのトリガ可能なアニメーションを定義するステップを含み、前記セットは、１つあるいは複数のトリガ可能なアニメーションの第１のサブセットおよびトリガ可能なアニメーションの１つあるいは複数の他のサブセットを含み、前記第１のサブセットのトリガ可能なアニメーションの各々は、イベントトリガあるいはプロパティトリガのいずれかにてトリガ可能であり、前記１つあるいは複数の他のサブセットのトリガ可能なアニメーションの各々は、プロパティトリガにてトリガ可能であり、１つのサブセットのアニメーションからもう１つのサブセットのアニメーションへと遷移するために合成ハンドオフ挙動が用いられる、ことを特徴とする方法。
【請求項１８】
前記セットのサブセットの１つの第２のアニメーションは、開始されたとき、選択的に、そのサブセットの第１のアニメーションによる影響を受けたプロパティ値のスナップショットを得るようにされ、前記第１のアニメーションは、前記第２のアニメーションが開始されても引き続いて実行する、ことを特徴とする請求項１７に記載の方法。
【請求項１９】
前記第１のアニメーションは、前記第２のアニメーションが開始されたとき解除される、ことを特徴とする請求項１８に記載の方法。
【請求項２０】
コンピュータにて実行されたとき、請求項１７の方法を実現するインストラクションが格納されている１つあるいは複数のコンピュータにて読み出し可能な媒体。
【発明の詳細な説明】
【背景技術】
【０００１】
幾つかのインタラクティブなシステムにおいては、ユーザインタラクションに応答して、「アニメーティング（ａｎｉｍａｔｉｎｇ）」することで応じるビジュアルエレメントが実現される。例えば、ユーザインタフェース（ＵＩ）内に表示されるボタンは、ユーザがカーソルをそのボタン上に置いたとき、拡大、縮小あるいは回転などするように実現することができる。幾つかの状況においては、単一のビジュアルエレメント上で複数のアニメーションを遂行することが望ましい。幾つかのシステムにおいては、ビジュアルエレメントのディスプレイは、ビジュアルエレメントの現在実行しているアニメーションがもう１つのアニメーションへと遷移するとき、「グリッチ（ｇｌｉｔｃｈ）」するように見えることがあり、これは幾つかのシナリオにおいては望ましくない。この発明の背景情報はここで請求される主題事項にて解決されるべき課題を特定することを意図するものではない。
【発明の開示】
【発明が解決しようとする課題】
【０００２】
この要約は、以下の詳細な説明のセクションにおいて詳しく説明される概念の抜粋（ｓｅｌｅｃｔｉｏｎ  ｏｆ  ｃｏｎｃｅｐｔｓ）の紹介を簡潔な形式にて提供することを意図する。この要約はここで請求される主題事項の最重要の特徴あるいは必須の特徴を特定することを意図するものでも、ここで請求される主題事項の範囲を決定するための助けとして用いられることを意図するものでもない。
【０００３】
様々な開示される実施例の形態によると、リッチなメディア（例えば、ＵＩのビジュアルエレメントのアニメーション）間の滑らかな遷移を可能にするための実現が提供される。１つの形態においては、それに対してもう１つのアニメーションが既に実行されているビジュアルエレメントのプロパティに関してアニメーションが開始されるとき、この「第２の」アニメーションは、「第１の」アニメーションの実行からの結果としてのプロパティの現在値（すなわち、スナップショット）を格納し、第１のアニメーションを解除し、その後、第２のアニメーションを、このスナップショットを、そのプロパティの「フロム（ｆｒｏｍ）」値として用いて実行するように構成される。このハンドオフ挙動は、「スナップショットと置換」挙動と呼ばれる。第２のアニメーションは、第１のアニメーションが終端したポイントとちょうど同一のポイントから「開始」するために、第１と第２のアニメーションの間の遷移は滑らかになる。
【０００４】
もう１つの形態においては、アニメーションがトリガされたプロパティに対してアニメーション記憶オブジェクトが生成される。このアニメーション記憶オブジェクトは、そのアニメーションにてターゲットとされるプロパティの１つあるいは複数の基準値を格納し、加えて、最初のアニメーションがまだ実行している間にもう１つのアニメーションがトリガされたとき、そのプロパティの任意のスナップショットを格納する。
【０００５】
さらにもう１つの形態においては、複数の層のアニメーションが１つのプロパティに適用され、層間の遷移は合成ハンドオフ挙動を有する。幾つかの実現においては、１つの層内の複数のアニメーション間の遷移は、合成あるいは「スナップショットと置換」挙動を有する。他の実施例においては、複数の層間のアニメーション間の遷移は、合成あるいは「スナップショットと置換」挙動を有する。
【０００６】
実施例は、コンピュータプロセスとしても、（移動携帯コンピューティングデバイスを含む）コンピュータシステムとしても、あるいは製品、例えば、コンピュータプログラム製品としても実現することができる。コンピュータプログラム製品は、コンピュータシステムによって読み出し可能な、コンピュータプロセスを実行するためのインストラクションのコンピュータプログラムを符号化するコンピュータ格納媒体であっても良い。コンピュータプログラム製品は更にコンピューティングシステムにて読み出し可能な搬送波に載せて伝搬される、コンピュータプロセスを実行するためのインストラクションのコンピュータプログラムを符号化する信号であっても良い。
【０００７】
以下では制限することも全てを網羅することも意図しない実施例が図面を参照しながら説明されるが、これらの様々な図を通じて、特に断りがない限り、類似する参照番号は類似するパーツを指す。
【発明を実施するための最良の形態】
【０００８】
以下では様々な実施例が、この文書の一部を形成し、本発明を実施するための特定の典型的な実施例を示す添付の図面との関連でより詳細に説明される。しかし、実施例は多くの異なる形態にて実現することができ、ここに示される実施例に制限されるものと解されるべきではなく、むしろこれら実施例はこの開示が詳細かつ完全なものとなり、本発明の範囲を当業者に完全に伝えることができるように提供されているものである。実施例は、方法、システムあるいはデバイスとして実施することができる。従って、実施例はハードウェア実現の形態を取ることも、完全なソフトウェア実現の形態を取ることも、あるいはソフトウェアとハードウェアの態様が結合された実現の形態を取ることもできる。以下の詳細な説明は、従って、制限的な意味に取られるべきではない。
【０００９】
様々な実施例の論理動作は（１）コンピューティングシステム上でランするコンピュータにて実現されるステップのシーケンスとして、および／または（２）コンピューティングシステム内の相互接続されたマシーンモジュールとして実現される。実現はその実施例を実現するコンピューティングシステムの性能要件によって決まる選択の問題である。従って、ここで説明される実施例を構成する論理動作は、動作、ステップ、あるいはモジュールとも呼ばれる。
【００１０】
例示的オペレーティング環境
図１はアニメーション間の滑らかな遷移が実現される適当なコンピューティングシステム環境１００の一例を示す。コンピューティングシステム環境１００は、適当なコンピューティング環境の単に一例であり、本発明の用途あるいは機能の範囲の限界を示唆することを意図するものではない。更に、このコンピューティング環境１００は、この例示的オペレーティング環境１００内に示されるコンポーネントの任意の１つあるいは組合せにどのように依存することもなく、あるいはこれらと関連するいかなる要件も有するものではないと解されるべきである。
【００１１】
本発明は無数の他の汎用あるいは専用のコンピューティングシステム環境あるいは構成と共に使用できる。本発明と共に使用するのに適する周知のコンピューティングシステム、環境、および／または構成の例には、これらに限られるものではないが、パーソナルコンピュータ、サーバコンピュータ、携帯用あるいはラップトップデバイス、タブレットデバイス、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、プログラマブル家庭用電化製品、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、上述の任意のシステムあるいはデバイスを含む分散コンピューティング環境その他が含まれる。
【００１２】
本発明は、コンピュータにて実行される、例えばプログラムモジュールの、コンピュータにて実行可能なインストラクションの全体的な文脈で説明することができる。一般に、プログラムモジュールは、ルーチーン、プログラム、オブジェクト、コンポーネント、データ構造その他を含み、これらは特定のタスクを遂行し、あるいは特定の抽象データタイプを実現する。本発明は、分散コンピューティング環境内において実施することもでき、この場合には、タスクは通信ネットワークを通じてリンクされた遠隔処理デバイスにて遂行される。分散コンピューティング環境においては、プログラムモジュールは、メモリ記憶装置を含む近くのコンピュータ記憶媒体内に置くことも遠隔の記憶媒体内に置くこともできる。
【００１３】
図１を参照し、本発明を実現するための例示的システムは汎用コンピューティングデバイスをコンピュータ１１０の形態にて含む。コンピュータ１１０のコンポーネントには、これに限られるものではないが、処理ユニット１２０、システムメモリ１３０、およびシステムメモリを含む様々なシステムコンポーネントを処理ユニット１２０に結合するシステムバス１２１を含む。システムバス１２１は、メモリバスもしくはメモリコントローラ、周辺バス、および多様なバスアーキテクチャのいずれかを使用するローカルバスを含む複数のタイプのバス構造のいずれであっても良い。一例として、これに限られるものではないが、このようなアーキテクチャには、Ｉｎｄｕｓｔｒｙ  Ｓｔａｎｄａｒｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ（ＩＳＡ）バス、Ｍｉｃｒｏ  Ｃｈａｎｎｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ（ＭＣＡ）バス、Ｅｎｈａｎｃｅｄ  ＩＳＡ（ＥＩＳＡ）バス、Ｖｉｄｅｏ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｓｔａｎｄａｒｄｓ  Ａｓｓｏｃｉａｔｉｏｎ（ＶＥＳＡ）ローカルバス、Ａｃｃｅｌｅｒａｔｅｄ  Ｇｒａｐｈｉｃｓ  Ｐｏｒｔ（ＡＧＰ）バス、およびＭｅｚｚａｎｉｎｅバスとしても知られているＰｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ（ＰＣＩ）バスが含まれる。
【００１４】
コンピュータ１１０は典型的には様々なコンピュータにて読み出し可能な様々な媒体を含む。コンピュータにて読み出し可能な媒体はコンピュータ１１０にてアクセスすることができる任意の適当な媒体であり得、これには、揮発性および不揮発性媒体の両方と、取り外し可能および取り外し不能な媒体の両方が含まれる。一例として、これに限られるものではないが、コンピュータにて読み出し可能な媒体はコンピュータ記憶媒体および通信メディアを含む。コンピュータ記憶媒体には、情報、例えば、コンピュータにて読み出し可能なインストラクション、データ構造、プログラムモジュール、あるいは他のデータを格納するための任意の方法あるいは技術にて実現される、揮発性および不揮発性媒体の両方と、取り外し可能および取り外し不能な媒体の両方が含まれる。コンピュータ記憶媒体には、これに限られるものではないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリあるいは他のメモリ技術、ＣＤ−ＲＯＭ、デジタルバーサタイルディスク（ＤＶＤ）あるいは他の光ディスクストレージ、磁気カセット、磁気テープ、磁気ディスクメモリもしくは他の磁気記憶装置、あるいは所望の情報を格納するために用いることができ、そしてコンピュータ１１０にてアクセスすることができる任意の他の媒体が含まれる。通信メディアは、典型的には、コンピュータにて読み出し可能なインストラクション、データ構造、プログラムモジュール、あるいは例えば搬送波などの変調されたデータ信号、あるいは他の伝送メカニズム内の他のデータを具現し、そして任意の情報伝送メディアを含む。「変調されたデータ信号（ｍｏｄｕｌａｔｅｄ  ｄａｔａ  ｓｉｇｎａｌ）」なる用語は、その１つあるいは複数の特性が、情報がその信号内に符号化されるように設定あるいは変化された信号を意味する。一例として、これに限られるものではないが、通信メディアには、有線メディア、例えば、有線ネットワークあるいは直接配線接続と、無線メディア、例えば、音響、ＲＦ、赤外および他の無線メディアが含まれる。上述の任意の組合せもコンピュータにて読み出し可能な媒体の範囲内に含まれるものと解されるべきである。
【００１５】
システムメモリ１３０は、コンピュータ記憶媒体を、揮発性および／または不揮発性メモリ、例えば、読み出し専用メモリ（ＲＯＭ）１３１およびランダムアクセスメモリ（ＲＡＭ）１３２の形態にて含む。コンピュータ１１０内の要素間で、例えば始動時において、情報を伝送することを助ける基本ルーチーンを含む基本入／出力システム１３３（ＢＩＯＳ）は、典型的にはＲＯＭ１３１内に格納される。ＲＡＭ１３２は、典型的には処理ユニット１２０によって直ちにアクセスすることができる、および／または現在操作されている、データおよび／またはプログラムモジュールを含む。一例として、これに限られるものではないが、図１は、オペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６、およびプログラムデータ１３７を含む。
【００１６】
コンピュータ１１０は、更に、他の取り外し可能／取り外し不能な、揮発性／不揮発性コンピュータ記憶媒体を含む。単に一例として、図１は、取り外し不能、不揮発性磁気媒体から読み出すあるいはこれに書き込むハードディスクドライブ１４１、取り外し可能、不揮発性磁気ディスク１５２から読み出すあるいはこれに書き込む磁気ディスクドライブ１５１、および取り外し可能、不揮発性光ディスク１５６、例えば、ＣＤ  ＲＯＭあるいは他の光学媒体から読み出すあるいはこれに書き込む光ディスクドライブ１５５を示す。この例示的オペレーティング環境内において用いることができる他の取り外し可能／取り外し不能な、揮発性／不揮発性コンピュータ記憶媒体には、これに限られるものではないが、磁気テープカセット、フラッシュメモリカード、デジタルバーサタイルディスク、デジタルビデオテープ、ソリッドステートＲＡＭ、ソリッドステートＲＯＭ、その他が含まれる。ハードディスクドライブ１４１は典型的にはシステムバス１２１に例えばインタフェース１４０のような取り外し不能なメモリインタフェースを通じて接続され、磁気ディスクドライブ１５１および光ディスクドライブ１５５は典型的にはシステムバス１２１に取り外し可能なメモリインタフェース、例えばインタフェース１５０にて接続される。
【００１７】
上で説明され、図１に示されるドライブおよびこれらの関連するコンピュータ記憶媒体は、コンピュータ１１０に対するコンピュータにて読み出し可能なインストラクション、データ構造、プログラムモジュールおよび他のデータが格納できるようにする。図１においては、例えば、ハードディスクドライブ１４１は、オペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６およびプログラムデータ１４７を格納するものとして示されている。これらコンポーネントは、オペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６、およびプログラムデータ１３７と、同一であっても、異なるものであっても良いことに注意する。オペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６、およびプログラムデータ１４７には、ここでは、少なくとも、これらは異なるコピーであることを示すために異なる番号が与えられている。ユーザは、コマンドおよび情報をコンピュータ１１０内に、入力デバイス、例えば、タブレット（電子デジタイザ）１６４、マイクロホン１６３、キーボード１６２、および一般に、マウス、トラックボールあるいはタッチパッドと呼ばれるポインティングデバイス１６１を通じて入力する。他の入力デバイス（図示ぜず）には、ジョイスティック、ゲームパッド、サテライトディッシュ、スキャナ、その他が含まれる。これらおよび他の入力デバイスは、しばしば、処理システム１２０に、システムバスに結合されたユーザ入力インタフェース１６０を通じて接続されるが、しかし、これらは、他のインタフェースおよびバス構造、例えば、パラレルポート、ゲームポートあるいはユニバーサルシリアルバス（ＵＳＢ）を用いて接続されても良い。モニタ１９１あるいは他のタイプの表示装置もシステムバス１２１にインタフェース、例えば、ビデオインタフェース１９０を介して接続される。モニタ１９１は、更に、デジタル化された入力、例えば、ハンドライティングをコンピュータシステム１１０内に、例えばタッチスクリーンインタフェース１９２などのインタフェースを介して手書きにて書き込むことができるタッチスクリーンパネル１９３、その他と一体化させることもできる。モニタおよび／またはタッチスクリーンパネルは、コンピューティングデバイス１１０を収容するハウジングに、例えばタブレットタイプのパーソナルコンピュータの場合のように物理的に結合することもでき、この場合は、タッチトーンスクリーンパネル１９３は、本質的には、タブレット１６４として機能することに注意する。加えて、コンピュータ、例えば、コンピューティングデバイス１１０は、他の周辺出力デバイス、例えば、スピーカ１９５およびプリンタ１９６を含むこともでき、これらは出力周辺インタフェース１９４、その他を通じて接続される。
【００１８】
コンピュータ１１０は、例えば遠隔コンピュータ１８０のような、１つあるいは複数の遠隔コンピュータへの論理的接続を使用するネットワーク化された環境内で動作することもできる。遠隔コンピュータ１８０は、パーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピアデバイスあるいは他の一般的なネットワークノードであっても良く、図１にはメモリ記憶装置１８１のみしか示されていないが、典型的には、コンピュータ１１０との関連で上述された多くのあるいは全ての要素を含む。図１に示される論理的接続はローカルエリアネットワーク（ＬＡＮ）１７１およびワイドエリアネットワーク（ＷＡＮ）１７３を含むが、更に他のネットワークを含んでも良い。このようなネットワーキング環境は、オフィス、企業レベルのコンピュータネットワーク、イントラネットおよびインターネットにおいては一般的である。
【００１９】
ＬＡＮネットワーキング環境内で使用されるときは、コンピュータ１１０はＬＡＮ１７１にネットワークインタフェース、すなわちアダプタ１７０を通じて接続される。ＷＡＮネットワーキング環境内で使用されるときは、コンピュータ１１０は、典型的には、例えばインターネットなどのＷＡＮ１７３を通じて通信を設定するためのモデム１７２あるいは他の手段を含む。モデム１７２は、これは内部であっても、外部であっても良いが、ユーザインタフェース１６０あるいは他の適当なメカニズムを介してシステムバス１２１に接続される。ネットワーク化された環境においては、コンピュータ１１０との関連で示されるプログラムモジュールあるいはこの一部は、遠隔メモリ記憶装置内に格納されても良い。一例として、これに限られるものではないが、図１においては遠隔アプリケーションプログラム１８５が記憶装置１８１上に常駐するように示される。ここに示されるネットワーク接続は例示であり、これらコンピュータ間に通信リンクを確立するための他の手段を用いることもできる。
【００２０】
例示的アーキテクチャ
１つの態様は一般にコンピュータシステム上に滑らかな、複雑なアニメーションおよび／またはメディアを提供することに向けられる。これを達成するために、図２に一般的に示されるように、メディア統合アーキテクチャ２００が提供される。アプリケーションプログラム、制御あるいは他の類似する上位プログラムコード（例えば、オペレーティングシステムコンポーネントのユーザインタフェース）２０２は、このメディア統合層アーキテクチャ２００に、セットのアプリケーションプログラミングインタフェース（ＡＰＩ）２０４、その他を介してアクセスすることで、グラフィカル情報にアクセスする（これを書き込むあるいは読み出す）。ここで説明される多くの例はこれらＡＰＩとインタフェースするアプリケーションプログラムについて言及するが、他の上位プログラムコードおよびコンポーネント（例えば、オペレーティングシステムのユーザインタフェース）も、ここで説明される下位コンポーネントとインタフェースする能力を有することに注意する。このため、このような上位プログラムコードについての言及は、アプリケーションプログラムと呼ばれようが、ユーザインタフェースその他と呼ばれようが同等とみなされるべきである。
【００２１】
１つの実現においては、メディア統合アーキテクチャ２００は、上位合成／アニメーションエンジン２０６、タイミング／アニメーションコンポーネント２０８、および下位合成／アニメーションエンジン２１０を含む。ここで用いられる「上位（ｈｉｇｈ−ｌｅｖｅｌ）」および「下位（ｌｏｗ−ｌｅｖｅｌ）」なる用語は、他のコンピューティングシナリオにおいて用いられるそれらと類似し、一般に、あるソフトウェアコンポーネントは、より上位のコンポーネントに対して、より下位であるほど、そのコンポーネントはハードウェアに近くなる。こうして、例えば、上位合成／アニメーションエンジン２０６から送られたグラフィック情報は、下位合成／アニメーションエンジン２１０の所で受信され、ここでこの情報は、グラフィックデータをこのハードウェアを含むグラフィックサブシステムに送るために用いられる。
【００２２】
一般に、上位合成／アニメーションエンジン（ここでは上位コンポジッタ／アニメータあるいは上位エンジンもしくはコンポーネントとも呼ばれる）２０６は、アプリケーションプログラム２０２によって提供されたグラフィックシーンを表現するディスプレイエレメントツリーを構築し、他方、タイミング／アニメーションコンポーネントは、宣言的（あるいは他の）アニメーション／タイミング制御を提供する。下位合成／アニメーションエンジン（ここでは下位コンポジッタ／アニメータあるいは下位エンジンもしくはコンポーネントとも呼ばれる）２１０は、複数のアプリケーションのシーンに対するレンダリングを構成し、レンダリングコンポーネントを用いて、スクリーンへのグラフィックの実際のレンダリングを実現する。更に、時間の掛かるあるいはアプリケーションに特定なレンダリングを上位にて遂行し、下位層にビットマップ等への参照をパスすることもできることに注意する。
【００２３】
上位合成／アニメーション２０６は、エレメントツリー構造を構築し、この構造を渡り歩くことで、レンダリングインストラクションおよび単純なアニメーションインターバルを生成し、下位合成／アニメーションエンジン２１０にパスする。上位コンポジッタにて生成されたレンダリングインストラクションは、タイミングおよびアニメーション情報を含む。下位合成／アニメーションエンジン２１０は、レンダリングインストラクションおよびアニメーションインターバルを受け取り、シーンのアニメーティング、レンダリング、および合成を管理し、これらは、次に、グラフィックサブシステム（例えば、グラフィックソフトウェア／ハードウェア）２１２に提供される。出力をローカル的に表示する代わりに、あるいはこれに加えて、上位合成／アニメーションエンジン２０６（あるいはこれに類似するエンジン）は、これらレンダリングおよびアニメーションインストラクションを下位プリンティングコード２２０に、静止画像データをプリンタ２２２等に送るために適当なフォーマットにて提供することも、あるいはレンダリングインストラクションおよび単純なアニメーションインターバルを、下位端末伝送サーバ２２６に、遠隔マシーン２２８に伝送するのに適当なフォーマットにて提供することもできる。よりリッチな情報を、ネットワークを通じて送ることもできることに注意する。例えば、遠隔マシーンがマウスロール効果をローカル的に、ネットワークトラフィック無しに扱うようにすることが望ましいこともある。
【００２４】
この実現においては、メディア統合アーキテクチャ２００は、こうして、グラフィック処理を複数のレベルに分離し、これらレベルの各々が幾らかのインテリジェントなグラフィック処理を遂行し、これらが一体となることで、アプリケーションのユーザインタフェース等２０２は、グラフィックを滑らかなアニメーションにて出力すること、グラフィックを他のアプリケーションのグラフィックと合成すること、およびビデオフレームと連動することが可能となる。このアニメーションおよび／または合成はオーディオ出力と同期させることもできる。例えば、オーディオを下位コンポーネントにおいてフレームレートと同期させることで、オーディオのタイミングをビデオあるいはグラフィックのタイミングと本質的にぴったりと合わせることができ、リフレッシュ速度に追いつくためのタスクスケジュールされた複雑な前処理の能力には依存しないようにすることができる。
【００２５】
図３は、マークアップコード３０２、例えば、ＸＡＭＬベースのコードがパーサ／トランスレータ３０４によってインタプリットされる１つの実現を表す。一般に、パーサ／トランスレータ３０４は、エレメントをエレメントツリー／プロパティシステム３１４に加えるが、これらエレメントは自身のレイアウトを遂行するビジュアルオブジェクトである。更に、これらマークアップコードの幾つかあるいは全ては、オンデマンドにてインタプリットされるのではなく、コンパイルし、こうすることで効率を向上させることもできることに注意する。
【００２６】
一般に、エレメントは、プロパティシステム、トリガリングおよびレイアウト／プレゼンテーションシステム内に参加するエレメント層内のオブジェクトである。パーサ３０４は、タグを見つけ、これらタグがエレメントを定義することを助けているのか、あるいはリソースオブジェクトを定義する助けをするか否かを判断する。例えば、ＶｉｓｕａｌＢｒｕｓｈなる特別なケースにおいては、合衆国特許出願第１０／４０１，７１７号において説明されているように、同一のタグが、それらタグが現れる背景に依存して、例えば、複合プロパティシンタックス内に現れるのか、そうではないかに依存して、エレメントとインタプリットされることも、リソースオブジェクトとしてインタプリットされることもある。
【００２７】
マークアップ内にインラインとして存在することに加えて、リソースインスタンスはどこにでも存在し（例えば、マークアップ内にもファイル内にも存在し、これらはローカルに存在することも、あるいは遠隔ネットワーク上に存在し、必要に応じてダウンロードすることもでき）、ある名前（例えば、テクスト名、リファレンスあるいは他の適当な識別子）にて参照される。このようにして、シーンデザイナは、エレメントツリー内のエレメントを、複合プロパティシンタックスにて記述されるエレメントも含めて、あるシーン内のあらゆる所に再使用することができる。以下に説明されるように、リソースはストーリーボードを含み、ストーリーボードを再使用することが可能になる。
【００２８】
パーサ３０４は、複合プロパティシンタックス内のマークアップを扱う際には、必要に応じてタイプコンバータ３０８にアクセスし、そして更に指定されたパラメータをオブジェクトプロパティと比較し、こうすることで、シーンデザイナの複雑な作業を手助けする。こうして、パーサ３０４は単にオブジェクトを設定するのみでなく、オブジェクトに関するプロパティも設定する。同一のレンダリングモデルがエレメントのレベルとＡＰＩのレベルの両方の間で共有されるために、これらオブジェクトの多くは、本質的に同一となる。これにより、パーシング／トランスレーションが極めて効率的となり、更に、このために、異なるタイプのプログラミング言語（例えば、Ｃ＃−などの言語）でも、簡単に、マークアップから自身のシンタックスにあるいはこの逆に変換できるようになる。図３に示されるように、もう１つのこのようなプログラミング言語３１０（これはコンパイルされたマークアップを含んでも良い）も、エレメントをエレメントツリー３１４に加えたり、あるいは、直接にビジュアルＡＰＩ層３１６とインタフェースしたりすることができる。
【００２９】
更に、図３に示されるように、同一のマークアップ３０２をエレメントレベルとリソースレベルにおいてプログラムするために用いることができる。一般に、エレメントレベルでは、シーンデザイナは、完全なプログラム能力を有し、インヘリタンス（例えば、スタイルシートなどのフィーチャ）を提供するプロパティシステムを使用することもでき、トリガリングも可能である（このために、例えば、あるエレメントにユーザの入力エベントあるいは動作に応答してその外見、位置、その他を変化させるためのコードを付着させることもできる）。しかし、さまざまな実施例においては、更に、リソースレベルのメカニズムも提供され、これによると、シーンデザイナは、本質的にエレメントツリーを飛び越え、直接に、ビジュアルＡＰＩ層にプログラムすることができる。エレメントレベルのフィーチャは必要とされない多くのタイプの静止した形状、画像、その他に対しては、この方法は、適当なオブジェクトを出力するためのより効率が良く、負荷の少ない方法として有効である。
【００３０】
図４および５を参照しながら後に説明されるように、アニメーションおよびメディア出力を制御するために、クロックから構成されるタイミングツリーも維持される。一般に、上位コンポジッタ／アニメータエンジン２０６は、処理の量を大幅に簡素化させる複雑な処理（しばしばコンパイリングとも呼ばれる）を遂行し、これによって、より低いレベルにおいて、正しい出力をレンダリングするために扱わなければならないデータの量も大幅に低減される。しかし、上位にて遂行される処理の量およびタイプは、負荷、構成、および下位の能力に大きく依存することに注意する。例えば、もし、下位に高能力のグラフィックハードウェアが存在するときは、上位はそれほど多くの処理を遂行しなくても良く、この逆のことも言える。上位および下位層はこれらの要因に適合させることができる。
【００３１】
一般に、アニメーションは、上位コンポジッタ／アニメーションエンジン２０６および下位コンポジッタ／アニメーションエンジン２１０の両方によって達成される。１つの実現においては、上位エンジン２０６はシーンを渡り歩き、アニメーションパラメータを後に補間のためのインターバルにて更新し、これら簡素化されたデータ構造をインストラクションにパッケージ化し、これが下位エンジン２１０にパスされる。これは、同期的におよび／または非同期的に遂行される。インターバルデータは、タイミングエンドポイント（開始および終了タイミングデータ）、並びにレンダリングインストラクションに対するパラメータ化された値を含むものとみなすことができる。上位エンジン２０４は、リクエストされた補間の幾らかを遂行することも、あるいは全を遂行することもできることに注意する。例えば、もし、補間あるいは他のモーションの関数が、下位エンジン２１０が扱うには複雑すぎる場合、あるいは、下位が課せられた需要を処理しきれないときは、上位エンジンは、それら計算の幾らか、あるいは全てを遂行し、下位に、所望の結果を達成するために、こうして簡素化されたデータ、インストラクション、テセレーションその他を提供することもできる。
【００３２】
下位がアニメーションの各フレームに対して補間を遂行する典型的なケースにおいては、下位エンジン２１０は、パラメータインターバルを補間することで、瞬間値を得、それらインストラクションを、グラフィックデバイスにて実行されるレンダリングコマンドに復号する。グラフィックデバイスは、シーン内に存在するとみられる任意のビデオフレームを追加することで最終シーンを構成する。他のデータ、例えば、デジタル権利管理（ｄｉｇｉｔａｌ  ｒｉｇｈｔ  ｍａｎａｇｅｍｅｎｔ、ＤＲＭ）にて保護されたコンテンツを加えることもできる。
【００３３】
上位エンジン２０６は、こうしてシーンデータ構造を渡り歩き、一定期間に対して各アニメートされるパラメータを記述するインターバルを計算し、これらインターバルおよび簡素化され、かつ、パラメータ化された描画インストラクションを下位エンジン２１０にパスする。これらパラメータデータは、開始時間、終了時間、補間器および補間データが含まれる。一例として、ある画像をそれが移動して見えるように消去および再描画する代わりに、上位コンポジッタ／アニメーションエンジン２０６は、下位コンポジッタ／アニメーションエンジン２１０に対して、その画像が時間を通じてどのように変化すべきかについて指示することができる。例えば、開始座標、終了座標、画像がこれら座標間を移動すべき時間の量（インターバル）、モーションの関数、例えば線形などについて指示することができる。（モーションは、アニメーションに対しては、例えば、色プロパティを変化させることで、固定のオブジェクトをアニメートさせることができるために必須ではないことに注意する）。下位コンポジッタ／アニメーションエンジン２１０は、補間によりフレーム間の新たな位置を決定し、これらをグラフィックデバイスが理解できる描画インストラクションに変換し、これらコマンドをグラフィックデバイスにパスする。上位エンジン２０６の各パスは、好ましくは、下位エンジン２１０が数フレームに渡って滑らからアニメーションを遂行するために十分なデータを提供するようにされる。
【００３４】
下位（例えば、高速ティック）エンジン２１０は、上位エンジン２０６とは別個のタスクである。下位エンジン２１０は上位エンジン２０６からシーンを記述する簡素化され、かつ、パラメータ化された描画インストラクションおよびパラメータインターバルを受信する。下位エンジンは、これらデータ構造を、上位エンジン２０６によって新たな１つが提供されるまで、維持し、渡り歩く。下位エンジンは複数の上位エンジン２０６を扱い、各々に対して別個のデータ構造を維持することもできる。下位エンジン２１０と上位エンジン２０６との関係を一対複数の関係にすることで、システムが複数のシーンを同時に滑らかにアニメートすることが可能になる。
【００３５】
下位エンジン２１０は、上位エンジンによって提供されたインターバルに基づいて、本質的に瞬間的なアニメーションパラメータを補間し、描画インストラクションを更新し、各フレームに対してシーンをレンダリングする。下位エンジン２１０のタスクは、このシステム上で高い優先にて実行し、こうすることで、フレームを、例えばグラフィックハードウェアのスクリーンリフレッシュ速度にて供給することが確保される。下位エンジン２１０にて遂行される補間は、こうして、典型的には、単純な高速な関数、例えば、線形、区分線形、三次スプライン、および類似する速度の関数に制限される。
【００３６】
図４および５に概略的に示されているアニメーションおよびメディアとの関連で、プログラム、例えば、アプリケーションプログラム２０２は、アニメーションプロパティ値を、ここではクロックあるいはクロックプロパティと呼ばれるタイミング情報と共に上位コンポーネント２０６に対して指定する。後に説明されるように、任意の独立のアニメーションあるいはメディア（例えば、ビデオおよびオーディオなどの線形メディア）、並びに指定されたアニメーションを調和させるストーリーボードは、上位コンポーネントの所に、これに対して維持されるクロックを有する。一般に、オーサはタイムラインデータを指定し、これは、必要に応じて、これらの同期を保つためのクロックにインスタンス化される。幾つかの実施例においては、ストーリーボードは、タイムラインのグループあるいはツリーから構成されたタイムラインである。ストーリーボードは、そのタイムラインのツリーが複数のエレメント上の複数のプロパティをターゲットとすることができるように、ターゲット情報を提供することができる。加えて、アニメーションは、幾つかの実施例においてはタイムラインのタイプである。
【００３７】
クロックプロパティは、ある与えられたクロックとそのタイミング構造の残りの部分との間の初期同期関係を定義するタイミングプロパティを含む。図５に示されるように、上位コンポーネント２０６は、あるアニメーションのあるプロパティの現在の値を決定するために上位アニメーション関数５２０Hを呼び出す（これは、例えば、マネッジドコードにて書かれており、これは、情報を、その上でランする共通言語のランタイムがその動作を制御することを可能にするメタデータの形態にて提供するコードである）。高フレームレートでの計算の際には、下位コンポーネント２１０も類似する（あるいは同一の）アニメーション関数５２０Lを呼び出し、その進行がエンジン４１４によって計算され、これによって、あるアニメーションの現在のプロパティ値が決定される。代替の実現として、これらアニメーション関数を、例えば、下位コンポーネント内に組み込むこともできることに注意する。
【００３８】
一般に、アニメーションおよび線形メディアは、セットのクロックと関連し、これらは同期プリミティブおよび規則にて互いに関連付けられる。これらクロックは、階層的に配列することができる。例えば、アプリケーションプログラムは１つの親クロックを有し、アプリケーションプログラムのアニメートされたオブジェクトは子達であり、これらも、今度は、他の子達を持つことができる。あるクロックのプロパティが定義あるいは修正されると、そのクロックの全ての子達が影響を受ける。例えば、ある親クロックを休止させると、その子クロックの全てが休止し、ある親クロックの速度を二倍にすると、その子クロックの全ての速度が二倍となる。
【００３９】
これらクロックプロパティは、実行時にアプリケーションにて開始されるインタラクティブな制御エベントから構成されるソースイベントにて修正することができる。こうして、これらクロックは、各クロックは、例えば、ユーザ入力に応答して、任意の時間に、アプリケーションにて、個別に、開始、休止、再開および停止することができるという点においてインタラクティブである。加えて、新たなクロックをタイミング構造に加え、現存するクロックを除去することもできる。
【００４０】
上述の合衆国特許出願第１０／６９３，８２２号において説明されているように、上位タイミングコンポーネントは、各クロックに対するインターバルリストを、イベント（開始、休止その他）の格納されているリストおよび関連する同期プリミティブに基づいて生成することができる。これらアクティベーションインターバルは、実世界での時間における異なるポイントにおいてある与えられたクロックにて表現される時間を記述する単純で重複のないセグメントである。
【００４１】
図４に示されるように、クロックプロパティの少なくとも幾つかは、クロックのタイミングツリー４０２内で階層的に関連する。図４には、自身のプロパティを有する３つのこのようなクロック、すなわち、クロックプロパティ４０４1−４０４3が示されているが、しかし、ある所定の情況においてより多くのクロックおよび異なるタイミングツリーが存在し得るうることに注意する。例えば、表示されるべきアニメートされるオブジェクト（あるいはセットのストーリーボードにて調整されるオブジェクト）に対応する各クロックに対して、上位コンポーネント２０６は、イベントリスト発生器４０８と呼ばれ状態マシーンを含み、これはクロックプロパティからイベントリスト（例えば、４０６1）を生成する。一般に、イベントリスト発生器４０８は、指定されたクロックプロパティにて当初スケジュールされていたイベントを、任意の明示的なインタラクティブイベント、例えば、そのアニメーションとの関連で受信される休止および再開リクエストと共に、１つのイベントリストにグループ化する。クロックが各アニメーション（あるいは後に説明されるようにストーリーボードを介してグループのアニメーション）に対して維持され、こうして、各独立したアニメーション／アニメーションセットに対応する１つのイベントリストが存在し、加えて、各独立した線形メディアに対して１つのイベントリストが存在する。
【００４２】
上位コンポーネントはインターバル発生器４１０を含み、これは、各アニメーションあるいはメディアに対して、イベントリスト（例えば、４０６3）を用いて、対応するインターバルリスト（例えば、４１２3）を計算し、これが下位コンポーネント２１０にパスされる。一方、下位コンポーネント２１０は、下位計算エンジン４１４を含み、これは出力を、現在の時間に基づいて、インターバルデータとの関連で制御する。例えば、そのオブジェクトに対するインターバルデータおよび現在の時間に基づいて、進行値を下位アニメーション関数サブシステム５２０Lに提供し、これは、あるアニメートされるオブジェクトの変化するプロパティに対する現在の値を決定する。例えば、任意の与えられたフレームに対して、下位計算エンジン４１４は、そのアニメートされるオブジェクトの位置を、インターバルデータおよび現在の時間（これはシステム時間であっても、相対時間であっても良い）に基づいて補間する。図４および５に示されているように、上位タイミングコンポーネントは、タイミングツリー４０２およびイベントリスト４０６1−４０６3を含み、一方、下位タイミングツリー２１０は、インターバルリスト４１２1−４１２3を含むが、しかし、これらデータ構造は、本質的に記憶装置のどこに維持することもでき、通常は高速ランダムアクセスメモリ内に維持されることに注意する。
【００４３】
要約すると、上位タイミングコンポーネント２０６は同期規則およびプリミティブにより（例えば、階層的に）関連付けられたクロックのツリー４０２を調べる。実施例は、上位タイミングコンポーネント２０６内のクロックを用いて、アクティベーションインターバル４１２のリストをコンパイルし、これらが下位タイミングエンジンにて消費される。下位タイミングエンジンは、インターバルリスト４１２を調べるが、これは独立した（例えば、アニメートされるオブジェクト毎あるいは線形メディア毎の）クロックを表す。図５に示されるように、両方に一貫した時間を提供するクロック、例えば、システムクロック５２４が存在し、こうして、これら複数のレベルが同期された状態に保たれる。
【００４４】
アプリケーション２０２（あるいは他のソース）から受信されるインタラクティブな変更に応答して、上位タイミングコンポーネントは、その変更と直接に関係するクロック、並びに間接的に関係する任意のクロックの状態を、同期プリミティブにて指定される通りに更新することを必要とされる。単一のクロックに対する変更がそのタイミング構造内の他のクロックに影響を及ぼす可能性があることに注意する。例えば、スライドショウのプレゼンタは、全ディスプレイを休止させることができるが、このときは、現在表示されている全てのアニメーションおよび線形メディアが休止させる必要がある。以下で説明されるように、１つの実施例によると、ストーリーボードは、アニメーションおよび／またはメディアを一緒にグループ化し、こうしてこれらが所望の振る舞いを示すように調和させることを可能にする。
【００４５】
一般に、あるオブジェクトとの関連でこのインタラクションが発生する度に、イベントリストが必要に応じて再生成され、インターバルリストが再計算され、そして下位タイミングコンポーネントに送られる。上位コンポーネントはこれら動作を（例えば、１秒当たりおよそ６〜１０回の頻度にて）遂行し、そして、こうすることで、下位コンポーネントは（例えば、１秒当たり６０回動作する）、各アニメートされたオブジェクトに対して、現在のインターバルリストのみを扱うことで済むようにされる。
【００４６】
あるオブジェクトに対するこのインターバル情報および開始および終了値に加えて、追加のパラメータが上位コンポーネントに送られ、この結果として、インターバルリストにも変更が及ぶこともある。例えば、アプリケーションは、時間におけるある期間をシークすることもできるが、これは１つのイベントに対応する。アプリケーションは、そのシークがいつ、どれくらい発生すべきかを指定する。メディアの巻き戻しあるいは早送りと同様に、アニメーションにシークを用いることで、アプリケーションは、こうして、時間における特定のポイントに向かって前方あるいは後方にジャンプすることができる。リバースイベントは、アプリケーションが指定することができるもう１つのタイプのスケジュールされたあるいはインタラクティブなイベントである。リバースイベントがリスト内に存在すると、進行は自動的に、例えば、１００％から０％へと逆転される。速度の変更もサポートされ、例えば、あるクロック以下の全ては、実時間より高速にあるいは低速にて実行するように設定することができる。他の属性を指定することもできる。例えば、特定のクロックに対して、再開が許されるか否か、および／または現在実行していないときは、再び開始すべきか否かを指定することもできる。更に、例えば、１秒の所で開始し、１０秒の所で再び始まり、１００秒の所で再び始まることを、しかし、オプションとして、現在実行しているとき、再開するあるいは再開しないことも含めて、指定することもできる。
【００４７】
アニメーションおよびメディアを調和させるためのストーリーボード
実施例は、とりわけストーリーボード（Ｓｔｏｒｙｂｏａｒｄ）に向けられるが、これは、エレメント（例えば、ウインドウ、パネル、ボタンその他のコントロールなどのＦｒａｍｅｗｏｒｋＥｌｅｍｅｎｔ（フレームワークエレメント））に対してタイムラインツリーを指定することを可能にするオブジェクトを含む。タイムラインは、エレメントのプロパティ値を設定し、そのエレメントおよびそのサブツリーに対するアニメーションを制御する。ストーリーボードは、基本的には、開始され、停止され、あるいは休止され、あるいはシークのために用いられる特定のタイプのタイムラインオブジェクトに対応し、こうして、そのストーリーボードと関連するアニメートされるエレメントの外見、および／またはメディアの挙動を制御する。ストーリーボードは、マークおよびコードの両方から利用できる。
【００４８】
幾つかの実施例においては、常時トリガモデルがアニメーションおよびストーリーボードに対して使用される。加えて、このモデルは、アニメーションおよびストーリーボードを（前の実装におけるストーリーボードプロパティとは対照的に）トリガとの直接的関係に置き、こうすることで、（図６−９との関連で後に説明される）ハンドオフ挙動を可能にする。ハンドオフ挙動は本質的にトリガード概念である。後に説明されるように、無指定フロム値（ｕｎｓｐｅｃｉｆｉｅｄ「ｆｒｏｍ」ｖａｌｕｅ）が、新たなアニメーションがトリガされた時点におけるプロパティに関して存在するアニメーションの現在の値およびその新たなアニメーションのハンドオフ挙動に基づいて定義される。これは、アニメーションのフロム「ｆｒｏｍ」値は（無指定のときは）アニメーションがトリガされたときにのみ定義されることを意味する。
【００４９】
このプロパティはアニメーションがトリガされたときのみ定義されるので、このモデルはアニメーションをトリガと関連付ける。このモデルにおいては、アニメーションはトリガ内のインラインであるか、あるいはリソース内に定義され、トリガされるまで使用されない。
【００５０】
幾つかの実施例においては、ストーリーボードは、あるエレメントと関連付けられ、独立して開始される最上位のタイムラインの集まりを含む。ストーリーボードは、タイミングツリーとエレメントツリーとの間の接続ポイントも提供し、これにより、ストーリーボード内のアニメーションは、そのストーリーボードが付着されているエレメントとの関連でそれらのターゲットを解決することが可能になる。マークアップから、ストーリーボードは、トリガの集まりとして宣言することもでき、これは状態の変化、イベントあるいは他のアクションにて起動され、トリガが起動されたとき実行されるべきセットの拡張可能なアクション（例えば、タイムラインが開始あるいは停止）を含む。ストーリーボードは、エレメントのリソースプロパティ、スタイル（Ｓｔｙｌｅ）あるいはテンプレート（Ｔｅｍｐｌａｔｅ）内に宣言することもできる。
【００５１】
一般に、あるストーリーボード内のタイムラインは、様々なサブツリー、エレメント、および他のオブジェクト（例えば、テクストレター、ワード、ライン、パラグラフその他）に適用することができるアニメーションテンプレートを表す。１つの実施例によると、ストーリーボード（例えば、ＡＰＩを介してアクセスされたオブジェクト）は、プログラムのオーサが、セットの調和されたアニメーションを、タイムライン内で、アニメーションをグループ化することで、（エレメントプロパティに対して）スケジュールすることを可能にする。換言すれば、ストーリーボードは、タイミングツリーをエレメントツリーと一体化し、こうすることで、異なるアニメーションの異なるプロパティに対するタイミングを、同一のタイムラインを介して調和されたやり方にて操作する能力を提供する。ストーリーボードは、こうして、様々なオブジェクトおよびプロパティに影響を及ぼす、さもなければ独立したタイムラインを単一のタイムラインツリーに結合するためのやり方を提供し、こうして、プログラムのオーサが複雑なセットのタイミングイベントを単純なやり方にて編成および制御することを可能にする。例えば、個々のアニメーションを見つけ、再開することは必要とされず、タイムライン下でアニメーションをストーリーボードの一部としてグループ化することで、全てのアニメーションを、単にそのストーリーボードを再開させることで一度に再開させることが可能になる。
【００５２】
ストーリーボードは、アニメーション／ビデオ／オーディオの特定のインスタンスに関して、あるいは特定のスタイルのアニメーションに用いることができる。幾つかのシナリオにおいては、リソースとして宣言された単一のストーリーボードが、複数のエレメントに対して、これらエレメント上の別個のトリガを介して適用することができる。ＢｉｇｉｎＳｔｏｒｙｂｏａｒｄ（ストーリーボード開始）は、マークアップあるいはコードからのプロパティに関してアニメーション（あるいは他のメディア）を開始させる。マークアップから、ＢｉｇｉｎＳｔｏｒｙｂｏａｒｄは、ＦｒａｍｅｗｏｒｋＥｌｅｍｅｎｔ．ＢｅｇｉｎＳｔｏｒｙｂｏａｒｄ（フレームワークエレメント．ストーリーボード開始）を採用し、そのストーリーボードプロパティに割り当てられたタイムラインのツリーを渡り歩く。ＦｒａｍｅｗｏｒｋＥｌｅｍｅｎｔ．ＢｅｇｉｎＳｔｏｒｙｂｏａｒｄは、次に、そのストーリーボードのタイムラインのツリーの葉上に生存している任意のアニメーションに関してＦｒａｍｅｗｏｒｋＥｌｅｍｅｎｔ．ＢｅｇｉｎＡｎｉｍａｔｉｏｎ（フレームワークエレメント．アニメーション開始）を呼び出す。マークアップにおいては、ＢｅｇｉｎＳｔｏｒｙｂｏａｒｄは、イベントおよびプロパティの両方のトリガ内で使用することができる。
【００５３】
マークアップから、オーサは、ＢｅｇｉｎＳｔｏｒｙｂｏａｒｄを使用して、ストーリーボードを開始することができる。ＢｅｇｉｎＳｔｏｒｙｂｏａｒｄ．Ｓｔｏｒｙｂｏａｄ（ストーリーボード開始．ストーリーボード）は、その付着されているプロパティが複数のエレメントに関する複数のプロパティをターゲットとする能力を有するストーリーボードを含む。ストーリーボードは、アニメーションおよびメディアタイムライン（ＭｅｄｉａＴｉｍｅｌｉｎｅｓ）を含む全てのタイプのタイムラインを含むことができる。
【００５４】
以下の例は、インラインストーリーボードについて例示する。コンテナオブジェクト（ボタン）がアニメートされる。この例においては、Ｓｔｏｒｙｂｏａｒｄ．ＴａｒｇｅｔＮａｍｅ（ストーリーボード．ターゲット名）が供給されるが、しかし、幾つかの実施例においては、これは、このアニメーションはコンテナをターゲットとするために、必要とされない。ＢｅｇｉｎＳｔｏｒｙｂｏａｒｄ．Ｓｔｏｒｙｂｏａｄのタグは自動的に供給され、このためこれらは必要とされない。
【００５５】
この実施例においては、全てのアニメーションは、Ｓｔｏｒｙｂｏａｒｄ．ＴａｒｇｅｔＮａｍｅが指定されていないときは、コンテナオブジェクトをターゲットとする。更に、これらアニメーションは、ソースが指定されていないときは、これらコンテナを、トリガリングイベントのソースとして使用する。これら２つの想定は、コンテナターゲット／コンテナトリガシナリオにおいては、マークアップを簡素化することを可能にする（ＴａｒｇｅｔＮａｍｅあるいはＳｏｕｒｃｅを有する必要がなくなる）。
【００５６】
<Window>
<Button Width="2" Name="myButton"> 
<Button.Triggers>
<EventTrigger Event="Loaded"> 
<EventTrigger.Actions>
<BeginStoryboard >
<Storyboard>
<DoubleAnimation To="4" Duration="0:0: 1"
Storyboard.TargetProperty="Width" Storyboard.TargetName="myButton"/>
【００５７】
／／ＴａｒｇｅｔＮａｍｅは、このケースにおいては、デフォルトターゲットがコンテナであるために、必要とされない。
【００５８】
</Storyboard> 
</BeginStoryboard >
</EventTrigger.Actions>
</EventTrigger> 
</Button.Triggers>
</Button> 
</Window>
【００５９】
以下の例は、リソースとして定義されるストーリーボードについて示す。アニメーションはリソースセクション内に定義されるために、これは他のＦｒａｍｅｗｏｒｋ  Ｅｌｅｍｅｎｔｓのアニメーション内でも再使用することができる。
【００６０】
<Window>
<Button Width="2">
<Button.Resources>
<DoubleAnimation To="4" Duration- '0:0: 1" x:Key="myAnimation" />
</Button. Resources>
<Button.Triggers>
<EventTrigger Event="Loaded">
<EventTrigger.Actions>
<BeginStoryboard Storyboard ="{StaticResource myAnimation}"
TargetProperty="Width"/>
</EventTrigger.Actions>
</EventTrigger>
</Button.Triggers>
</Button> 
</Window>
【００６１】
上の例において示されるように、タイミングツリーをエレメントツリーと一体化させることに加えて、ストーリーボードは、イベントトリガを、それらの動作（例えば、開始、休止、シーク、停止アクション）を制御するために用いることを可能にする。加えて、ストーリーボードは、プロパティトリガと共に用いることもできる。一般に、プロパティトリガは、真あるいは偽などのある状態／値と対応し、一方、イベントは発火する（従って偽なる値は有さない）。例えば、プロパティトリガは、マウスがあるエレメントの上をホバリングしているときは真なる値を有し、その上をホバリングしてないときは偽なる値を有する。各々の真あるいは偽なる状態は、１つ（あるいは複数の）ストーリーボード内において、別個に、開始、停止、休止、および／またはシークするために用いることができる。イベント、例えば、エレメント上でのマウスのクリックは、発火し、従って、可変な状態は有さないが、しかし、同様にして、ストーリーボードの動作を制御することはできる。こうして、アニメーションは、表示されたエレメントツリーの表現とのユーザインタラクションを介して制御可能である。
【００６２】
イベントトリガは、そのソースとしてイベントを取るが、このイベントは、このイベントがそのホストエレメントの上で発火したときアクションを起こさせる。プロパティトリガとは異なり、イベントトリガはスコープされないことに注意する。すなわち、イベントトリガは、単にある動作を遂行し、その後、この動作が自身のライフタイムを決定する。例えば、ある１つのイベントがあるタイムラインを開始させたとき、このライフタイムはその持続期間が完了するまで、あるいは別のイベントトリガその他によってそれが停止されるまで実行する。
【００６３】
図６は、１つの実施例に従う、リッチなメディア間の滑らかな遷移を提供することができるシステム６００を示す。この実施例においては、システム６００は、上述のアプリケーション２０２、タイミングシステム２０８、グラフィックサブシステム２１２、およびプロパティシステム３１４に加えて、ハンドオフシステム６０４を含むアニメーションシステム６０２を含む。様々な実施例に従う、このような遷移において用いられるこれらコンポーネントの機能の幾つかが以下に説明される。
【００６４】
プロパティシステム３１４は、上述のように、アプリケーション２０２によってインスタンス化された様々なビジュアルオブジェクト（図示せず）のプロパティに対する値を格納する。例えば、プロパティシステム３１４は、他のオブジェクトプロパティの中でもとりわけ、ＵＩ内に表示されるべきボタンを表すオブジェクトの長さおよび幅プロパティに対する基準値を格納する。
【００６５】
タイミングシステム２０８は、上述のように、アプリケーション２０２によって生成されたアニメーションのタイミングを調節する。例えば、タイミングシステム２０８は、アニメートされているプロパティの現在の値の計算において用いられるタイムライン情報を提供する。１つの実施例においては、タイミングシステム２０８は、インタラクティフなエレメント（図示せず）からイベントおよびプロパティ変更情報を受信し、アニメーションの生成において用いられるトリガ（例えば、イベントトリガ、プロパティトリガ）を生成する。例えば、インタラクティブな要素は、マウスおよび／またはキーボードの動作をモニタリングし、情報をタイミングシステム２０８に提供し、タイミングシステム２０８に対して、タイムラインを開始し、トリガをアニメーションシステム６０２に提供するようにさせる。
【００６６】
グラフィックサブシステム２１２は、上述のように、アニメーションを表示装置上にレンダリングするために必要とされるデータを生成する。
【００６７】
アニメーションシステム６０２は、この実施例においては、ビジュアルなアニメートされた効果を生成するプロパティ値を変更する動作を遂行する。１つの実施例においては、アニメーションシステムは、複数のコンポーネント、例えば、上位および下位合成／アニメーションエンジン２０６、２０８、並びにハンドオフシステム６０４を含む。更に、アニメーションシステム６０２は、アプリケーション２０２から、アニメートされているプロパティに対する指定された「フロム（ｆｒｏｍ）」および「ツウ（ｔｏ）」値、並びにそれらアニメーションを遂行するための指定された時間期間を受信する。幾つかのアニメーションにおいては、アプリケーションによって指定されないときは、アニメートされるプロパティに対するデフォルト時の「フロム」および「ツウ」値が用いられる。
【００６８】
ハンドオフシステム６０４は、この実施例においては、あるアニメーションをあるプロパティに関して、もう１つのアニメーションがまだそのプロパティに関して遂行されている間に遂行したいときに使用される。幾つかの実施例においては、ハンドオフシステム６０４は、幾つかの異なるハンドオフ、例えば、以下の表１に掲載されているようなハンドオフを遂行する。「古い（ｏｌｄ）」アニメーションなる用語は、ある特定のプロパティに対して、アプリケーション２０２がそれと同一のプロパティに対してもう１つのアニメーションを開始したとき、実行しているアニメーションを指す。幾つかのシナリオにおいては、古いアニメーションは、２つあるいはそれ以上の他のアニメーションの「合成（ｃｏｍｐｏｓｉｔｉｏｎ）」（すなわち、表１に定義されるような合成）である。幾つかの実施例においては、アニメーションシステム６０２は、１つあるいは複数の所定のシナリオに対して、デフォルト時のハンドオフ挙動を提供するように実現される。この実施例においては、表１は、アニメーションにおいて設定することができるハンドオフ挙動のプロパティの様々な値を示す。ハンドオフ挙動のプロパティは、基本的には、そのアニメーションの「フロム（ｆｒｏｍ）」値の値としてなにを用いるか、および古いアニメーションとの関係でなにをすべきかについて記述する。
【００６９】
【表１】
2009501388.tif 000003
【００７０】
ボタンの例をもう一度使用すると、アプリケーションは、ボタンが、マウスのカーソルがそのボタンの上に移動したとき、特定の時間期間をかけて特定のサイズに拡大し、その後、マウスのカーソルがボタンから離れると、ある特定の時間期間をかけて元のサイズに縮小するように書かれる。このシナリオにおいては、ユーザは、この場合、カーソルを、ボタンの上に素早く移動させ、その後、カーソルをボタンから、この特定の時間期間が完全に経過する前に離すことがある。こうして、「拡大（ｇｒｏｗ）」アニメーションは「マウスオーバ（ＭｏｕｓｅＯｖｅｒ）」と同時に開始され、「縮小（ｓｈｒｉｎｋ）」アニメーションは、拡大アニメーションが完結する前に「ＭｏｕｓｅＥｘｉｔ」と同時に開始されることとなる。
【００７１】
「拡大」アニメーションに対するハンドオフ挙動が上の表１において説明されているような（指定されることも、デフォルト値とされることもある）「スナップショットと置換（ｓｎａｐｓｈｏｔ  ａｎｄ  ｒｅｐｌａｃｅ）」挙動であるときは、カーソルがボタンから離れた時点で「拡大」アニメーションから結果としてのボタンの長さと幅の現在の値がスナップショットされる。この実施例においては、こうしてスナップショットされた値は、アニメーション記憶オブジェクト６０６内に格納される。アニメーションシステム６０２は、この実施例においては、各アニメートされるプロパティに対してアニメーション記憶オブジェクト６０６を生成する。幾つかの実施例においては、アニメーション記憶オブジェクト６０２は、グラフィックサブシステム２１２にてレンダリングされたとき、ボタンが拡大および縮小して見えるようにさせる、長さおよび幅プロパティの変化に対する計算を遂行するように構成される。
【００７２】
アニメートされたプロパティに対するこれら値がスナップショットされた後に、「拡大」アニメーションは解除され（すなわち、「拡大」アニメーションは事実上終端され）、「縮小」アニメーションがスナップショットされた値である長さおよび幅プロパティに対する「フロム」値を用いて開始される。もしこのボタンの幅および長さプロパティに影響を及ぼす他のアニメーションは開始されないときは、この「縮小」アニメーションは完結し、このアニメーションの終端時点において、ボタンの長さおよび幅プロパティは基準値となる。
【００７３】
この「スナップショットと置換」挙動のために、「拡大」と「縮小」アニメーションとの間の遷移はユーザにとっては滑らかに見えるようになる。すなわち、ボタンの外見は、あるサイズまで滑らかに拡大し、その後、これと同一のサイズから滑らかに縮小することとなる。上述のスナップショット能力を有さない他のシステムにおいては、アプリケーション２０２あるいはアニメーションシステム６０２は、「縮小」アニメーションに対する「フロム」値（例えば、基準「フロム」値あるいは「拡大」アニメーションのターゲット値）を提供することが必要となることがあり、この場合には、結果として、ボタンの外見内に想定外の「グリッチ（ｇｌｉｔｃｈ）」が発生することがある。すなわち、ボタンの外見はあるサイズまで拡大するが、その後、突然に、異なるサイズへと変化し、そしてこのボタンサイズから、縮小が開始されることとなる。スナップショットを利用することによる上述の長所は、上の表１において説明されている「スナップショットと保持（ｓｎａｐｓｈｏｔ  ａｎｄ  ｒｅｔａｉｎ）」および「スナップショットと保持／休止（ｓｎａｐｓｈｏｔ  ａｎｄ  ｒｅｔａｉｎ）」挙動に対しても適用することができる。
【００７４】
以下は、「スナップショットと置換」ハンドオフ挙動を使用するコードの一例である。このボタンは、ＭｏｕｓｅＥｎｔｅｒと同時に拡大し、ＭｏｕｓｅＬｅａｖｅと同時に縮小するが、ここでスナップショットと置換挙動は、デフォルト時のハンドオフ挙動である。
【００７５】
<Grid xmlns=http://schemas.microsoft.com/winfx/avalon/2005"
xmlns:x="http://schemas.microsoft.com/winf/{/xaml/2005">
<Grid.Resources>
<Style x:Key="GelButton" TargetType="{x:Type Button} ">
<Setter Property="Button.RenderTransform">
<Setter.Value>
<ScaleTransform Center="O,O" SCaIeX=11I" ScaleY="l" />
</Setter.Value> 
</Setter> 
<Style.Triggers>
<EventTrigger RoutedEvent="Mouse.MouseEnter">
<EventTrigger.Actions> 
<BeginStoryboard> 
<Storyboard> 
<DoubleAnimation Duration="0:0:0.2"
Storyboard.TargetProperty="RenderTransforra.ScaleX" To=1.5" 
AccelerationRatio=".9" />
<DoubleAnimation Duration="0:0:0.2"
Storyboard.TargetProperty="RenderTransform,ScaleY" To="1.5"
AccelerationRatio=".9" /> 
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions> 
</EventTrigger>
<EventTrigger RoutedEvent="Mouse.MouseLeave"> 
<EventTrigger.Actions> 
<BeginStoryboard>
<Storyboard>
<DoubIeAnimation Duration="0:0:0.2" 
Storyboard.TargetProperty="RenderTransform.ScaleX" AccelerationRatio=".9" />
<DoubleAnimation Duration="0:0:0.2"
Storyboard.TargetProperty="RenderTransform.ScaleY" AccelerationRatio=".9" />
</Storyboard> 
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger> 
</Style.Triggers>
</Style>
</Grid.Resources> 
<Button Style="{StaticResource GelButton}" Width="100" Height="lOO"/> 
</Grid>
【００７６】
例示的「スナップショットと置換」の動作フロー
図７は、１つの実施例に従う、「スナップショットと置換」挙動を遂行するための動作フロー７００を示す。動作フロー７００は、任意の適当なコンピューティング環境内で遂行することができる。例えば、動作フロー７００は、システム６００（図６）のようなシステムによって実行しても良い。従って、動作フロー７００の説明は、図６のコンポーネントの少なくとも１つを参照することがある。しかし、図６のコンポーネントへのこのような参照は、もっぱら説明のためのものであり、図６の実現は、動作フロー７００に対する非制限的な環境にすぎないことを理解されるべきである。
【００７７】
ブロック７０２において、アニメーションに対するトリガが検出される。１つの実施例においては、アニメーションシステム、例えば、アニメーションシステム６０２（図６）が、このトリガ（例えば、イベントトリガあるいはプロパティトリガ）を検出する。幾つかの実施例においては、アニメーションシステムは、（図６との関連で上述された）インタラクティブなエレメントからこのトリガの通知を受信する。この例示的動作フローにおいては、このアニメーションと関連するプロパティ（すなわち、ビジュアルオブジェクトが「アニメート（ａｎｉｍａｔｅｄ）」されたとき変化するプロパティ）に対して現在実行している他のアニメーションは存在しない。
【００７８】
ブロック７０４において、アニメーション記憶オブジェクトが割り当てられる。１つの実施例においては、アニメーションシステムは、このアニメーションと関連するプロパティに対するアニメーションを扱うために、アニメーションオブジェクト、例えば、アニメーション記憶オブジェクト６０６（図６）を生成する。幾つかの実施例においては、アニメーション記憶オブジェクトはアニメートされるべき各プロパティに対して生成される。あるプロパティに対するアニメーションの全てが完結すると、幾つかの実施例においては、アニメーション記憶オブジェクトは削除される。幾つかの実施例においては、アニメーションがそれらのフィル値に達したとき、これらフィル値はアニメーション記憶オブジェクト内に保持されるが、格納されていた情報の残りの情報は削除される。
【００７９】
ブロック７０６において、トリガされたアニメーションと関連するプロパティの基準値がアニメーション記憶オブジェクト内に格納される。１つの実施例においては、アニメーションシステムは、基準値をアニメーション記憶オブジェクト内に格納する。基準値はプロパティシステム、例えば、プロパティシステム３１４（図６）から得られる。
【００８０】
ブロック７０８において、アニメーションが開始され、アニメーションがアニメーション記憶オブジェクトによって保持される。１つの実施例においは、アニメーション記憶オブジェクトは、実際には、プロパティに対する値を、スクリーンリフレッシュ速度にて、アニメーションが完結するまで（あるいは置換または休止されるまで）再計算し、こうして、ビジュアルオブジェクトはアニメートされているように見える。アニメーション記憶オブジェクトは、更に、アニメーションが実行されている間にもアニメーションをホールドする（すなわち、アニメーションの現在の状態を定義する情報を維持することで、そのアニメーションが保持されあるいは保持／休止されたとき、そのアニメーションを見つけ、継続できるようにされる）。
【００８１】
ブロック７１０において、同一のプロパティを伴う第２のアニメーションに対するトリガが、第１のアニメーションが完結する前に検出される。ブロック７０２におけると同様に、アニメーションシステムは、１つの実施例においては、この他のトリガを検出する。この例示的動作フローにおいては、第２のアニメーションは、表１において「スナップショットと置換」挙動として定義されているようなハンドオフ挙動を有するように構成される。
【００８２】
ブロック７１２において、第１のアニメーションからの結果としてのプロパティの現在の値が保存される（すなわち、スナップショットされる）。１つの実施例においては、スナップショットはアニメーション記憶オブジェクト内に格納される。例えば、アニメーションシステムは、次にスクリーンリフレッシュに対するプロパティに対する値を第１のアニメーションに従って計算し、この計算された値（すなわち、スナップショット）をアニメーション記憶オブジェクト内に保存する。
【００８３】
ブロック７１４において、第１のアニメーションが解除される。１つの実施例においては、アニメーションシステムはアニメーション記憶オブジェクト内に格納されていた第１のアニメーションの状態情報を削除する。
【００８４】
ブロック７１６において、第２のアニメーションが開始され、第２のアニメーションがアニメーション記憶オブジェクトにてホールドされる。この実施例によると、このスナップショットは、第２のアニメーションを実行するときのプロパティの「フロム」値として使用される。ブロック７０８の動作と同様に、アニメーションシステムは、実際には、プロパティに対する値をスクリーンリフレッシュ速度にて、アニメーションが完結するまで（あるいは置換あるいは休止されるまで）再計算し、こうしてビジュアルオブジェクトがアニメートして見えるようにされる。アニメーション記憶オブジェクトは、更に、第２のアニメーションが実行されている間に第２のアニメーションをホールドする（すなわち、第２のアニメーションの現在の状態を定義する情報を、第２のアニメーションが保持あるいは保持／休止されたとき、第２のアニメーションを見つけ、継続できるように維持する）。
【００８５】
動作フロー７００が例示され、特定の順番にて順次的に説明されたが、他の実施例においては、これらブロック内に説明された動作は、異なる順番にて遂行することも、複数回遂行することも、および／または並列に遂行することもできる。さらに、幾つかの実施例においては、これらブロック内に説明されている１つあるいは複数の動作は、もう１つのブロックに分離することも、省くことも、あるいは結合することもできる。
【００８６】
図８は、１つの実施例に従うと、アニメーションと関連するプロパティに対する値が「スナップショットと置換」ハンドオフ挙動（表１）に従ってどのように得られるかについて示す。この実施例においては、まだアニメートされていないプロパティ８０２は基準値８０４を有する。１つの実施例においては、基準値はプロパティシステム、例えば、上述のプロパティシステム３１４（図３、６）内に格納される。
【００８７】
プロパティ８０２に影響を及ぼす（図８内のアニメーションＡにて示される）アニメーション８０８が開始されるとき、典型的には基準値８０４がアニメーション８０８に対する「フロム」値８１０として用いられる。アニメーション８０８の「ツウ」値８１２は、アニメーション８０８を生成したアプリケーション（例えば、図６のアプリケーション２０２）にて指定される。幾つかのシナリオにおいては、これら「ツウ」および「フロム」値は、アプリケーションによっては指定されず、結果として、これら基準値がデフォルト時の値として用いられる。１つの実施例においては、これら「ツウ」および「フロム」値は、アニメーション記憶オブジェクト、例えば、アニメーション記憶オブジェクト６０６（図６）内に格納され、これはアニメーション１１０８が開始されるとき、アニメーションシステム、例えば、アニメーションシステム６０２（図６）によって割り当てられる。アニメーション８０８が実行している間、（アニメーション８０８に従って変化する）プロパティの値が、スクリーンがリフレッシュされるたびに計算され、レンダリング値８１４として出力される。
【００８８】
この例においては、（図８においてアニメーションＢとして示される）アニメーション８１６が、アニメーション８０８が完結する前に開始される。この例においては、アニメーション８１６は、スナップショットと置換」挙動を有するように構成されている。開始されると、アニメーション８１６は、プロパティをスナップショットし、このスナップショットを、アニメーション８１６の「フロム」値８１８として使用する。アニメーション８１６の「ツウ」値８２０は、アニメーション８１６を生成したアプリケーションによって指定される。他の幾つかのシナリオにおいては、「ツウ」値８２０は指定されず、このため基準「ツウ」値が使用されることとなる。幾つかの実施例においては、これら「ツウ」および「フロム」値は、上述のアニメーション記憶オブジェクト内に格納される。更に、アニメーション８０８は、アニメーション８１６のみがプロパティの値に影響を及ぼすように解除される。アニメーション８１６が実行している間に、（アニメーション８１６に従って変化する）プロパティの値が、スクリーンがリフレッシュされる度に計算され、レンダリング値８２２として出力される。
【００８９】
ハンドオフ挙動が「スナップショットと保持（ｓｎａｐｓｈｏｔ  ａｎｄ  ｒｅｔａｉｎ）」である場合には、アニメーション８０８が解除されることはない。更に、アニメーション８０８は、継続して実行することを許されるが、しかし、プロパティの値は、アニメーション８１６のみを使用して計算される（すなわち、アニメーション８０８は無視される）。その後、アニメーション８１６が完了した時点で、アニメーション８０８が、アニメーション８１６にて生成されたプロパティの直近値を用いて再開される。同様にして、もしハンドオフ挙動が「スナップショットと保持／休止（ｓｎａｐｓｈｏｔ  ａｎｄ  ｒｅｔａｉｎ／ｐａｕｓｅ）」であるときも、アニメーション８０８は解除されない。そして、このときは、アニメーション８０８は、それが、アニメーション８１６が開始されたとき有していた状態に休止することを許され、プロパティの値はアニメーション８１６のみを用いて計算される。その後、アニメーション８１６が完結した時点で、アニメーション８０８が、アニメーション８０８が休止されたときのプロパティの値を使用して再開される。
【００９０】
図９は、１つの実施例に従う、階層化されたアニメーション間の関係の表示である。この実施例においては、アプリケーション（例えば、図６のアプリケーション２０２）にて、論理的に階層に配列された数個のアニメーションを有するビジュアルオブジェクト９００が定義される。この例においては、ビジュアルオブジェクトは層９０２−１から９０２−Ｎを含む。層９０２−１は、アニメーション９０４−１Ａとアニメーション９０４−１Ｂとを含み、層９０２−２は、アニメーション９０４−２Ａとアニメーション９０４−２Ｂとを含み、そして、同じように、アニメーション９０４ＮＡとアニメーション９０４ＮＢとを含む層９０２−Ｎまで続く。この例においては、Ｎ個の層が存在し、各層は２個のアニメーションを含むが、層の数と、層当たりのアニメーションの数は、アプリケーション開発者の設計の選択に依存して変えることができる。
【００９１】
１つの実施例においては、第１の層９０２−１は（プロパティトリガとは対照的に）イベントトリガにて開始されるアニメーションの全てを含むように定義される。こうして、層２からＮまでのアニメーションについては、プロパティトリガにて開始される。幾つかの実施例においては、各層は単一のプロパティトリガと関連し、そのプロパティトリガにて開始される単一あるいは複数のアニメーションを含む。更に、この実施例においては、実行しているアニメーションは、第１の層９０２−１からＮ番目の層９０２Ｎへの順番にて遂行される。更に、この実施例においては、ある層内のアニメーションは、スナップショットを含むハンドオフ挙動（例えば、表１に説明されているような「スナップショットと置換（Ｓｎａｐｓｈｏｔ  ａｎｄ  Ｒｅｐｌａｃｅ）」、「スナップショットと保持（Ｓｎａｐｓｈｏｔ  ａｎｄ  Ｒｅｔａｉｎ）、「スナップショットと保持／休止（Ｓｎａｐｓｈｏｔ  ａｎｄ  Ｒｅｔａｉｎ／Ｐａｕｓｅ）」および／または合成（ｃｏｍｐｏｓｉｔｉｏｎ）にて定義され、一方、層間の遷移は、合成ハンドオフ挙動を有する。合成ハンドオフ挙動の一例が後に図１０との関連で説明される。
【００９２】
幾つかの実施例においては、ある層内の合成の優位性が予め定義される。より高い優先のアニメーションにて出力された値が、次のより低い優先のアニメーションに対する「フロム」値として用いられる。
【００９３】
１つの実施例においては、優先は以下のように定義される：（１）スタイルからトリガされたアニメーション。層内の複数の「スタイル（ｓｔｙｌｅ）」にてトリガされたアニメーションに対する優先はそれらがそのマークアップあるいはコード内において出現する順番にて定義される；（２）ローカルエレメントトリガからトリガされたアニメーション。層内の複数の「ローカルエレメント（ｌｏｃａｌ  ｅｌｅｍｅｎｔ）」にてトリガされたアニメーションに対する優先はそれらがそのマークアップあるいはコード内において出現する順番にて定義される；（３）ストーリーボードあるいは方法呼から適用されたアニメーション。複数の「ストーリーボード／方法呼から適用された（ｓｔｏｒｙｂｏａｒｄ／ｍｅｔｈｏｄ  ｃａｌｌ  ａｐｐｌｉｅｄ」アニメーションに対する優先は、それらが適用された順番にて定義される。
【００９４】
幾つかの実施例においては、ある層のアニメーションの全てが退出した時点で、その層は除去される。層は、層の「スタック（ｓｔａｃｋ）」内のどの位置からも除去することができる。
【００９５】
図１０は、１つの実施例に従う、２つのアニメーションの合成を示す。この実施例においては、まだアニメートされていないプロパティ１００２は基準値１００４を有する。１つの実施例においては、基準値はプロパティシステム、例えば、上述のプロパティシステム３１４（図３、６）内に格納される。
【００９６】
プロパティに影響を及ぼす（図１０ではアニメーションＡと表示）アニメーション１００８が開始されるとき、典型的には基準値１００４がアニメーション１００８に対する「フロム」値１０１０として使用される。アニメーション１００８の「ツウ」値１０１２は、アニメーション１００８を生成したアプリケーション（例えば、図６のアプリケーション２０２）にて指定される。１つの実施例においては、これら「ツウ」および「フロム」値は、アニメーション記憶オブジェクト、例えば、アニメーション記憶オブジェクト６０６（図６）内に格納される。図１０には示されていないが、アニメーション１００８が自動的に実行している間に、（アニメーション１００８に従って変化する）プロパティの値が、スクリーンがリフレッシュされる度に計算され、「レンダリング」値として、グラフィックサブシステム、例えば、グラフィックサブシステム２１２（図３、６）に供給される。
【００９７】
この例においては、（図１０においてアニメーションＢとして示される）アニメーション１０１６は、アニメーション１００８が完結する前に開始される。この例においては、アニメーション１０１６は、「合成」挙動を有するように構成される。「スナップショットと置換」挙動とは対照的に、アニメーション１００８は、継続して実行し、このためこのプロパティの瞬間値は引き続いて更新される。しかし、アニメーション１００８からの結果としてのプロパティの瞬間値は、「レンダリング」値としては用いられない。そして、ここでは、アニメーション１００８の結果として計算されるこの瞬間値は、アニメーション１０１６の「フロム」値１０１８として、一種の中間値として用いられる。アニメーション１０１６の「ツウ」値１０２０は、アニメーション１０１６を生成したアプリケーションにて指定される。幾つかの実施例においては、これら「ツウ」および「フロム」値は、上述のアニメーション記憶オブジェクト内に格納される。アニメーション１０１６からの結果としてのプロパティの値が、次に「レンダリング」値１０２２として用いられる。アニメーション１００８および１０１６が実行している間に（アニメーション１００８と１０１６の合成に従って変化する）プロパティの値が、スクリーンがリフレッシュされる度に計算され、「レンダリング」値１０２２として出力される。
【００９８】
この明細書を通じて、「１つの実施例（ｏｎｅ  ｅｍｂｏｄｉｍｅｎｔ）」、「実施例（ｅｍｂｏｄｉｍｅｎｔ）、あるいは「実施例（ｅｘａｍｐｌｅ  ｅｍｂｏｄｉｍｅｎｔ）」が用いられているが、これは、特定の説明されるフィーチャ、構造、あるいは特徴が、少なくとも１つの実施例内に含まれることを意味する。従って、このような語句が使用されている場合、これはただ１つではなく、複数の実施例を意味することもある。更に、説明されたフィーチャ、構造あるいは特徴は、１つあるいは複数の実施例内に任意の適当なやり方にて組み合わせて用いることもできる。
【００９９】
しかしながら、当業者においては理解できるように、本発明は、１つあるいは複数のこれらの細部を省いても、あるいは他の方法、リソース、材料、その他と組み合わせても、実施することができる。他のケースにおいては、周知の構造、リソース、あるいは動作は、単に本発明の態様を不明瞭にすることを避けるため、示されていないかまたは詳細には説明されていない。
【０１００】
実施例および用途について説明されたが、本発明は上述の具体的な構成およびリソースに制限されるものではなく、当業者に明白な様々な修正、変更、およびバリエーションを、ここに開示された方法およびシステムの配列、動作、および細部に、ここに請求される発明の範囲から逸脱することなく、加えることができると理解されるべきである。
【図面の簡単な説明】
【０１０１】
【図１】様々な実施例を中に組み込むことができる例示的コンピュータシステムを表すブロック図である。
【図２】１つの実施例に従う、メディア統合層アーキテクチャを表すブロック図である。
【図３】１つの実施例に従う、ビジュアルＡＰＩ層とインタフェースするためにマークアップ言語コードを解釈するためのコンポーネントの表示である。
【図４】１つの実施例に従う、クロックプロパティデータを、進行データを決定するときに用いるためのインターバルに変換するためのタイミングコンポーネントを有する２レベルアーキテクチャを概略的に表すブロック図である。
【図５】１つの実施例に従う、クロックプロパティデータを、進行データを決定するときに用いるためのインターバルに変換するためのタイミングコンポーネントを有する２レベルアーキテクチャを概略的に表すブロック図である。
【図６】１つの実施例に従う、リッチなメディア間の滑らかな遷移を提供するためのシステムを概略的に表すブロック図である。
【図７】１つの実施例に従う、ハンドオフ動作を遂行するときの動作フローを概略的に表すブロック図である。
【図８】１つの実施例に従う、ハンドオフ動作を使用しての２つのアニメーション間の遷移の表示である。
【図９】１つの実施例に従う、階層化されたアニメーション間の関係の表示である。
【図１０】１つの実施例に従う、２つのアニメーションの合成の表示である。
【図１】
2009501388.tif 000004
【図２】
2009501388.tif 000005
【図３】
2009501388.tif 000006
【図４】
2009501388.tif 000007
【図５】
2009501388.tif 000008
【図６】
2009501388.tif 000009
【図７】
2009501388.tif 000010
【図８】
2009501388.tif 000011
【図９】
2009501388.tif 000012
【図１０】
2009501388.tif 000013
【国際調査報告】
2009501388.tif 000014