這不是沒完沒了了呀?而且這還是左上區域的實現代碼,還有其他8個區域呢?維護起來不成了是典型的牽一發而動全身?
不提我還真差點給忘記了,如何將這些對象物體控件進行一個歸類呢?分析:首先這些控件均為用戶控件,用戶控件繼承自UserControl類;這道好了,在C#中只能單類繼承,UserControl類在用戶控件出生的時候就已經將這個尊位給踞為己有,哎,雜辦可好??郁悶之時,接口天籁般的魔音再次缭繞於我的耳邊:老大,還有我們捏!對呀!差點把軟哥賜予我們神聖的接口姐妹給忘了。使用接口即可以對這眾多的對象物體用戶控件進行規范,又能被類一對多繼承,很酷不是嗎?
那麼接下來我們添加一個接口取名叫:QXObject.cs,並對其進行如下設定:
interface QXObject {
int CenterX { get; set; }
int CenterY { get; set; }
double X { get; set; }
double Y { get; set; }
……
}
如此一來,只要對繼承此接口的類設定好如上屬性,再對現有的QXSpirit與QXMap兩個控件添加對此接口的繼承:
public partial class QXSpirit : UserControl, QXObject { …… }
public partial class QXMap : UserControl, QXObject { …… }
最後再次對前面的方法進行如下修改:
……
for (int i = 0; i < CarrIEr.Children.Count; i++) {
if (CarrIEr.Children[i] is QXObject) {
QXObject Object = CarrIEr.Children[i] as QXObject;
Canvas.SetLeft(Object, Object.X - Object.CenterX);
Canvas.SetTop(Object, Object.Y - Object.CenterY);
Canvas.SetZIndex(Object, Convert.ToInt32(Object.Y));
}
}
……
忽忽,大功告成!
當我們將AllMove()的9區域代碼均補充完整後,替換掉第二十節中的AllMove()方法,其他的代碼一個也不用改,結果就像變魔術一樣,地圖的移動模式轉眼由牽引式地圖移動模式轉變成主位式地圖移動模式,地圖、遮罩、就連障礙物都同樣的被無縫移植了,這難道不是奇跡嗎?欣賞一下自己的勞動成果吧:
瞬間的模式轉換是否讓大家感到措手不及,匆忙中讓太多的代碼與屬性顯得臃腫冗余且無章可循,那麼下一節我將對本教程源碼進行第一次大規模重構,從設計升華到藝術,這是每一位開發者無上的追求,敬請關注。