2011-04-12 19 views
2

我正在學習2D遊戲的簡單物理,並且希望得到我正在嘗試模擬的幫助。幫助在WPF中進行物理模擬

我有一間酒吧,將下降超過一個固定的球在地面上,下面的XAML:

<Canvas Background="CornflowerBlue"> 
    <Rectangle Name="bar" Width="200" Height="20" Fill="Cornsilk" Canvas.Left="250" Canvas.Top="50" /> 
    <Ellipse Name="ball" Height="50" Width="50" Fill="PaleGreen" Canvas.Left="380" Canvas.Top="250" /> 
</Canvas> 

Before bar starts falling

我所有的計算進行模擬下降由於重力作用,但什麼吧我真的需要幫助,一旦酒吧擊球,它會有一面在地面,另一面在球上,這可以用xaml來表示:

<Canvas Background="CornflowerBlue"> 
    <Rectangle Name="bar" Width="200" Height="20" Fill="Cornsilk" Canvas.Left="250" Canvas.Top="246.675" RenderTransformOrigin="0.5,0.5" > 
     <Rectangle.RenderTransform> 
      <TransformGroup> 
       <ScaleTransform/> 
       <SkewTransform/> 
       <RotateTransform Angle="-18.897"/> 
       <TranslateTransform/> 
      </TransformGroup> 
     </Rectangle.RenderTransform> 
    </Rectangle> 
    <Ellipse Name="ball" Height="50" Width="50" Fill="PaleGreen" Canvas.Left="380" Canvas.Top="250" /> 
</Canvas> 

Bar is on the ground

而且我不知道如何讓酒吧的左側撞到地面,而左側將以物理學術語來說是球。

我知道有很棒的物理引擎像Farseen一樣可用,但我只是想了解它如何在這種情況下工作。

我知道如何根據時間得到酒吧的Y,所以我一直檢查它,直到它與球粘在一起,但之後又是什麼?

謝謝!

+5

爲了做這樣的事情,你將不得不基本編碼你自己的2D物理引擎。矩形將會附加一個2D Box Collider,並且該圓形將會有一個Circle/Sphere對撞機。每一次「嘀嗒」都需要檢查碰撞並根據需要施加力量。如果你不需要*自己寫這個,我會**強烈建議你找一個你可以使用的物理引擎。 – qJake 2011-04-12 18:28:30

+1

@SpikeX你應該回答這個問題+1 – asawyer 2011-04-12 18:29:27

+1

我沒有回答他的問題,因爲它沒有回答他的問題,而是更多地提出了「不要重新發明輪子」的建議。 (正如人們經常這樣做)。 – qJake 2011-04-12 18:30:23

回答

1

剛體的物理模擬不是一項簡單的工作除非你對這個話題非常感興趣,否則我會推薦使用物理庫。但是如果你對這樣做感興趣,我建議你看看Physically Based Modeling SIGGRAPH課程筆記,Brian Mirtich's thesis關於基於脈衝的動力學,也許還有關於多體動力學的Kenny Erleben's thesis

這些提供瞭如何實現剛體動力學的深入描述。