做到這,有朋友忍不住要問了:
對於遍歷子控件,我可拿手了,用Foreach不是更能勝任,為何還要用老土的For呢?
深藍色:這涉及到在Foreach中動態添加和刪除子控件的問題。舉個最簡單的例子,游戲中有一個怪物(monster),你一個如來神掌不小心把它給掛了(monster.Life=0),那麼畫布就需要對其控件進行移除(Carrier.Children.Reomve(monster));好,此時問題來了,CarrIEr.Children這個Collection集合的內容發生了變化(少了一個monster),這將導致系統十分的不高興:*的!誰動了我的怪!(拋出InvalidOperationException異常),這就是臭名昭著的在Foreach遍歷中由於對Collection內容進行更改而引發的血案!如何屏蔽它?用Try{}Catch{}?我非常拒絕在我的代碼中出現這對兄弟,還剩下誰?惟有善良且和諧的For能肩此重任。
又有朋友問了:我們先判斷了子控件是否為QXSpirit類型,恩,這很好很強大;但是後面接著將地圖和遮罩當作Image來判斷是不是有些太牽強?
深藍色:嘿嘿!等你多時了。偉大的地圖控件華麗登場:
有了第十四節關於創建精靈控件的知識,這地圖控件只需要依葫蘆畫瓢,整一個輕松。那麼我們依照第十四節中創建QXSpirit控件的方法,在Controls文件夾上點右鍵添加一個用戶控件,取名叫QXMap
並為其添加如下屬性:
#region (地圖表層/遮罩)屬性
// 地圖關鍵點X定位到左上角0>
public int CenterX { get{…}; set{…}; }
// 地圖關鍵點Y定位到左上角0
public int CenterY { get{…}; set{…}; }
// 地圖X坐標
public double X { get{…}; set{…}; }
// 地圖Y坐標
public double Y { get{…}; set{…}; }
// 地圖寬
public double Width_ { get{…}; set{…}; }
// 地圖高
public double Height_ { get{…}; set{…}; }
// 地圖圖片源
public ImageSource Source { get{…}; set{…}; }
// 地圖透明度
public double Opacity_ { get{…}; set{…}; }