程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
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語言

三個循環分別構建了上圖中的三處障礙物,這幾章都對它進行了修改,大家應該再熟悉不過了。接下來就是遮擋物那兩棵樹了,這裡我用Image控件作為遮擋物的容器:

//創建遮罩層
Image Mask1 = new Image();
Image Mask2 = new Image();
private void InitMask() {
 Mask1.Width = 238;
 Mask1.Height = 244;
 Mask1.Source = new BitmapImage((new Uri(@"Map\Mask1.png", UriKind.Relative)));
 Mask1.Opacity = 0.7;
 CarrIEr.Children.Add(Mask1);
 Canvas.SetZIndex(Mask1, 10000);
 Canvas.SetLeft(Mask1, 185);
 Canvas.SetTop(Mask1, 220);
 Mask2.Width = 198;
 Mask2.Height = 221;
 Mask2.Source = new BitmapImage((new Uri(@"Map\Mask2.png", UriKind.Relative)));
 Mask2.Opacity = 0.7;
 CarrIEr.Children.Add(Mask2);
 Canvas.SetZIndex(Mask2, 10000);
 Canvas.SetLeft(Mask2, 466);
 Canvas.SetTop(Mask2, 11);
}

這樣就將遮擋物加入進了游戲窗體。有了前面那麼多章節關於Image控件的使用知識,上面的代碼應該不難理解。這裡特別要說一下的是為什麼要將它們的Opacity設置為0.7:因為這樣的遮擋物會有一定的透明度,當角色置身其中時會若隱若現,從而達到真實模擬MMORPG的效果。至於為什麼要將遮擋物的Zindex屬性設置為10000呢?這關系到游戲運行時地圖中不光只有一個角色,還會有非常多的物體及對象角色的存在,它們之間也同樣有著相互遮擋與被遮擋的關系。而在WPF/Silverlight游戲中,物體的遮擋順序一樣可以使用畫家算法,該算法原理簡單描述就是近物遮擋遠物,幸運的是在WPF/Silverlight中,我們可以很方便的只要動態更新(一個對象的Zindex屬性)=(它的Y屬性)即可以巧妙的實現此效果,是不是有點邪惡?嘿嘿。所以要將遮蓋物的ZIndex設置得足夠大以防止任何一個物體它的Y屬性大過遮蓋物的Zindex屬性,從而造成畫面顯示BUG。

其他的代碼均和第九章的一樣,到這,本節的目標已經達到了。那麼讓我們運行測試一下吧:

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