2012-01-11 46 views
0

我想創建一個簡單的剛體2D物理引擎。如何刷新我的網格?以及如何計算時間量?

我能夠創建一個矩形圖像通過使用四條線,並能夠根據其角度和位置操縱圖像;我可以移動並旋轉它(儘管我可以旋轉,因爲我無法理解角動量理論,所以我不使用旋轉函數)。

的圖像將下降,根據簡單的公式反彈:

v(velocity) += a(acceleration) 
x += v(velocity) 

但我要我要執行一個動作,每次點擊一個按鈕。

我希望它自動執行自動並自動更新,我試圖使用循環,但由於某種原因,程序似乎在循環部分停止。而且因爲我使用了一個會重複開始的無限循環,所以我的程序就凍結了。

不僅這是問題,而且我的好朋友,他在物理學方面有更好的知識,告訴我如果我想使這個引擎正常工作,我應該能夠計算出時間量。

+0

你有沒有想過使用線程和或定時器和設置間隔..? – MethodMan 2012-01-11 17:45:53

+0

XNA不是一個選項嗎? XNA不僅提供了自動刷新場景的方法,而且還專門爲遊戲設計,聽起來非常像你想要完成的事情(請注意,我並不是說你在製作遊戲)。 – PedroC88 2012-01-11 17:55:08

+0

你可以發佈你已經試圖實現這個,而線程和XNA是非常好的解決方案,它可能只是一個簡單的錯誤,阻止你的循環完成 – Johnv2020 2012-01-11 17:58:00

回答

1

我喜歡DJ KRAZE的評論 - 使用System.Windows.Threading.DispatcherTimer,並將間隔設置爲經常需要重繪的圖片。在計時器的Tick事件上,請重新繪製。

如果你想知道爲什麼簡單循環不起作用,你必須知道一點關於Windows message loop。對於一個簡短的,有些不準確的概述,應用程序中運行的所有東西,聽起來像是在一個線程上發生。 Windows使用消息WM_PAINT,它通過消息循環,使控制畫本身。它一次只處理消息。

如果你有你的無限循環,這是發生在一些消息的處理。因此,這可以防止消息循環處理任何消息,包括用於繪製控件的消息。所以你在無限循環中看不到任何更新。

+0

這是關於WPF,所以我寧願建議一個'System.Windows .Threading。DispatcherTimer',一個'System.Threading.Timer'或一個'System.Timers.Timer'來代替。 – Nuffin 2012-01-11 18:09:43

+0

哎呀,我認爲我在那裏看到了一個窗體標籤,但很明顯我會失明。 – dsolimano 2012-01-11 18:29:27

+0

這可能是因爲我缺乏深刻的知識,我並不堅持解釋,因爲我知道我不太可能理解計時器和DispatcherTimer之間的區別,但我很驚訝地發現有很多不同類型的計時器並很困惑 – Bug 2012-01-11 18:52:18

0

也許你可以看看XNA,它是一個有助於遊戲開發的微軟平臺,你應該去App Hub瞭解如何開始。

至於你在刷新屏幕上的具體問題,你可以看看UpdateDraw方法。 Here是一個教程,儘管可能無法解決您的具體問題,但應該告訴您如何刷新屏幕。