繁体   English   中英

将物体从一个点移动到另一个点

[英]Moving an object from one point to another

我试图让一个物体从一个点沿直线移动到另一个点。 不久前我尝试过类似的东西,但它一直移动到与轴对齐。 该代码如下所示:

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 点沿直线移动,但它应该以均匀的速度移动。 考虑到这一点:

例子

目标是让它穿过线,速度应该让它保持在线(有些不准确是可以接受的,但它与 X/Y 轴对齐(意思是 targetX/targetY 等于 currentX/currentY 不应该)发生)。

有任何想法吗?

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

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

您将需要一个实数来保持表示对象移动方向的角度(以弧度为单位)。 如果您的对象需要从源位置 (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 );

要确定您的对象是否已到达“目标”点,请计算您的对象与“目标”点之间的距离,如果它足够小,则将其视为“在那里”。 不要期望对象的当前点与目标点相等,这将需要太多的精度。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM