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

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

編輯:關於C語言

由於地圖與遮罩擁有幾乎一樣的屬性,因此為了簡單且統一化,我只建立一個名為QXMap的控件進行實現(當然,您將之分成QXMap和QXMask兩個控件亦可),下文中為了區分,我均稱地圖為地表圖層(簡稱地表),遮罩為遮罩圖層(簡稱遮罩),這樣可以讓大家更好的理解QXMap的不同實現。回到它的屬性上,其中的X,Y代表坐標,如果是地表則為0,因為它自己相對於自身的坐標當然是(0,0);如果是遮罩,那麼它的X,Y則是它圖片左上角位於地表中的坐標。CenterX,CenterY目前暫時不會用到,因此均默認為0即可;至於其他屬性都很好理解這裡就不再講解。

地圖控件創建完成,接下來我們將原先的:Image Map = new Image();用QXMap MapSurface = new QXMap();代替,Image Mask = new Image(); 用QXMap Mask = new QXMap();代替,並設置好相應的屬性,這樣就完成了通過地圖控件對地表與遮罩的初始化。

到此,第二位朋友的問題已經雲開見日,我們只需輕輕一掃鍵盤:

……

else if (CarrIEr.Children[i] is QXMap) {

//假如是地圖/遮罩

QXMap Map = CarrIEr.Children[i] as QXMap;

Canvas.SetLeft(Map, 0);

Canvas.SetTop(Map, 0);

}

……

這樣完美多了不是,嘿嘿,得瑟一下。

深藍色!我還有問題!

更加深邃了我心中的理念:青春就是熱血與激情!

深藍色!我發誓這是最後一個問題:

你前面不是說游戲後期還會加入怪物(monster)、NPC(npc)等亂七八糟的東西,那麼在判斷的時候不是要這樣寫:

……

for (int i = 0; i < CarrIEr.Children.Count; i++) {

if (CarrIEr.Children[i] is QXSpirit) {

……

} else if (CarrIEr.Children[i] is QXMap) {

……

} else if (CarrIEr.Children[i] is QXMonster) {

……

} else if (CarrIEr.Children[i] is QXNpc) {

……

}

}

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