尝试优化落沙模拟,我正在实现noita开发人员在他们的GDC talk中提到的优化。在10:45左右,他们谈论他们是如何使用肮脏的长椅的。我已经开始尝试实现一个类似的系统。
目前,我可以创建一个覆盖需要更新的粒子的脏rect。每次在块中设置一个有效的粒子(粒子不是空气或固体,不像墙)时,我会调用一个函数来更新脏矩形,并将放置的粒子位置作为参数。从那里,我可以很容易地从这个位置计算出矩形的新的最小/最大值。
这是一个工作的gif。

下面是更新rect的代码:
public void UpdateDirtyRect(int2 newPos)
{
minX = Math.Min(minX, newPos.x);
minY = Math.Min(minY, newPos.y);
maxX = Math.Max(maxX, newPos.x);
maxY = Math.Max(maxY, newPos.y);
dirtyrect = .(.(minX, minY), .(maxX, maxY));
//Inflate by two pixels. Not doing this will cause the rect to not change size as particles update
dirtyrect=dirtyrect.Inflate(2);
}问题是,正如在gif中所看到的,我目前没有办法缩小脏的rect。我可以做一些事情,比如在脏矩形的边界上检测粒子何时被空气/固体粒子擦除/替换,但我不确定从那里做什么。
发布于 2021-03-05 01:37:25
这里有一种可能对你有用的方法。
https://stackoverflow.com/questions/66479956
复制相似问题