簡體   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