2011-12-19 158 views
1

我以爲我可以在互聯網上找到一些搜索,但我發現的一切只是球從pong或其他任意問題之類的東西跳起來。我正在製作一個二維地牢爬行遊戲,當我殺死敵人並且他們放下戰利品時,我希望物品飛出去,就好像它剛剛被拋在空中並在單位上的隨機點上着陸。C#反彈/丟棄物品物理丟棄

我一直在試圖弄清楚自己,但我不明白,這可能會問很多,我會很感激,如果有人能幫助我。

編輯的要求:

玉以及當怪物就會被破壞,我會選擇它在磚內的隨機位置,我們稱之爲位置endLoc和怪物的位置startLoc。然後我會覺得這兩個位置之間的中心x點和由20減少Y(因爲這是我多少像素所需的項目由去了),讓我們稱這個變量launchLoc:

launchLoc = new Vector2(startLoc.X + ((endLoc.X - startLoc.X)/2), startLoc.Y - 20) 

我想產生正確的Vector。

所以現在我需要從startLoc啓動項目到launchLoc,然後讓它回到endLoc。這是令人困惑的地方,我不確定如何爲此創建一個真實的弧線。最終的結果是物品會沿着高斯移動,就好像它被扔到空中一樣。

我試圖在每個時間間隔內使速度增加120倍,startLoc和launchLoc之間的X差,增加倍數,但是我無法讓它工作得很好。我不確定這是否是最好的方法。我使用第120個,因爲y值是20,並且該項目每隔一個間隔向上移動1個像素,所以1至20加起來爲120,這將使得x運動不斷增加,就像它被拋出一樣。

這是在二維btw,我希望有所幫助。

+1

是否存在您遇到麻煩的特定位代碼?如果是的話,你可以在這裏發佈?你是在追求像這樣的邏輯如何工作?你能否提供更多細節?沒有更多的信息就很難回答這樣的問題。 – 2011-12-19 14:32:37

+0

更新了我的文章。 – user1009573 2011-12-19 15:13:23

+0

這是2d,所以你需要模擬它在屏幕上彈出的第三個維度? – scottheckel 2011-12-19 15:23:56

回答

1

您在時間t 0 v(噸))和位置開始以初始速度矢量(p(噸))。重力可以被假定爲產生恆定的加速度(一個(噸)= 0 <,-9.8米/秒 >,雖然你的值可能不同),直到對象的土地。所以,從一個時間片要到下一個運動的一般形式是:

p(t) = 0.5*a(0)*(t-t0)2 + v(0)*(t-t0) + p(0) 
v(t) = a(0)*(t-t0) + v(0)

要弄清楚什麼時候停止運動,你需要在什麼時候該對象的路徑相交針對其表面要弄清楚它反彈。您必須爲所有可以合理預期的表面執行此操作。因此,對於具有線方程Ux + Vy + T = 0一個平面,你打破了位置矢量到它的組件,如:

p(t) = <px(t), py(t)>
然後使用 quadratic formula找到 tc其中 p(tc)滿足直線方程:
0.5*(Uax(t0)+Vay(t0))*tc2 + (Uvx(t0)+Vvy(t0))*tc + (Upx(t0)+Vpy(t0)+T) = 0
之所以選擇分支的是T Ç噸。從那裏可以很容易地找出物體與表面碰撞的位置。然後,您可以根據反彈的行爲更新速度矢量和位置矢量。如果平面軸向對齊(即它是一個法向矢量平行於Z軸的水平平面),則只需翻轉速度矢量的Z分量的符號,並將整個速度矢量乘以某個阻尼因子d,其中0 ≤ d < 1阻尼速度。然後重複,直到某個預定的時間已經過去,或者速度達到最小量(您的呼叫)。

隨意取向的平面會變得更難一些。您將需要計算碰撞的入射角並反映關於平面法線的速度矢量。我不會在這裏詳細討論,因爲我懷疑你可能對此不感興趣。