首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

WPF/Silverlight 遊戲開發教程 (3):三大動畫引擎對比 — DispatcherTimer 幀動畫、參數可控、適用於角色個體邏輯

     編輯:關於C#

第三種動畫引擎:DispatcherTimer

DispatcherTimer 基於 UI 執行緒分派器,每隔固定間隔觸發 Tick 事件,類似 CompositionTarget.Rendering 但間隔可自由設定 (毫秒級),優先級可調 (DispatcherPriority),極適合角色個體邏輯:移動、戰鬥、施法、狀態機更新。

完整實作碼


Rectangle rect;
double speed = 5;
Point moveTo;

public Window3()
{
    InitializeComponent();
    rect = new Rectangle { Fill = Brushes.Red, Width = 50, Height = 50, RadiusX = 5, RadiusY = 5 };
    Carrier.Children.Add(rect);
    Canvas.SetLeft(rect, 0); Canvas.SetTop(rect, 0);

    var dt = new DispatcherTimer(DispatcherPriority.Normal);
    dt.Tick += Timer_Tick;
    dt.Interval = TimeSpan.FromMilliseconds(50); // 20 FPS
    dt.Start();
}

private void Carrier_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    moveTo = e.GetPosition(Carrier);
}

private void Timer_Tick(object sender, EventArgs e)
{
    double x = Canvas.GetLeft(rect);
    double y = Canvas.GetTop(rect);
    Canvas.SetLeft(rect, x + (x < moveTo.X ? speed : -speed));
    Canvas.SetTop(rect, y + (y < moveTo.Y ? speed : -speed));
}

四行核心初始化:new DispatcherTimer、+= Tick、Interval、Start()。邏輯極簡:每幀向目標點移動固定像素 speed。

三大動畫引擎橫向對比

實戰選型指南

  • Storyboard:UI 轉場、按鈕縮放、簡單直線移動、屬性漸變
  • CompositionTarget:全域攝影機平滑跟隨、大量粒子同步更新、物理模擬固定時間步長
  • DispatcherTimer:每個精靈/角色一個 Timer,驅動幀動畫、AI 決策、技能 CD、狀態機轉換。本教程後續所有角色邏輯均採用此模式。

DispatcherTimer 進階技巧

  • DispatcherPriority.Background:非關鍵邏輯 (如裝飾特效) 降低優先級,不搶佔輸入回應
  • Interval = TimeSpan.FromMilliseconds(16):近似 60 FPS,用於高頻物理/碰撞檢測
  • 動態調整 Interval:技能施放加速/減速時修改 Timer 間隔,即時改變幀率
  • Stop()/Start():暫停/恢復角色邏輯 (如暫停菜單、眩暈狀態)

下章預告

下一章正式進入2D 角色動畫實作:使用 DispatcherTimer 驅動圖片切換法播放跑步循環動畫,並規範素材標準化流程 (150×150 PNG 透明置中)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
引擎基礎機制間隔控制適用場景優點缺點
Storyboard時間軸插值聲明式 Duration簡單屬性漸變、位移、縮放、旋轉XAML/Code 皆宜、GPU 加速、自動插值難以表達複雜邏輯分支
CompositionTarget.Rendering每幀渲染後回調固定 (螢幕刷新率 ~60Hz)全域同步更新、粒子系統、攝影機跟隨與幀同步、無額外計時器間隔不可控、高頻觸發易卡頓
DispatcherTimerUI 分派器計時器自由設定 (毫秒)、優先級可調角色個體 AI、幀動畫、狀態機、技能冷卻參數靈活、邏輯集中、優先級隔離非 GPU 級插值、需手動計算插值