java – 如何使实体向x和y移动?
我正在寻找一种让我的实体(子弹)向x和y移动的方法,这是玩家在子弹射击时的位置.所以在我的实体课中我有 –
float xSpeed = 1.0F; float ySpeed = 0.0F; 如果我想在一个diaganal行中移动实体,我会使xSpeed和ySpeed = 1.0F 谢谢您的帮助 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轴的角度的正弦和余弦相乘的一种偷偷摸摸的方式,而根本不提三角测量. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |