广告广告
  加入我的最爱 设为首页 风格修改
首页 首尾
 手机版   订阅   地图  繁体 
您是第 2925 个阅读者
 
发表文章 发表投票 回覆文章
  可列印版   加为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.079819 second(s),query:16 Gzip disabled
本站由 瀛睿律师事务所 担任常年法律顾问 | 免责声明 | 本网站已依台湾网站内容分级规定处理 | 连络我们 | 访客留言