2011-01-10 65 views
1

我正在嘗試重新創建一個'飄落的沙子'模擬,類似於那些在那裏做同樣的事情的各種網絡玩具 - 而且我很難做到。我不確定從哪裏開始。我試圖用元胞自動機來模擬沙粒的行爲,但我無法弄清楚如何使我更新'世界'的方向無關緊要...下落沙模擬

例如,我想要的其中一種粒子類型是Plant。當植物與水接觸時,植物將水粒轉化爲另一種植物粒子。這裏的問題是,如果我從上到下更新遊戲世界,從左到右更新遊戲世界,那麼放置在水粒子海中間的植物粒子將立即使所有的水粒子在右下方那個新的植物顆粒變成植物。這不是我期待的行爲。 =(

+0

我一直在重新思考這個問題,最近......我一直在試圖把世界當作一個有位置的粒子袋 - 但我應該做的是把世界視爲連接單元的矩陣。 – 2013-02-22 00:11:20

回答

4

一個簡單的解決方案是不要在每次迭代就地完成,而是每次更新世界時創建一個副本......然後查看原始文件,但更新副本。更新順序無關緊要,因爲您在查找粒子時完全忽略了更新。

+0

雖然這裏的問題是如果兩個粒子試圖佔用相同的空間。假設我有兩個沙粒,每個沙粒都水平地緊挨着另一個。在更新過程中,第一個粒子會在其下面選擇正確的點。第二個粒子(隨機)選擇相同的確切點落在 - 但它不會知道該點被採用,因爲它只考慮前一個世界狀態,而不是當前正在創建的新狀態。兩個粒子都在同一個地方,這與一個粒子被自發破壞的相同。 – 2011-01-11 18:46:42

0

不要以順序方式編程它(循環遍歷所有粒子),而是使用真實的模擬編程技術其中每個粒子被視爲服從物理定律並且可以異步行爲(運行)並響應「事件」(與其他粒子的相互作用)的個體對象/代理。

如果m爲每個沙子粒子提供一個單獨的對象太細粒度,然後將世界劃分成1000個粒子的小塊,並模擬這些塊的行爲。