C#開發WPF/Silverlight動畫及遊戲系列教程(Game Course):(三)讓物體動起來③
第三種方法,DispatcherTimer動畫,該型別動畫與CompositionTarget動畫類似,是基於介面執行緒的逐幀動畫,但他與CompositionTarget動畫不同,DispatcherTimer動畫可以輕鬆的進行引數設定:
xaml介面程式碼仍然沿用第一節的,那麼接下來我們在後臺程式碼中建立相關物件:
Rectangle rect; //建立一個方塊作為演示物件
double speed = 5; //設定移動速度
Point moveTo; //設定移動目標
public Window3() {
InitializeComponent();
rect = new Rectangle();
rect.Fill = new SolidColorBrush(Colors.Red);
rect.Width = 50;
rect.Height = 50;
rect.RadiusX = 5;
rect.RadiusY = 5;
Carrier.Children.Add(rect);
Canvas.SetLeft(rect, 0);
Canvas.SetTop(rect, 0);
//定義執行緒
DispatcherTimer dispatcherTimer = new DispatcherTimer(DispatcherPriority.Normal);
dispatcherTimer.Tick += new EventHandler(Timer_Tick);
dispatcherTimer.Interval = TimeSpan.FromMilliseconds(50); //重複間隔
dispatcherTimer.Start();
}
private void Carrier_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) {
moveTo = e.GetPosition(Carrier);
}
private void Timer_Tick(object sender, EventArgs e) {
double rect_X = Canvas.GetLeft(rect);
double rect_Y = Canvas.GetTop(rect);
Canvas.SetLeft(rect, rect_X + (rect_X < moveTo.X ? speed : -speed));
Canvas.SetTop(rect, rect_Y + (rect_Y < moveTo.Y ? speed : -speed));
}
與上一節的程式碼類似,不同的地方其實也就是宣告動畫執行緒處,共4句:
DispatcherTimer dispatcherTimer = new DispatcherTimer(DispatcherPriority.Normal);
dispatcherTimer.Tick += new EventHandler(Timer_Tick);
dispatcherTimer.Interval = TimeSpan.FromMilliseconds(50);
dispatcherTimer.Start();
第一句申明一個介面計時器DispatcherTimer ,並且設定其執行緒優先順序別為Normal,這是標準設定,你可以根據你自己的需求進行更改,一共10個級別。
第二句註冊Tick 事件,也就是計時器間隔觸發的事件。
第三句設定Tick 事件的間隔,可以有很多方式,我使用的是TimeSpan.FromMilliseconds(),即間隔單位為毫秒。
第四句啟動執行緒。
是不是很簡單?這樣的話可以很輕鬆的通過Interval 來控制重新整理一個物件屬性的頻率了。接下來我們同樣使用Ctrl+F5來測試一下成果。呵呵,結果和第二種動畫方法是一樣的,存在同樣的問題,因為畢竟兩種動畫的原理是一致的。
那麼到此,三種動態建立動畫的方法都已經詳細介紹過了,大家可能會有種感覺,比較鍾情於第一種WPF/Silverlight推薦的Storyboard動畫,既直觀又方便使用,而且彷彿不易出錯。其實這3種動畫都有它特定的使用場合。
第一種動畫適合建立簡單的物件位移及直接性質的屬性更改(在後面的教程中,我還將更深入的挖掘Storyboard動畫的潛力,動態建立更復雜的基於KeyFrame的關鍵幀動畫)。
第二種動畫適合全域性屬性的時時更改,例如我們後面要講到的敵人或NPC以及地圖等全體性的相對位移及屬性更改時就要用到它了。
第三種動畫則非常適合運用在Spirit(角色)的個人動畫中,例如角色的移動,戰鬥,施法等動作。
小結:前三節分別講解了Storyboard動畫,CompositionTarget動畫,DispatcherTimer動畫,並橫向分析了不同的場合對應不同的動畫應用模式,這些將是構成WPF/Silverlight遊戲引擎的基礎。
下一節我將介紹如何使用DispatcherTimer動畫讓物件活起來,敬請關注。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-608605/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- C#開發WPF/Silverlight動畫及遊戲系列C#動畫遊戲
- iOS開發系列–讓你的應用“動”起來iOS
- 讓物體動起來,Unity的幾種移動方式Unity
- Android繪製(三):Path結合屬性動畫,讓圖示動起來!Android動畫
- C#微信開發系列教程C#
- 三維圖形及動畫軟體開發流程 (轉)動畫
- 如何讓開發變得敏捷起來?敏捷
- HTML5遊戲開發(五):飛機大戰之讓所有元素動起來HTML遊戲開發
- 硬體開發系列教程
- 一行程式碼讓你的TableView動起來-iOS動畫行程ViewiOS動畫
- CSS——讓“盒子”動起來:① 浮動CSS
- 03:遊戲主角動起來啦!#python遊戲開發#紅傘傘Python遊戲開發
- 視覺化學習:如何生成簡單動畫讓圖形動起來視覺化動畫
- 不會 Web 開發,也能讓資料“動”起來的開源專案!Web
- C#開發Unity遊戲教程迴圈遍歷做出判斷及Unity遊戲示例C#Unity遊戲
- WPF and Silverlight 學習筆記(一):開發環境及參考資料筆記開發環境
- Silverlight C# 遊戲開發:Balder的3D世界C#遊戲開發3D
- 運動APP能否讓“懶人”動起來?APP
- C#泡泡堂遊戲開發全套系列C#遊戲開發
- Silverlight C# 遊戲開發:Flyer08用Blend做一個新遊戲C#遊戲開發
- 一句話讓圖片動起來,蘋果發力大模型動畫生成,可直接編輯結果蘋果大模型動畫
- 讓人物在地圖上動起來地圖
- Silverlight及WPF中實現自定義BusyIndicatorIndicator
- 基於THINKPHP5 多微信開發框架,讓微信開發飛起來PHP框架
- JS動畫效果——多物體動畫JS動畫
- 運動類App能否讓“懶人”動起來?APP
- C#遊戲開發快速入門教程Unity5.5教程C#遊戲開發Unity
- 遊戲開發雜記(三) 開發及學習過程中的體會遊戲開發
- 讓開源軟體真正用起來在於執行力
- iOS開發 - 動畫實踐系列iOS動畫
- ios開發學習–動畫(Animation)效果原始碼分享–系列教程1iOS動畫原始碼
- WPF3D立方體圖形展開動畫思路3D動畫
- C#開發Unity遊戲教程之判斷語句C#Unity遊戲
- 如何讓Spring Boot 的配置動起來?Spring Boot
- 無需程式碼,Hype可以把設計變成動畫,讓你的創意動起來動畫
- odoo 開發入門教程系列-模組互動Odoo
- C#開發Unity遊戲教程之遊戲物件的屬性變數C#Unity遊戲物件變數
- C#微信公眾號開發系列教程二(新手接入指南)C#