2011-01-10 66 views
1

我正在尝试重新创建一个'飘落的沙子'模拟,类似于那些在那里做同样的事情的各种网络玩具 - 而且我很难做到。我不确定从哪里开始。我试图用元胞自动机来模拟沙粒的行为,但我无法弄清楚如何使我更新'世界'的方向无关紧要...下落沙模拟

例如,我想要的其中一种粒子类型是Plant。当植物与水接触时,植物将水粒转化为另一种植物粒子。这里的问题是,如果我从上到下更新游戏世界,从左到右更新游戏世界,那么放置在水粒子海中间的植物粒子将立即使所有的水粒子在右下方那个新的植物颗粒变成植物。这不是我期待的行为。 =(

+0

我一直在重新思考这个问题,最近......我一直在试图把世界当作一个有位置的粒子袋 - 但我应该做的是把世界视为连接单元的矩阵。 – 2013-02-22 00:11:20

回答

4

一个简单的解决方案是不要在每次迭代就地完成,而是每次更新世界时创建一个副本......然后查看原始文件,但更新副本。更新顺序无关紧要,因为您在查找粒子时完全忽略了更新。

+0

虽然这里的问题是如果两个粒子试图占用相同的空间。假设我有两个沙粒,每个沙粒都水平地紧挨着另一个。在更新过程中,第一个粒子会在其下面选择正确的点。第二个粒子(随机)选择相同的确切点落在 - 但它不会知道该点被采用,因为它只考虑前一个世界状态,而不是当前正在创建的新状态。两个粒子都在同一个地方,这与一个粒子被自发破坏的相同。 – 2011-01-11 18:46:42

0

不要以顺序方式编程它(循环遍历所有粒子),而是使用真实的模拟编程技术其中每个粒子被视为服从物理定律并且可以异步行为(运行)并响应“事件”(与其他粒子的相互作用)的个体对象/代理。

如果m为每个沙子粒子提供一个单独的对象太细粒度,然后将世界划分成1000个粒子的小块,并模拟这些块的行为。