落砂模拟

时间:2011-01-10 21:46:26

标签: simulation physics cellular-automata

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

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

2 个答案:

答案 0 :(得分:4)

一个简单的解决方案是不要就地进行每次迭代。相反,每次更新世界时,都要创建它的副本......然后查看原始文件,但更新副本。这样,更新顺序就不再重要了,因为在查找粒子时你完全忽略了更新。

答案 1 :(得分:0)

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

如果让每个沙粒都是一个单独的对象太细粒度,那么将世界分成小块,比方说1000个粒子,然后改变这些块的行为。