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

每執行一次過濾器後,我們必須重復以上過程繼續向更深層次進行捕獲,因此在HitTest結果HitResult中執行繼續操作以供向下個節點輪循:

public HitTestResultBehavior HitResult(HitTestResult result) {

 return HitTestResultBehavior.Continue;

}

HitFilter和HitResult是HitTest中控制流程非常重要的參數,定義完它兩後接下來我們在窗體的鼠標移動事件中進行如下HitTest命中測試:

private void Window_MouseMove(object sender, MouseEventArgs e) {

 SpiritList.Clear();

 Point p = e.GetPosition(CarrIEr);

 VisualTreeHelper.HitTest(

 CarrIEr,

 new HitTestFilterCallback(HitFilter),

 new HitTestResultCallback(HitResult),

 new PointHitTestParameters(p));

 if (SpiritList.Count > 0) {

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

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

    this.Cursor = Super.getCursor(1);

    label3.Content = SpiritList[i].Name; //調試用

    break;

   } else {

    this.Cursor = Super.getCursor(0);

   }

  }

 }

}

每次鼠標移動的時候我們必須清空精靈容器,然後對鼠標當前的點在CarrIEr中的位置進行點擊測試,通過前面的HitFilter和HitResult過濾後得到所有位於鼠標位置的精靈放進容器,然後遍歷精靈容器裡的所有精靈,只有當該點位於精靈Canvas裡的位置處於精靈的有效實體區域時,才算真正的捕獲到了精靈。一旦捕獲到了精靈則同時更改鼠標光標為1號光標然後退出循環;這裡我為了測試是否精確的捕獲了精靈對象,設置了名叫label3的文本來顯示抓取到的精靈名字。

到此就完成了整個HitTest精確捕獲精靈流程,下面我在地圖密集的區域內添加30個擁有不同的名字的怪物精靈,然後嘗試移動鼠標去分別捕獲,通過label3中的名字顯示該方法實現起來是極其准確的,比衛星定位還要精確與高效^_^||:

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