[英]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.