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

C#開發WPF/Silverlight動畫及游戲系列教程(Game Course):(二十二)(2)

編輯:關於C語言

為了更清晰的比較,大家先看上圖。會做網頁的朋友再熟悉不過了,其中的網頁播放器與廣告均為浮動層,我們通過設置播放器div的left、top樣式值來使之在網頁中絕對定位到相對於網頁左上角的(A,B)這個像素坐標位置;並且播放器的z-index值大於廣告的z-index值,因此前者的顯示層次高於後者。

接下來再看下圖:

大家可以將主角比做網頁中的廣告,將這頭熊雕像遮擋物比做播放器,然後將游戲窗口的布局畫布Canvas(CarrIEr)比做網頁,這樣再根據圖中的注釋,是否覺得兩者幾乎完全一樣。那麼此時大家肯定會想,為何不用類似left、top、z-index這樣簡單的屬性來替代書寫復雜且不易懂的Canvas.getLeft(…)、Canvas.getTop(…)、Canvas.getZIndex(…)等寫法呢。

4、實現,在清晰的理論思路下屬性訪問器呼之欲出。對,就是它了,接下來我們只需為QXMap地圖控件添加如下3個屬性:

/// <summary>
/// 地圖位於父容器中的Canvas.Left位置
/// </summary>
public double Left {
 get { return (double)this.GetValue(Canvas.LeFTProperty); }
 set { this.SetValue(Canvas.LeFTProperty, value); }
}
/// <summary>
/// 地圖位於父容器中的Canvas.Top位置
/// </summary>
public double Top {
 get { return (double)this.GetValue(Canvas.TopProperty); }
 set { this.SetValue(Canvas.TopProperty, value); }
}
/// <summary>
/// 地圖深度(層次)
/// </summary>
public int ZIndex {
 get { return (int)this.GetValue(Canvas.ZIndexProperty); }
 set { this.SetValue(Canvas.ZIndexProperty, value); }
}

此時我們再回到地表層的初始化方法體中進行相應的替換,結果如下:

private void InitMapSurface() {
 MapSurface.Width = 1750;
 MapSurface.Height = 1440;
 MapSurface.Source = BitmapFrame.Create((new Uri(@"Map\0\0.jpg", UriKind.Relative)));
 MapSurface.Left = -320;
 MapSurface.Top = -200;
 MapSurface.Zindex = -1;
 CarrIEr.Children.Add(MapSurface);
}

比起原先的代碼,改進後的不僅書寫優雅,而且更易於理解,這就是重構的重要手法之一。

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