保持簡單。物理並不難。 「數學」並不比乘法和加法更困難。
你想處理速度和位置隨時間增量的變化。
位置,速度和加速度是向量。在你的2D世界中,這意味着每個人都有一個在X和Y方向的組件。
所以,如果你增加你的時間:
t1 = t0 + dt
您的位置將改變這樣如果速度超過該時間增量dt的常數:
(ux1, uy1) = (ux0, uy0) + (vx0*dt, vy0*dt)
速度將改變這樣如果在該時間遞增dt時加速度是恆定的:
(vx1, vy1) = (vx0, vy0) + (ax0*dt, ay0*dt)
更新如果存在使用牛頓定律的力,則加速:
(ax0, ay0) = (fx0/m, fy0/m)
其中m是身體的質量。
在時間步結束時更新位置,速度和加速度並重復。
這假設在步驟開始時使用加速度和速度的值是足夠準確的。這會限制你相對較小的時間步長。 (它被稱爲「顯式整合」)。
下面是一個例子。你在(x,y)=(0,0)處有一個大炮,裏面有一個20磅質量的炮彈。大炮從水平傾斜30度。我們會忽視空氣阻力,所以在x方向上沒有任何力量作用於炮彈。只有重力(-32.2英尺/秒^ 2)將在y方向上起作用。
當大炮熄滅時,它將以40英尺/秒的初始速度發射炮彈。 (vx,vy)分量爲(40 * cos(30度),40 * sin(30度))=(34.64 ft/sec,20 ft/sec)
所以,如果插入我們的方程組0.1秒的時間步長:
(ax0, ay0) = (0, -32.2 ft/sec^2)
(vx1, vy1) = (vx0, vy0) + (ax0, ay0)*dt = (34.64 ft/sec, 20 ft/sec) + (0, -3.22 ft/sec) = (34.64, 16.78)
(ux1, uy1) = (ux0, uy0) + (vx0, vy0)*dt = (3.464 ft, 1.678 ft)
以這些值爲起點,以0.1秒爲另一個時間步。沖洗,重複......
您可以單獨爲x軸和y軸執行此操作。
通過使炮彈的初始高度等於炮輪直徑的一半,可以使其稍微更加真實。
您可以在x方向添加一個小的負向加速度來模擬風阻。
假設您的目標沿着x軸向右。
如果你用大炮指向直線向上發射,則方程將顯示球向上,減速到達其頂點,然後直線下降。沒有命中,除了你的頭和大炮。
如果你用大炮水平方向射擊,方程式會說球在x方向上以恆定速度移動並且只落在大炮的初始高度。你的敵人會嘲笑你:「空氣球!空氣球!」因此,如果你想讓球與目標位置的某個爆炸半徑內的地面相交(又名到達位置y = 0),就必須使用初始速度和炮塔角度水平。
你需要速度和方向,或者只是簡化了這個,並有兩個speex,一個用於x軸,另一個用於Y軸 – user902383
我希望速度相同我已經有一個方向方法,但我想改變軸基於速度的位置。我已經實現了所有這些,但用簡單的x + 3或y + 3,我想現在實現速度 – user3498565
我會使用離散時間步驟,並在每一步:1.計算加速度值,如果它正在改變; 2.加速加速; 3.將速度轉換爲座標的增量(因爲我知道您使用不同的單位來進行速度和座標); 4.通過在步驟3中檢索的值增加座標。順便說一句,您可能還需要計算速度矢量的角度,因爲您有兩個座標,並且通過速度值增加它們會產生sqrt(2)倍的速度比實際更大(畢達哥拉斯定理)。 –