程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#開發WPF/Silverlight動畫及游戲系列教程(Game Course):(二)讓物體動起來②(1)

C#開發WPF/Silverlight動畫及游戲系列教程(Game Course):(二)讓物體動起來②(1)

編輯:關於C語言

第二種方法,CompositionTarget動畫,官方描述為:CompositionTarget對象可以根據每個幀回調來創建自定義動畫。其實直接點,CompositionTarget創建的動畫是基於每次界面刷新後觸發的,與窗體刷新率保持一致,所以頻率是固定的,很難人工介入控制。

那麼如何使用它?xaml的界面代碼還是和上一篇中描述的一樣,這裡不累述了。那麼接下來就是創建對象並注冊事件,全部代碼如下:

Rectangle rect; //創建一個方塊作為演示對象
double speed = 1; //設置移動速度
Point moveTo; //設置移動目標
public Window1() {
 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);
 //注冊界面刷新事件
 CompositionTarget.Rendering += new EventHandler(Timer_Tick);
}

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

CompositionTarget的注冊事件方法為:

CompositionTarget.Rendering += new EventHandler(Timer_Tick);

因為我們要實現的是鼠標點哪方塊就移動到哪,所以我用一個變量moveTo保存鼠標點擊點的Point。並在鼠標左鍵事件中賦值:moveTo = e.GetPosition(CarrIEr);同時設置方塊X,Y方向的速度均為speed。

接下來就是實現Timer_Tick了,它是基於窗體的時時刷新事件。我們這樣寫:

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));
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved