我以前从未做过这样的事情,但我做过一些复杂的元胞自动机。对不起,如果这太模糊了。
这里的基本思想是标记所有应该“继续下落”或“不移动”的粒子并将它们排除在复杂的处理之外(为“下落”列表使用特殊的短/快速处理器 - 您需要做的就是放下每个一个像素)。
- 不运动的粒子——静态粒子(我称它们为 S 粒子)的加速度是它们不运动。将其标记为所有非移动区域(例如用户可能制作的不受重力影响的“墙”或“碗”。如果粒子稳定,则在其上方标记 S,例如对于液体,如果其下方有 S 个粒子,并且在它的两侧,它不会移动。对于像沙子这样形成堆的东西,如果它在它下面的三个点中的每一个都有一个 S,它就会堆成一堆,你会得到像这样的漂亮的 45 度堆, 我相信你可以改变它,使一些东西形成更陡峭或不那么陡峭的桩。做 S 映射自下而上。
- 其下没有粒子的粒子的加速度正在下降 - F 个粒子。其下带有 F 粒子的粒子也是 F 粒子。也标记这些自下而上。
- 未标记 F 或 S 的粒子很复杂,它们可能开始下落、停止下落或滚动,使用您已经拥有的慢速处理器来处理它们,应该不多。
最后你会得到很多很多的快速粒子。那些在一堆/湖里的和那些下雨的。剩余的颗粒是那些在斜坡边缘、湖泊顶部或其他复杂位置的颗粒。应该不会有快粒子那么多。
用某种颜色直观地标记每种颗粒,复杂的颗粒呈鲜红色。找出它仍然很慢的情况,看看你应该制造哪些其他类型的快速处理器。例如,您可能会发现制作大量沙堆会沿斜坡产生大量红色区域,您可能希望投资加速沿沙堆斜坡的“滚动区”。
希望这是有道理的。一旦你弄清楚了,别忘了回来编辑!