加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 如何使实体向x和y移动?

发布时间:2020-12-15 08:46:12 所属栏目:Java 来源:网络整理
导读:我正在寻找一种让我的实体(子弹)向x和y移动的方法,这是玩家在子弹射击时的位置.所以在我的实体课中我有 – float xSpeed = 1.0F; float ySpeed = 0.0F; 如果我想在一个diaganal行中移动实体,我会使xSpeed和ySpeed = 1.0F 如何让它在另一个x和y的目录中移动?
我正在寻找一种让我的实体(子弹)向x和y移动的方法,这是玩家在子弹射击时的位置.所以在我的实体课中我有 –

float xSpeed = 1.0F;
   float ySpeed = 0.0F;

如果我想在一个diaganal行中移动实体,我会使xSpeed和ySpeed = 1.0F
如何让它在另一个x和y的目录中移动?

谢谢您的帮助
编辑 –
解决了,谢谢你的帮助
对于发现此问题需要帮助的其他人,这是我的代码 –

float xSpeed = 0;
    float ySpeed = 0;

然后我有一些数学能够使它们以相同的速度移动

ySpeed =  ySpeed * (float) (2.5 / Math.sqrt(xSpeed * xSpeed + ySpeed * ySpeed));
   xSpeed = xSpeed * (float) (2.5 / Math.sqrt(xSpeed * xSpeed + ySpeed * ySpeed));

并且此代码根据您想要移动的x和y设置xSpeed和ySpeed

xSpeed = (Game.PlayerX - x) / 3;
    ySpeed = (Game.Playery - y) / 3;

然后,最后,将xSpeed和ySpeed添加到实体的x和y

this.x += xSpeed;
    this.y += ySpeed;

解决方法

通常的方法是设置相对x和y速度,以覆盖分配的旅行时间中所需的x和y距离:

float xSpeed = (targetLocation.x - currentLocation.x) / travelTime;
float ySpeed = (targetLocation.y - currentLocation.y) / travelTime;

如果你想以预定的速度而不是在预定的旅行时间内旅行,请将上述计算与travelTime设置为某个任意值(1.0f可以正常工作,因此你可以简单地消除除法).然后计算这个因素:

float factor = desiredSpeed / Math.sqrt(xSpeed * xSpeed + ySpeed * ySpeed);

(注意,如果xSpeed和ySpeed都为0,则将除以零,但这只是表示当前位置和目标位置相同.如果这是一个可能的条件,则应该包括一个适当的检查.)最后,重新调整xSpeed和由该因素速度:

xSpeed *= factor;
ySpeed *= factor;

注意,通过将travelTime设置为1,这只是将预定速度乘以行进方向与x轴的角度的正弦和余弦相乘的一种偷偷摸摸的方式,而根本不提三角测量.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读