2013-02-25 35 views
8

這是更多的問題,以便請求我應該使用哪種模式/方法的一些建議。我已經對這個問題做了一些調查 - 結果很差。XNA - 模擬積雪

基本上我有一個遊戲的想法,其中關鍵的遊戲機制是圍繞着落雪 - 或者在這個想法遊戲的情況下 - 下降的粒子。

雪/顆粒需要落在屏幕上 - 但堆積在堆中。問題是,我需要下雪,以便在樁的側面「涓滴」下來,並保持一定的角度,並繼續積聚。有可能在一堆積雪下打開孔洞,雪必須掉下來 - 就像沙子從沙漏中掉落一樣。

我試過這個是Box2d - 很明顯Box2d不是10,000個微小顆粒的正確選擇 - 它可以持續很長一段時間。盒子2D很快地突然死亡。

我試圖在屏幕上繪製1px位圖,但是每次更新處理10,000次碰撞也被證明執行不力。

任何想法,將不勝感激。

乾杯

+0

你可能最終會得到一個3dMark的競爭對手...... 10000s的持久性粒子聽起來像是CUDA的工作 – Alex 2013-02-25 15:39:39

+0

你能澄清一下嗎 - 它是2D還是3D,雪是從上面掉下來累積下來的嗎?如果你玩的區域多大? – Stuart 2013-02-25 17:33:10

+0

我正在製作基於磁貼的2D平臺遊戲,當我在全高清畫200,000個精靈時,它在2008平庸的桌面上給了我每秒60幀的畫面,所以我不認爲10,000個精靈應該是關心。碰撞邏輯可能有缺陷,導致效果不佳,例如OP可能正在運行所有雪花之間的檢查,當它們中的一些太遠而不能檢查時。 – user1306322 2013-02-25 21:25:28

回答

1

嘛,就像你發現,沒有現成的庫將幫助你,除非它是面向非常特別向您的方案。不幸的是,XNA沒有太多可供選擇的東西,看起來現有的粒子系統庫都不支持粒子物理。

所以你需要自己做很多工作。首先,你需要考慮你可能做的所有優化。就像一個評論說的那樣,你不應該在每個幀的所有粒子之間運行檢查。你應該使用基於點的碰撞檢查,而不是通常由物理引擎使用的發燒友東西。在這種情況下,您應該確保粒子始終具有相同的大小(相對於參考座標系而言,這並不意味着您無法縮放)。當然,你需要跳過儘可能多的碰撞檢查 - 你知道靜止的粒子永遠不應該被檢查,就像那些四面都有相鄰粒子的粒子 - 這導致我想到網格。也許你可以將整個「世界」表示爲一個網格,並從這個角度簡化邏輯 - 與Minecraft幾乎一樣,你不同意嗎?

不管怎樣,我意識到我漫步了一點,但它是這樣一個開放的主題... :)

1

是否有可能監視物理引擎實際正在處理哪些粒子?如果是這樣,有沒有辦法可以停止處理它們的物理,或嚴格限制處理的內容,如果它們的速度小於0.01或類似的東西?

如果您只處理需要處理的粒子,那麼您可以擁有儘可能多的粒子,假設它們不是一次全部移動!

如果這仍然是一個問題,這聽起來像流體動力學解決方案可能更合適,因爲流體動力學基本上是一大堆小的移動粒子。

這裏是二維流體動力學一些有趣的信息:

http://www.ibiblio.org/e-notes/webgl/gpu/fluid.htm

你的物理引擎可能已包含你所需要的。

+0

不幸的是 - 雪是用戶交互式的 - 感謝你的答案:) – 2013-02-27 09:56:54

+0

好的,我已經相應地更新了我的答案。 – rhughes 2013-02-27 14:54:02

+0

@DaveBish你怎麼樣? – rhughes 2013-03-11 06:28:15