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

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

編輯:關於C語言

二、完美遮罩層

在C#開發WPF/Silverlight動畫及游戲系列教程(Game Course):(十一)地圖遮罩層的實現 中我曾經講解了如何實現地圖遮罩層。雖然是實現了,但是還有一些小小的瑕疵,如果不屏蔽它,那麼這會很大幅度影響到游戲的畫面效果。

首先我們按照第十一節中說到的方法來截取我們地圖中心的這個標志物,並取名為Mask3.png並且加載到項目Map文件夾中:

接下來我們同樣在後台代碼中初始化它:

//創建遮罩層
Image Mask = new Image();
private void InitMask() {
 Mask.Width = 202;
 Mask.Height = 395;
 Mask.Source = new BitmapImage((new Uri(@"Map\Mask3.png", UriKind.Relative)));
 Mask.Opacity = 0.7;
 CarrIEr.Children.Add(Mask);
 Canvas.SetZIndex(Mask, 612); //其中的612 = Mask的高 + Mask的Y值,由於還沒引進地圖控件暫時這樣寫
}

最後就是在游戲窗口刷新線程中對它也進行時時的更新:

private void Timer_Tick(object sender, EventArgs e) {
 ……
 //遮罩層跟隨移動
 Canvas.SetLeft(Mask, MapLeft + 793);
 Canvas.SetTop(Mask, MapTop + 217);
 //主角跟隨地圖同時移動
 Canvas.SetLeft(Spirit, Spirit.X - Spirit.CenterX + MapLeft);
 Canvas.SetTop(Spirit, Spirit.Y - Spirit.CenterY + MapTop);
 Canvas.SetZIndex(Spirit, (int)Spirit.Y); //時時的更新它的層次(畫家算法)
 ……
}

這裡關鍵的代碼就是黃色部分代碼,我通過Canvas.SetZIndex(Mask, 612)設置了遮擋物的層次處於ZIndex:612這個位置,弄過網頁的同志對Z-Index應該不陌生,它們的意義是一樣的。最後還需要精靈的ZIndex與之配合才能實現完美默契的遮罩效果,因此我們在線程中時時根據精靈的Y坐標來更改它的ZIndex:Canvas.SetZIndex(Spirit, (int)Spirit.Y),這樣就算以後增加了其他的NPC、怪物之類的對象物體,只要同樣的設置它們的ZIndex=Y,即可以完美的實現時時的層次關系。

三、完美換裝

這個就簡單多了,因為之前的章節中已經將相關參數與實現方法都定義好了,那麼剩下的就是如何調用的問題。這裡為了演示方便,我在xaml裡面添加了兩個下拉列表(ComboBox)分別對應衣服及武器的代號,和一個換裝啟動按鈕(本教程目錄中有源碼下載,這裡就不列出來了)。然後我們在此按鈕的點擊事件中只需要3行代碼就可以輕松的實現換裝:

//換裝
private void ChangeEquipment(object sender, RoutedEventArgs e) {
 Spirit.Equipment[0] = Convert.ToInt32(comboBox1.SelectionBoxItem.ToString());
 Spirit.Equipment[1] = Convert.ToInt32(comboBox2.SelectionBoxItem.ToString());
 Spirit.Source = Super.EquipPart(Spirit.Equipment, Spirit.DirectionNum, Spirit.DirectionFrameNum, Spirit.TotalWidth, Spirit.TotalHeight,Spirit.SingleWidth, Spirit.SingleHeight);
}

這三行代碼實在太簡單因此不再多做說明。需要提的是在更換衣服與武器的時候,如果內存中不存在該新衣服與武器搭配,則需要時時的進行合成,這會根據您CPU的速度來決定游戲卡殼的時間,畢竟是一個較大量圖片合成計算。這在網絡游戲中同樣經常會遇到,例如你是否有過這樣的經歷:當你到了一定級別可以更換更高級的武器時,你雙擊該武器的時候,游戲會卡住那麼以下,然後“哐铛”一聲,武器才安裝上去;但是如果你再把這把武器取下,再重新換上時卻一點也不卡,這就是裝備的緩存起到了作用。

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