将对象从一个点移动到另一个点

时间:2016-10-02 15:57:31

标签: java geometry

我试图让一个物体从一个点直线移动到另一个点。我曾经尝试了类似的东西,但它一直移动,直到它与轴对齐。该代码看起来像这样:

if(x < otherObject.x) x++;
else if(x > otherObject.x) x--;

if(y < otherObject.y) y++;
else if(y > otherObject.y) y--;

这是一个非常低效的系统,我一直在寻找其他方法来解决这个问题。

但我也必须以特定的速度移动,这是我一直在努力解决的问题。坐标移动示例:

-50,200 => 50,-100
300, 300 => 600,230

目标是让它从A点到B线沿直线移动,但它应该以均匀的速度移动。考虑到这一点:

Example

目标是让它在线上移动,并且速度应该使它保持在线上(一些不准确是可以接受的,但是它与X / Y轴对齐(意味着targetX / targetY等于currentX / currentY不应该发生。)

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

首先,您需要忘记从给定“源”点到给定“目标”点的移动概念。

相反,在任何特定时刻将您的对象视为处于当前点,并以某个速度以某个方向移动>。

您需要一个实数来保持表示物体移动方向的角度(以弧度表示)。如果您的对象需要从源位置(sx,sy)到目标位置(tx,ty),则角度计算如下:

float deltaX = tx - sx;
float deltaY = ty - sy;
float angle = Math.atan2( deltaY, deltaX );

您还需要一个实数来保持物体行进的速度。理想情况下,你的速度应该以每秒的屏幕单位(像素?)来表示,但是让我们保持简单,只需让速度以每帧的屏幕单位表示。 “框架”仅仅意味着“每当你开始计算东西和渲染东西时”。你可能会尽可能快地做到这一点,或者你可能每秒做30次,选择权在你手中。

因此,在给定所有上述参数的情况下,要计算每个帧的对象的新位置,请使用以下内容:

currentX += speed * Math.cos( angle );
currentY += speed * Math.sin( angle );

要确定对象是否已到达“目标”点,请计算对象与“目标”点之间的距离,如果它足够小,请将其视为“存在”。不要指望对象的当前点变得等于目标点,这需要太高的精度。