|
发表于 2010-10-14 03:52:19
|
显示全部楼层
于是... 三种算法汇总如下
方法一:用攻击者面向角度替代两点角度
缺点:转身攻击会导致误差,用山丘之王(近战)打大城堡(大碰撞体积)测试,接受伤害事件误差在+-10度以内~ 被攻击事件误差可以上百
A=攻击者面向角度
B=被攻击者面向角度
C=A-B
if (C>90 and C<270) or (C<-90 and C>-270) then
//不是背刺
else
//是背刺
endif
方法二:两点间距离与被攻击者面向比较
(Xa,Ya)=攻击者位置
(Xb,Yb)=被攻击者位置
x=Xb-Xa | y=Yb-Ya | A=arctan(y/x) | if x<0 then | A=A+180 | elseif y<0 then | A=A+360 | endif |
//灰色部分jass里一个Atan2就有了,触发器就是两点角度
A=Atan2(Xb-Xa,Yb-Ya)
B=被攻击者面向角度
C=A-B
if (C>90 and C<270) or (C<-90 and C>-270) then
//不是背刺
else
//是背刺
endif
方法三:向量点积
(Xa,Ya)=攻击者位置
(Xb,Yb)=被攻击者位置
//Va=(Xb-Xa,Yb-Ya)
B=被供给者面向角度
//Vb=(cos(B),sin(B))
C=Va·Vb=(Xb-Xa)*cos(B)+(Yb-Ya)*sin(B)
if C>0 then
//是背刺
else
//不是背刺
endif |
|