我正在尝试重新创建一个“落沙”模拟,类似于那些正在做同样事情的各种网络玩具——我失败得很厉害。我不确定从哪里开始。我正在尝试使用元胞自动机来模拟沙粒的行为,但我无法弄清楚如何让我更新“世界”的方向变得无关紧要......
例如,我想要的粒子类型之一是植物。当植物与水接触时,植物会将水粒子变成另一个植物粒子。但是这里的问题是,如果我从上到下和从左到右更新游戏世界,那么放置在水粒子海中间的植物粒子将立即导致所有水粒子在右边和下面那个新的植物粒子变成植物。这不是我所期望的行为。=(
我正在尝试重新创建一个“落沙”模拟,类似于那些正在做同样事情的各种网络玩具——我失败得很厉害。我不确定从哪里开始。我正在尝试使用元胞自动机来模拟沙粒的行为,但我无法弄清楚如何让我更新“世界”的方向变得无关紧要......
例如,我想要的粒子类型之一是植物。当植物与水接触时,植物会将水粒子变成另一个植物粒子。但是这里的问题是,如果我从上到下和从左到右更新游戏世界,那么放置在水粒子海中间的植物粒子将立即导致所有水粒子在右边和下面那个新的植物粒子变成植物。这不是我所期望的行为。=(
一个直接的解决方案是不要在原地进行每次迭代。取而代之的是,每次更新世界时,都创建一个副本……然后查看原始版本,但更新副本。这样,更新顺序就不再重要了,因为您在寻找粒子时完全忽略了更新。
不要以顺序方式对其进行编程(循环所有粒子),而是使用真正的模拟编程技术,其中每个粒子都被视为遵循物理定律并且可以异步行动(运行)并响应的单个对象/代理“事件”(与其他粒子的交互)。
如果将每个沙粒作为一个单独的对象过于细化,那么将世界划分为假设为 1000 个粒子的小块,并模拟这些块的行为。