廣告廣告
  加入我的最愛 設為首頁 風格修改
首頁 首尾
 手機版   訂閱   地圖  簡體 
您是第 2897 個閱讀者
 
發表文章 發表投票 回覆文章
  可列印版   加為IE收藏   收藏主題   上一主題 | 下一主題   
xiangxiang
個人文章 個人相簿 個人日記 個人地圖
路人甲
級別: 路人甲 該用戶目前不上站
推文 x1 鮮花 x2
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片
推文 x0
[1.6][插件] npc 動作行走問題

 
我只能讓npc進行直線行走,遇到障礙避开。 求高手幫我把這個代碼修改下,npc能跟蹤id,遇到障礙時會停止行走。
我在實體插件上不是很熟悉。也請高手講解下npc的動作。。

[code][/code]find_way(entid,Float:fOri[3])
{
 new Float:vTrace[3],Float:vTraceEnd[3],Float:hitOri[3],Float:Vel[3],Float:angle[3]
 velocity_by_aim(entid, 64, vTrace)
 vTraceEnd[0] = vTrace[0] + fOri[0]
 vTraceEnd[1] = vTrace[1] + fOri[1]
 vTraceEnd[2] = vTrace[2] + fOri[2]+25
 new hitent=trace_line(entid, fOri, vTraceEnd, hitOri)
 new Float:gdis=vector_distance(fOri,hitOri)
 velocity_by_aim(entid, 45, vTrace)
 vTraceEnd[0] = vTrace[0] + fOri[0]
 vTraceEnd[1] = vTrace[1] + fOri[1]
 vTraceEnd[2] = vTrace[2] + fOri[2]-45
 trace_line(entid, fOri, vTraceEnd, hitOri)
 new Float:gdis2=vector_distance(fOri,hitOri)
 if( gdis2<43 )
 {
  entity_get_vector(entid,EV_VEC_origin,fOri)
  fOri[2]+=10
  entity_set_vector(entid,EV_VEC_origin,fOri)
 }
 entity_get_vector(entid,EV_VEC_velocity,Vel)
 if( hitent || gdis<60 )
 {
  stop_fake(entid)
  entity_get_vector(entid,EV_VEC_v_angle,angle)
  new Float:fnum=random_float(-90.0,90.0)
  angle[1]+=fnum
  angle[1]+=90.0
  entity_set_vector(entid,EV_VEC_v_angle,angle)
  return
 }
 if( Vel[0]==0.0 || Vel[1]==0.0 )
 {
  VelocityByAim(entid,FAKEPLAYERSPEED,Vel)
  Vel[2]=0.0
  vector_to_angle(Vel,angle)
  entity_set_vector(entid,EV_VEC_angles,angle)
  entity_set_vector(entid,EV_VEC_velocity,Vel)
  entity_set_int(entid,EV_INT_sequence,4)
 }
}




獻花 x0 回到頂端 [樓 主] From:未知地址 | Posted:2012-08-16 18:42 |
HsK 手機 會員卡
個人頭像
個人文章 個人相簿 個人日記 個人地圖
特殊貢獻獎 優秀管理員勳章
頭銜:CCN@HsKCCN@HsK
版主
級別: 版主 該用戶目前不上站
版區: CS插件區
推文 x1701 鮮花 x1108
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

用 TraceLine 去取得NPC是否看到玩家
看到的就SET v_angle
看不到就試試避開障礙..
直至看到玩家

不過這玩法比經低效
也可能造成卡住


所以可試試仿效 podbot 的 waypoint
在地圖上製作 [路徑點] (save下每一點的origin)
然後用 get distance.
找到 玩家和那個路徑點 最近...

再以一些計算
計算npc 要經過那一些路徑點 才可到達 最近玩家的路徑點...


HsK-Dev Blog By CCN
獻花 x0 回到頂端 [1 樓] From:未知地址 | Posted:2012-08-16 19:36 |
xiangxiang
個人文章 個人相簿 個人日記 個人地圖
路人甲
級別: 路人甲 該用戶目前不上站
推文 x1 鮮花 x2
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

下面是引用 HsK 於 2012-08-16 19:36 發表的 : 到引言文
用 TraceLine 去取得NPC是否看到玩家
看到的就SET v_angle
看不到就試試避開障礙..
直至看到玩家

不過這玩法比經低效
也可能造成卡住


所以可試試仿效 podbot 的 waypoint
在地圖上製作 [路徑點] (save下每一點的origin)
然後用 get distance.
找到 玩家和那個路徑點 最近...

再以一些計算
計算npc 要經過那一些路徑點 才可到達 最近玩家的路徑點...



這樣不是很懂,能具體點嗎


獻花 x0 回到頂端 [2 樓] From:未知地址 | Posted:2012-08-16 20:02 |
husano896 手機
個人頭像
個人文章 個人相簿 個人日記 個人地圖
初露鋒芒
級別: 初露鋒芒 該用戶目前不上站
推文 x79 鮮花 x138
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

Hsk大的講法是

假設有路點1 路點2 路點3

npc在路點1 而玩家離路點3最近

經過計算後 使npc路徑為 路點1--路點2--路點3--玩家

而遇到障礙物的部分 可以嘗試用engfunc(EngFunc_TraceHull)處理


這邊流動率真的挺低的'w' 但我是有在看的哦w
也許哪天被我亂入也說不定(!?

按這裡檢視影片,登入論壇可以直接觀看
*ZP*沒爆頭回合不結束

↓吃瀏覽數長大的龍:)
獻花 x0 回到頂端 [3 樓] From:臺灣中華電信股份有限公司 | Posted:2012-08-18 08:08 |

首頁  發表文章 發表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.014757 second(s),query:16 Gzip disabled
本站由 瀛睿律師事務所 擔任常年法律顧問 | 免責聲明 | 本網站已依台灣網站內容分級規定處理 | 連絡我們 | 訪客留言