ttbs123 发表于 2008-12-16 10:03:48

再回答我这个问题少年一下,如何判断2人之间障碍物

例如玩家A和玩家B,怎么判断他们之间是否一堵墙阻挡或者一个箱子阻挡呢?

ttbs123 发表于 2008-12-16 10:04:45

回复: 再回答我这个问题少年一下,如何判断2人之间障碍物

连续几天问了3个问题,有点不好意思,可是论坛又搜索不到相关资料和插件。。。:confused:

jim_yang 发表于 2008-12-16 12:11:15

回复: 再回答我这个问题少年一下,如何判断2人之间障碍物

stock bool:fm_is_visible(index, const Float:point, ignoremonsters = 0) {
new Float:start, Float:view_ofs;
pev(index, pev_origin, start);
pev(index, pev_view_ofs, view_ofs);
xs_vec_add(start, view_ofs, start);
engfunc(EngFunc_TraceLine, start, point, ignoremonsters, index, 0);
new Float:fraction;
get_tr2(0, TR_flFraction, fraction);
if (fraction == 1.0)
return true;
return false;
}

这个函数是判断index这个人能不能看到point这个点的函数

jim_yang 发表于 2008-12-16 12:15:14

回复: 再回答我这个问题少年一下,如何判断2人之间障碍物

如果你只想判断两人之间是否有障碍物直接使用
两个人坐标分别作为start和point
忽略中间的类人物体可将ignoremonsters设置为1

jim_yang 发表于 2008-12-16 12:19:51

回复: 再回答我这个问题少年一下,如何判断2人之间障碍物

stock bool:fm_is_visible(plA, plB, ignoremonsters = 0) {
new Float:start, Float:point;
pev(plA, pev_origin, start);
pev(plB, pev_origin, point);
engfunc(EngFunc_TraceLine, start, point, ignoremonsters, index, 0);
new Float:fraction;
get_tr2(0, TR_flFraction, fraction);
if (fraction == 1.0)
return true;
return false;
}

ttbs123 发表于 2008-12-16 12:57:43

回复: 再回答我这个问题少年一下,如何判断2人之间障碍物

太感谢jim_yang大哥了,我赶紧去试试。

ttbs123 发表于 2008-12-16 16:05:35

回复: 再回答我这个问题少年一下,如何判断2人之间障碍物

代码有效,但有个小问题。
就是人物模型边缘问题,上面的代码应该是人的中心位置之间是否有障碍物。
例如玩家A站在墙边,看到B玩家的手,但这时会给判断他们之间有障碍物,
有没有办法玩家A完全看不见B玩家才算有障碍物的方法呢?

jim_yang 发表于 2008-12-16 16:12:00

回复: 再回答我这个问题少年一下,如何判断2人之间障碍物

很难实现,模型边缘和实际坐标之间有出入,而且边缘点很多,如果循环判断的话效率很低

ttbs123 发表于 2008-12-16 16:23:27

回复: 再回答我这个问题少年一下,如何判断2人之间障碍物

Post by jim_yang
很难实现,模型边缘和实际坐标之间有出入,而且边缘点很多,如果循环判断的话效率很低
是啊,我用中心点向4边延伸出4个坐标组成一个人物方框来判断,需要循环4次,服务器都lag死了。。。
EngFunc_TraceToss
EngFunc_TraceMonsterHull
EngFunc_TraceHull
EngFunc_TraceModel
EngFunc_TraceTexture
EngFunc_TraceSphere
上面这几个代表什么呢?

jim_yang 发表于 2008-12-16 16:27:45

回复: 再回答我这个问题少年一下,如何判断2人之间障碍物

你可以看看这个帖子
http://forums.alliedmods.net/showthread.php?t=74780&highlight=visible
页: [1] 2
查看完整版本: 再回答我这个问题少年一下,如何判断2人之间障碍物