ExpressionAnimation 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
組合動畫,使用數學方程式來計算每個畫面的動畫屬性的值。
public ref class ExpressionAnimation sealed : CompositionAnimation
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class ExpressionAnimation final : CompositionAnimation
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 131072)]
class ExpressionAnimation final : CompositionAnimation
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class ExpressionAnimation : CompositionAnimation
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 131072)]
public sealed class ExpressionAnimation : CompositionAnimation
Public NotInheritable Class ExpressionAnimation
Inherits CompositionAnimation
- 繼承
- 屬性
Windows 需求
裝置系列 |
Windows 10 (已於 10.0.10240.0 引進)
|
API contract |
Windows.Foundation.UniversalApiContract (已於 v1.0 引進)
|
範例
void AnimateOpacity()
{
// The Expression below will animate the opacity of the target Visual based on its position to the edge of the window.
ExpressionAnimation exp = _compositor.CreateExpressionAnimation();
float xWinSize = (float) Window.Current.Bounds.Width;
SpriteVisual targetVisual = _compositor.CreateSpriteVisual();
// Define the Expression Equation and references
exp.Expression = "this.Target.Offset.X / xWindowSize";
exp.SetScalarParameter("xWindowSize", xWinSize);
// Attach the animation to the target Opacity property
targetVisual.StartAnimation("Opacity", exp);
}
// Creates an Expression that calculates the angle between two Visual's Offset vectors
// And assigns it to the RotationAngle of a third Visual
void angleBetweenVectors()
{
SpriteVisual visualA = _compositor.CreateSpriteVisual();
SpriteVisual visualB = _compositor.CreateSpriteVisual();
SpriteVisual lineVisual = _compositor.CreateSpriteVisual();
lineVisual.Size = new Vector2(50.0f, 5.0f);
var rotationAnimation = _compositor.CreateExpressionAnimation();
rotationAnimation.SetReferenceParameter("A", visualA);
rotationAnimation.SetReferenceParameter("B", visualB);
rotationAnimation.Expression = "ACos( ( (A.Offset.X * B.Offset.X) + (A.Offset.Y*B.Offset.Y) + (A.Offset.Z * B.Offset.Z) ) / ( Length(A.Offset) * Length(B.Offset) ) )";
lineVisual.StartAnimation("RotationAngle", rotationAnimation);
}
備註
ExpressionAnimations 的核心可讓開發人員定義數學方程式,以用來計算每個畫面之目標動畫屬性的值。 這與 KeyFrameAnimation s 相反,它會使用插補器來定義動畫屬性在一段時間內的變更方式。 您可以使用 Composition 物件的屬性、數學函式和運算子和 Input 的參考來定義數學方程式。 運算式動畫會開啟門,讓您輕鬆描述黏性標頭和視差等體驗。
如需使用 Composition ExpressionAnimation 的詳細逐步解說,請參閱 動畫概觀檔。
使用 CompostionObject.StartAnimation 和 CompostionObject.StopAnimation 方法來啟動和停止動畫。
如需可產生動畫屬性的清單,請參閱 CompostionObject.StartAnimation的備註。
Expression 動畫為何如此實用?
Expression 動畫的實際威力來自其建立數學關聯性的能力,其中包含對其他物件屬性的參考。 這表示您可以在其他 Composition 物件、區域變數或甚至是組合屬性集中共用值上參考屬性值的方程式。 隨著這些參考隨著時間變更和更新,您的運算式也會一併更新。 除了傳統 KeyFrame 動畫之外,這可開啟更大的可能性,其中值必須是離散且預先定義的 – ExpressionAnimations 可以產生更多動態動畫體驗。
注意事項
ExpressionAnimation 有無限的存留期 – 它們會繼續執行,直到明確停止為止。
數學方程式會以字串形式輸入運算式 ,這可以在建構 ExpressionAnimation 時或藉由變更 屬性個別完成。 如果在建構期間完成,則會設定 屬性。
ExpressionAnimation exp = _compositor.CreateExpressionAnimation(); exp.Expression = "this.Target.Offset.X / xWindowSize";
ExpressionAnimation exp = _compositor.CreateExpressionAnimation("this.Target.Offset.X / xWindowSize");
數學方程式會使用每個畫面來計算動畫屬性的值, (這與使用插補器的 KeyFrameAnimation相較之下)
請注意您計畫產生動畫效果的屬性類型 –您的方程式必須解析為相同的類型。 否則,計算運算式時會擲回錯誤。 如果您的方程式解析為 Nan (number/0) ,系統會使用先前計算的值
使用運算式動畫建立動態動畫 UI 的關鍵,是建立一個方程式,其中屬性的參考或其他值會隨著時間而變更。
附加至動畫屬性時,系統會使用此方程式來計算每個畫面的 屬性值。 這表示如此一來,系統會重新評估所有將驅動方程式變更的參考。 例如,在上述範例中,如果 Visual A 或 B 因另一個動畫或輸入而移動,則線條視覺效果的旋轉角度會因方程式而變更。
建構數學方程式時,有數個不同的元件要記住 (如需每個元件的詳細逐步解說,請參閱動畫概觀) :
運算子、優先順序及關聯性
- Expression 字串支援使用一般數學運算子, (+、-、/、 等) 您預期在任何方程式中使用。
- 評估運算式時,它會遵守 C# 語言規格中所定義的運算子優先順序和關聯性。
屬性參數
- 定義 Expression 時,您可以選擇定義組合視覺效果、屬性集或其他 C# 物件上其他屬性的類型參考。
- 若要在運算式字串中使用 ,請根據類型利用 「SetParameter」 函式,定義運算式字串中所使用的字串及其對應的值。 這些函式會列為最上層 CompositionAnimation 類別的一部分。
Helper 函式和建構函式
- Expression 也可以利用方程式中不同物件類型的函式和建構函式清單。
- 另外還有建構函式方法,會在系統評估方程式時建構物件類型
- 下列會進一步列出每個類型的函式清單
關鍵字
- 運算式也可以利用評估運算式字串時,以不同方式處理數個關鍵字。 請考慮這些關鍵字,而且不能當做屬性參考中的字串索引鍵使用。
- 下列進一步列出的可用關鍵字清單
條件
- 運算式也可以使用三元運算子 (條件條件來利用條件陳述式?ifTrue_expression:ifFalse_expression)
- 三元運算子可以巢狀為 true 或 false 語句的運算式。
Expression 關鍵字
關鍵字 | 描述 |
---|---|
This.StartingValue | 提供要產生動畫效果之原始開始屬性值的參考。 |
This.CurrentValue | 提供屬性目前「已知」值的參考 |
This.FinalValue | 如果定義) 附注:與隱含動畫相關,則提供動畫 (最終值的參考:對於明確而言,與 This.StartingValue 相同 |
Pi | 提供 PI 值的關鍵字參考 |
True / False | 提供 「true」 或 「false」 布林值的參考 |
This.Target | 提供動畫所系結的目標物件的參考。 |
每個類型的運算式函式
純量
函數和建構函數操作 | Description |
---|---|
Abs(Float value) | 傳回代表浮點參數絕對值的浮點數 |
Clamp(Float value, Float min, Float max) | 如果值小於最小值或最大值,則傳回浮點數,如果值大於最小值,則傳回小於最小值或最大值的浮點數。 |
Max (Float value1, Float value2) | 傳回介於 value1 與 value2 之間的更大浮點數。 |
Min (Float value1, Float value2) | 傳回介於 value1 與 value2 之間的更小浮點數。 |
Lerp(Float value1, Float value2, Float progress) | 傳回代表根據進度計算兩個純量值間線性內差補點的浮點數 (注意:進度值介於 0.0 與 1.0 之間) |
Slerp(Float value1, Float value2, Float progress) | 傳回代表根據進度計算兩個浮點數值間球面內差補點的浮點數 (注意:進度值介於 0.0 與 1.0 之間) |
Mod(Float value1, Float value2) | 傳回劃分 value1 與 value2 所產生的浮點數剩餘部分 |
Ceil(Float value) | 傳回四捨五入至更大整數的浮點數參數 |
Floor(Float value) | 傳回四捨五入至更小整數的浮點數參數 |
Sqrt(Float value) | 傳回浮點數參數的平方根 |
Square(Float value) | 傳回浮點數參數的平方 |
Sin (Float value1) Asin (Float value2) | 傳回 Float 參數的 Sin 或 ArcSin |
Cos (Float value1) ACos (Float value2) | 傳回 Float 參數的 Cos 或 ArcCos |
Tan (Float value1) ATan (Float value2) | 會傳回 Float 參數的 Tan 或 ArcTan |
Round(Float value) | 傳回四捨五入至最近整數的浮點數參數 |
Log10(Float value) | 傳回浮點數參數的對數 (基數 10) 結果 |
Ln(Float value) | 傳回浮點數參數的自然對數結果 |
Pow(Float value, Float power) | 傳回增加至特殊次方的浮點數結果 |
ToDegrees(Float radians) | 傳回轉換為度的浮點數參數 |
ToRadians(Float degrees) | 傳回轉換為弧度的浮點數參數 |
Vector2
函數和建構函數操作 | Description |
---|---|
Abs (Vector2 value) | 傳回已將絕對值套用至每個元件的 Vector2 |
Clamp (Vector2 value1, Vector2 min, Vector2 max) | 傳回針對每個個別元件包含限制值的 Vector2 |
Max (Vector2 value1, Vector2 value2) | 傳回針對 value1 和 value2 的每個對應元件執行 Max 的 Vector2 |
Min (Vector2 value1, Vector2 value2) | 傳回針對 value1 和 value2 的每個對應元件執行 Min 的 Vector2 |
Scale(Vector2 value, Float factor) | 傳回將每個向量元件乘以縮放比例係數的 Vector2。 |
Transform(Vector2 value, Matrix3x2 matrix) | 傳回在 Vector2 與 Matrix3x2 間執行線性轉換產生的 Vector2 (亦即向量乘以矩陣)。 |
Lerp (Vector2 value1、Vector2 value2、純量進度) | 傳回代表根據進度計算兩個 Vector2 值間線性內差補點的 Vector2 (注意:進度值介於 0.0 與 1.0 之間) |
Length(Vector2 value) | 傳回代表 Vector2 長度/大小的浮點數值 |
LengthSquared(Vector2) | 傳回代表 Vector2 長度/大小平方的浮點數值 |
Distance(Vector2 value1, Vector2 value2) | 傳回代表兩個 Vector2 值間距離的浮點數值 |
DistanceSquared(Vector2 value1, Vector2 value2) | 傳回代表兩個 Vector2 值間距離平方的浮點數值 |
Normalize(Vector2 value) | 傳回代表已標準化所有元件之參數單位向量的 Vector2 |
Vector2(Float x, Float y) | 使用兩個浮點參數建構 Vector2 |
Vector3
函數和建構函數操作 | Description |
---|---|
Abs (Vector3 value) | 傳回已將絕對值套用至每個元件的 Vector3 |
Clamp (Vector3 value1, Vector3 min, Vector3 max) | 傳回針對每個個別元件包含限制值的 Vector3 |
Max (Vector3 value1, Vector3 value2) | 傳回針對 value1 和 value2 的每個對應元件執行 Max 的 Vector3 |
Min (Vector3 value1, Vector3 value2) | 傳回針對 value1 和 value2 的每個對應元件執行 Min 的 Vector3 |
Scale(Vector3 value, Float factor) | 傳回將每個向量元件乘以縮放比例係數的 Vector3。 |
Lerp(Vector3 value1, Vector3 value2, Float progress) | 傳回代表根據進度計算兩個 Vector3 值間線性內差補點的 Vector3 (注意:進度值介於 0.0 與 1.0 之間) |
Length(Vector3 value) | 傳回代表 Vector3 長度/大小的浮點數值 |
LengthSquared(Vector3) | 傳回代表 Vector3 長度/大小平方的浮點數值 |
Distance(Vector3 value1, Vector3 value2) | 傳回代表兩個 Vector3 值間距離的浮點數值 |
DistanceSquared(Vector3 value1, Vector3 value2) | 傳回代表兩個 Vector3 值間距離平方的浮點數值 |
Normalize(Vector3 value) | 傳回代表已標準化所有元件之參數單位向量的 Vector3 |
Vector3(Float x, Float y, Float z) | 使用三個浮點參數建構 Vector3 |
Vector4
函數和建構函數操作 | Description |
---|---|
Abs (Vector4 value) | 傳回已將絕對值套用至每個元件的 Vector3 |
Clamp (Vector4 value1, Vector4 min, Vector4 max) | 傳回針對每個個別元件包含限制值的 Vector4 |
Max (Vector4 value1 Vector4 value2) | 傳回針對 value1 和 value2 的每個對應元件執行 Max 的 Vector4 |
Min (Vector4 value1 Vector4 value2) | 傳回針對 value1 和 value2 的每個對應元件執行 Min 的 Vector4 |
Scale(Vector3 value, Float factor) | 傳回將每個向量元件乘以縮放比例係數的 Vector3。 |
Transform(Vector4 value, Matrix4x4 matrix) | 傳回在 Vector4 與 Matrix4x4 間執行線性轉換產生的 Vector4 (亦即向量乘以矩陣)。 |
Lerp(Vector4 value1, Vector4 value2, Float progress) | 傳回代表根據進度計算兩個 Vector4 值間線性內差補點的 Vector4 (注意:進度值介於 0.0 與 1.0 之間) |
Length(Vector4 value) | 傳回代表 Vector4 長度/大小的浮點數值 |
LengthSquared(Vector4) | 傳回代表 Vector4 長度/大小平方的浮點數值 |
Distance(Vector4 value1, Vector4 value2) | 傳回代表兩個 Vector4 值間距離的浮點數值 |
DistanceSquared(Vector4 value1, Vector4 value2) | 傳回代表兩個 Vector4 值間距離平方的浮點數值 |
Normalize(Vector4 value) | 傳回代表已標準化所有元件之參數單位向量的 Vector4 |
Vector4(Float x, Float y, Float z, Float w) | 使用四個浮點參數建構 Vector4 |
Matrix3x2
函數和建構函數操作 | Description |
---|---|
Scale(Matrix3x2 value, Float factor) | 傳回將每個矩陣元件乘以縮放比例係數的 Matrix3x2。 |
Inverse(Matrix 3x2 value) | 傳回代表倒數矩陣的 Matrix3x2 物件 |
Matrix3x2 (Float M11、Float M12、Float M21、Float M22、 Float M31、Float M32) | 使用 6 個浮點數參數建構 Matrix3x2 |
Matrix3x2.CreateFromScale(Vector2 scale) | 從代表 scale[scale 的 Vector2 建構 Matrix3x2。X、0.0 0.0, scale.Y 0.0, 0.0 ] |
Matrix3x2.CreateFromTranslation(Vector2 translation) | 從代表翻譯的 Vector2 建構 Matrix3x2[1.0, 0.0, 0.0, 1.0, 翻譯。X,翻譯。Y] |
Matrix3x2.CreateSkew(Float x, Float y, Vector2 centerpoint) | 從兩個 Float 和 Vector2 建構 Matrix3x2[1.0,Tan (y) , Tan(x), 1.0, -centerpoint。Y * Tan (x) , -centerpoint。X * Tan (y) ] |
Matrix3x2.CreateRotation(Float radians) | 從弧度旋轉建構 Matrix3x2[Cos (弧度) 、Sin (弧度) 、 -Sin(radians), Cos(radians), 0.0, 0.0 ] |
Matrix3x2.CreateTranslation(Vector2 translation) | (與 Matrix3x2 的 CreateFromTranslation 完全相同,新一致性) |
Matrix3x2.CreateScale(Vector2 scale) | (與 CreateFromScale for Matrix3x2 完全相同,針對新一致性) 的不同命名 |
Matrix4x4
函數和建構函數操作 | Description |
---|---|
Scale(Matrix4x4 value, Float factor) | 傳回將每個矩陣元件乘以縮放比例係數的 Matrix4x4。 |
Inverse(Matrix4x4) | 傳回代表倒數矩陣的 Matrix4x4 物件 |
Matrix4x4 (Float M11、Float M12、Float M13、Float M14、Float M21、Float M22、Float M23、Float M24、 Float M31, Float M32, Float M33, Float M34, Float M41, Float M42, Float M43, Float M44) | 使用 16 個浮點數參數建構 Matrix4x4 |
Matrix4x4(Matrix3x2 matrix) | 使用 Matrix3x2[matrix.11, matrix.12, 0, 0, 0, 建構 Matrix4x4 matrix.21, matrix.22, 0, 0, 0, 0, 1, 0, matrix.31, matrix.32, 0, 1] |
Matrix4x4.CreateFromScale(Vector3 scale) | 從代表 scale[scale 的 Vector3 建構 Matrix4x4。X, 0.0, 0.0, 0.0, 0.0, scale.Y, 0.0, 0.0, 0.0, 0.0, scale.Z, 0.0, 0.0, 0.0, 0.0, 1.0] |
Matrix4x4.CreateFromTranslation(Vector3 translation) | 從代表翻譯的 Vector3 建構 Matrix4x4[1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 翻譯。X,翻譯。Y,翻譯。Z,1.0] |
Matrix4x4.CreateTranslation(Vector3 translation) | (與 Matrix4x4 的 CreateFromTranslation 完全相同,新一致性) 的不同命名 |
Matrix4x4.CreateScale(Vector3 scale) | (與 Matrix4x4 的 CreateFromScale 完全相同,但新一致性的命名方式不同) |
Matrix4x4.CreateFromAxisAngle(Vector3 axis, Float angle) | 透過代表角度的 Vector3 軸和浮點數建構 Matrix4x4 |
四元數
函數和建構函數操作 | Description |
---|---|
Slerp(Quaternion value1, Quaternion value2, Float progress) | 傳回代表根據進度計算兩個四元數值間球面內差補點的四元數 (注意:進度值介於 0.0 與 1.0 之間) |
Concatenate(Quaternion value1 Quaternion value2) | 傳回代表兩個四元數串連的四元數 (亦即代表合併兩個個別旋轉的四元數) |
Length(Quaternion value) | 傳回代表四元數長度/大小的浮點數值 |
LengthSquared(Quaternion) | 傳回代表四元數長度/大小平方的浮點數值 |
Normalize(Quaternion value) | 傳回已標準化元件的四元數 |
Quaternion.CreateFromAxisAngle(Vector3 axis, Scalar angle) | 透過代表角度的 Vector3 軸和純量建構四元數 |
Quaternion(Float x, Float y, Float z, Float w) | 透過四個浮點數值建構四元數 |
色彩
函數和建構函數操作 | Description |
---|---|
ColorLerp(Color colorTo, Color colorFrom, Float progress) | 傳回代表根據指定進度計算兩個色彩物件間線性內差補點的色彩物件。 (注意:進度值介於 0.0 與 1.0 之間) |
ColorLerpRGB(Color colorTo, Color colorFrom, Float progress) | 傳回代表根據 RGB 色彩空間中指定進度,計算兩個物件間線性內差補點的色彩物件。 |
ColorLerpHSL(Color colorTo, Color colorFrom, Float progress) | 傳回代表根據 HSL 色彩空間中指定進度,計算兩個物件間線性內差補點的色彩物件。 |
ColorRGB (Float a、Float r、Float g、Float b) | 建構物件,代表 ARGB 元件所定義的色彩。 (注意:ARGB 元件介於 0.0 到 255.0 之間) |
ColorHsl(Float h, Float s, Float l) | 建構代表由 HSL 元件定義色彩的物件 (注意:色調值的定義範圍為 0 至 2pi 之間) |
屬性
Comment |
要與 CompositionObject 建立關聯的字串。 (繼承來源 CompositionObject) |
Compositor |
用來建立這個CompositionObject的Compositor。 (繼承來源 CompositionObject) |
Dispatcher |
CompositionObject的發送器。 (繼承來源 CompositionObject) |
DispatcherQueue |
取得 CompostionObject 的 DispatcherQueue 。 (繼承來源 CompositionObject) |
Expression |
指定動畫值如何計算每個畫面的數學方程式。 Expression 是 ExpressionAnimation 的核心,代表系統將用來計算每個畫面之動畫屬性值的方程式。 方程式會以字串的形式,在此屬性上設定。 雖然運算式可由簡單的數學方程式定義,例如 「2+2」,但真正的能力在於建立數學關聯性,其中輸入值可以在框架上變更框架的框架。 |
ImplicitAnimations |
附加至這個 物件的隱含動畫集合。 (繼承來源 CompositionObject) |
InitialValueExpressions |
取得動畫的初始值。 (繼承來源 CompositionAnimation) |
Properties |
與 CompositionObject相關聯的屬性集合。 (繼承來源 CompositionObject) |
Target |
動畫的目標。 (繼承來源 CompositionAnimation) |