首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >缩小脏rect

缩小脏rect
EN

Stack Overflow用户
提问于 2021-03-05 01:23:07
回答 1查看 170关注 0票数 3

尝试优化落沙模拟,我正在实现noita开发人员在他们的GDC talk中提到的优化。在10:45左右,他们谈论他们是如何使用肮脏的长椅的。我已经开始尝试实现一个类似的系统。

目前,我可以创建一个覆盖需要更新的粒子的脏rect。每次在块中设置一个有效的粒子(粒子不是空气或固体,不像墙)时,我会调用一个函数来更新脏矩形,并将放置的粒子位置作为参数。从那里,我可以很容易地从这个位置计算出矩形的新的最小/最大值。

这是一个工作的gif。

下面是更新rect的代码:

代码语言:javascript
复制
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。我可以做一些事情,比如在脏矩形的边界上检测粒子何时被空气/固体粒子擦除/替换,但我不确定从那里做什么。

EN

回答 1

Stack Overflow用户

发布于 2021-03-05 01:37:25

这里有一种可能对你有用的方法。

  1. 保留由上一帧更新的脏矩形。

  1. 仅计算按一帧更新的脏矩形。

  1. 将这两个矩形合并为一个同时包含这两个矩形的矩形。

  1. 使用步骤3中的矩形更新屏幕。

  1. 用你在步骤2中计算的矩形替换之前的框架矩形。你在步骤3中计算的组合矩形,这样做会导致你描述的同样的问题。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66479956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档