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

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

編輯:關於C語言

已經能完美捕捉想要的精靈了,但是如何讓被捕獲的精靈進行特效顯示呢?目前的網絡游戲中最常用的方式有兩種:1、對被捕獲的精靈進行描邊;2、讓被捕獲的精靈半透明化。

第一種方法的實現需要首先為精靈控件中的身體部分控件添加一個WPF專有的OuterGlowBitmapEffect效果:

<Image x:Name="Body" Stretch="Fill">

 <Image.BitmapEffect>

  <OuterGlowBitmapEffect GlowColor="Blue" GlowSize="5" Noise="0" Opacity="1" />

 </Image.BitmapEffect>

< /Image>

具體意思就是在精靈身體圖片不透明區域進行外發光:藍色,5像素寬,無噪音,完整透明度。其運行效果如下圖:

看到這張圖的時候或許大家開始有些欣喜若狂了,但是我想告訴大家:此方法絕對的行不通,為什麼?一方面此方法只能在WPF中使用,它的原理是時時動態查找圖片不透明區域的邊緣,然後對邊緣路徑進行發光濾鏡處理;而另一方面由於它是對圖片源不透明區域進行時時的邊緣查找,將極大的占用游戲的界面線程資源,是極其不友好的表現方式。

因此,為了同時適應WPF/Silverlight,我使用第二種方法作為最終解決方案。這種方法實現起來簡單多了,只需要在前面代碼的基礎上加進行如下更改:

private void Window_MouseMove(object sender, MouseEventArgs e) {

……

if (SpiritList.Count > 0) {

 bool targetIsFound = false;

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

  if (!targetIsFound && isEfficaciousSection(SpiritList[i].EfficaciousSection, e.GetPosition(SpiritList[i]))) {

   this.Cursor = Super.getCursor(1);

   SpiritList[i].Opacity = 0.6;

   targetIsFound = true;

   label3.Content = SpiritList[i].Name;

  } else {

    if (!targetIsFound) { this.Cursor = Super.getCursor(0); }

  SpiritList[i].Opacity = 1;

  }

  }

 }

}

在鼠標移動事件中僅僅增改6行代碼即可以輕松的實現,運行效果如下:

到此為止即完美實現了對精靈的精確捕獲。忽忽,是不是感覺向完整的游戲框架目標又邁出了一大步?

在此,我還想對那些極端的朋友說一下:由於目前暫時采用多線程結構,在單核CPU電腦以及Win2003以前的操作系統上運行時,怪物密集的地方會有些卡。但是這根本代表不了游戲引擎的最終性能,教程還有非常非常多的內容沒有講到,優化的技術還在後面呢,太多了就不一一羅列了,大家應該都明白本系列既然取名為教程,代表的就是一個由淺入深的過程,很多人連基礎原理都沒弄清楚,源碼對你有何意義?

小結:HitTest功能強大到幾乎無所不能,它是我們實現打怪與施放魔法的前提條件。下一節我將講解精靈面板界面,以及精靈3大基本屬性(生命、魔力、經驗值)表現形式的實現方法,敬請關注。

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