LibGDX-2-获取两个点的角度
前言
一般来说,在一些游戏中,会有一些追着你砍的怪物。实现这种功能,需要获取主角在自己的哪个方向。也就是获取一个点在另一个点的角度。LibGDX并没有实现这种功能的函数,但我们可以自己实现。
思路
如图所示:
设另一个点为(x2,y2)
设
x
=
x
2
−
x
1
x=x2-x1
x=x2−x1
y
=
y
2
−
y
1
y=y2-y1
y=y2−y1
分成八种情况(d为角度):
- 当x>0,y>0,x>y,
则d=0~45: d = y / x ∗ 45 d=y/x*45 d=y/x∗45 - 当x>0,y>0,x<=y,
则d=45~90: d = ( 2 − x / y ) ∗ 45 d=(2-x/y)*45 d=(2−x/y)∗45 - 当x<=0,y>0,-x<=y,
则d=90~135: d = 90 − x / y ∗ 45 d=90-x/y*45 d=90−x/y∗45 - 当x<=0,y>0,-x>y,
则d=135~180: d = 180 + y / x ∗ 45 d=180+y/x*45 d=180+y/x∗45 - 当x<=0,y<=0,x<y,
则d=180~225: d = 180 + y / x ∗ 45 d=180+y/x*45 d=180+y/x∗45 - 当x<=0,y<=0,x>=y,
则d=225~270: d = 270 − x / y ∗ 45 d=270-x/y*45 d=270−x/y∗45 - 当x>0,y<=0,x<-y,
则d=270~315: d = 270 − x / y ∗ 45 d=270-x/y*45 d=270−x/y∗45 - 当x>0,y<=0,x>=-y,
则d=315~0: d = 360 + y / x ∗ 45 d=360+y/x*45 d=360+y/x∗45
代码
具体实现如下:
//返回point2在point1的方向
public static double getFaceDegrees(Vector2 point1,Vector2 point2) {
double x=point2.x-point1.x;
double y=point2.y-point1.y;
double Yx=y/x*45.0;
double Xy=x/y*45.0;
if(x>0) {
if(y>0) {
if(x>y)return Yx;
else return 90-Xy;
}else {
if(x>-y)return 360+Yx;
else return 270-Xy;
}
}else {
if(y>0) {
if(-x>y)return 180+Yx;
else return 90-Xy;
}else {
if(x<y)return 180+Yx;
else return 270-Xy;
}
}
}
注意!该方法误差较大!