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

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

編輯:關於C語言
外的,我們也可以使用類似的方法在精靈停止跑動時或死亡時移除掉對應的Storyboard以釋放資源。

以創建精靈對象AI為目的的重構完成後,接下來需要進行具體功能的實現—如何啟動AI?

從原理上我們可以這樣設定:每個怪物精靈賦予一個索敵范圍(視線距離)SeekRange,當玩家進入這個區域後他就會將攻擊對象鎖定為玩家並向其發起攻擊;該索敵范圍同樣為以怪物精靈X、Y坐標為圓心,以視線距離為半徑的圓,判斷方法可以復用上一節中的InCircle():

大家在玩網游的時候是否注意到,玩家引怪容易,甩怪卻需要更長一些的時間與距離。難道我們還得多設定一個OutRange來定義擺脫怪物視線的距離?這裡其實有個小技巧,僅僅SeekRange一個參數就夠了。我們可以將怪物索敵方法放在游戲的輔助線程的異步方法中,這樣怪物每間隔1秒進行1次掃描,因此主角在與怪物距離小於SeekRange時即會引上怪,而只有當主角與怪物的距離大於SeekRange並持續1秒後才能甩掉怪物,這樣就間接的產生了兩個距離:索敵距離與擺脫距離:

private void RefreshFace(){

  ……

if (spirit.VLife != 0

&& Super.InCircle(Leader.X, Leader.Y, spirit.X, spirit.Y, spirit.SeekRange)

&& IsOpposition(spirit, Leader)) {

   spirit.LockObject = Leader.Name;

   } else {

    spirit.LockObject = null;

   }

  ……

}

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