LibGDX_获取两个点的角度

LibGDX-2-获取两个点的角度

前言

一般来说,在一些游戏中,会有一些追着你砍的怪物。实现这种功能,需要获取主角在自己的哪个方向。也就是获取一个点在另一个点的角度。LibGDX并没有实现这种功能的函数,但我们可以自己实现。

思路

如图所示:
坐标关系

设另一个点为(x2,y2)

x = x 2 − x 1 x=x2-x1 x=x2x1
y = y 2 − y 1 y=y2-y1 y=y2y1
分成八种情况(d为角度):

  • 当x>0,y>0,x>y,
    则d=0~45: d = y / x ∗ 45 d=y/x*45 d=y/x45
  • 当x>0,y>0,x<=y,
    则d=45~90: d = ( 2 − x / y ) ∗ 45 d=(2-x/y)*45 d=(2x/y)45
  • 当x<=0,y>0,-x<=y,
    则d=90~135: d = 90 − x / y ∗ 45 d=90-x/y*45 d=90x/y45
  • 当x<=0,y>0,-x>y,
    则d=135~180: d = 180 + y / x ∗ 45 d=180+y/x*45 d=180+y/x45
  • 当x<=0,y<=0,x<y,
    则d=180~225: d = 180 + y / x ∗ 45 d=180+y/x*45 d=180+y/x45
  • 当x<=0,y<=0,x>=y,
    则d=225~270: d = 270 − x / y ∗ 45 d=270-x/y*45 d=270x/y45
  • 当x>0,y<=0,x<-y,
    则d=270~315: d = 270 − x / y ∗ 45 d=270-x/y*45 d=270x/y45
  • 当x>0,y<=0,x>=-y,
    则d=315~0: d = 360 + y / x ∗ 45 d=360+y/x*45 d=360+y/x45

代码

具体实现如下:

//返回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;
				}
			}
		 }
	

注意!该方法误差较大!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值