首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理贝维引擎中许多精灵的最快方法

处理贝维引擎中许多精灵的最快方法
EN

Stack Overflow用户
提问于 2021-07-16 10:19:50
回答 1查看 1.4K关注 0票数 4

我正在构建一个元胞自动机可视化“游戏”与锈和BevyEngine。目前,在初始化世界时,我为每个细胞生成了一个精灵。在每次更新中,精灵的颜色会根据它是活的还是死的而改变。

代码语言:javascript
复制
for (grid_pos, mut color_mat)  in query.iter_mut() {
    let cell_state = world.0[grid_pos.1][grid_pos.0];

    match cell_state {
        0 => *color_mat = materials.dead_cell.clone(),
        1 => *color_mat = materials.alive_cell.clone(),
        _ => (),
    }
}

问题是,当处理一个越来越大的地图时,精灵的数量会越来越多。所以我想,如果我只在活细胞的位置上产卵一个精灵,然后在细胞死亡时移除它,它会不会更快一些。

因此,我的问题是:如果我为每个网格位置生成所有的精灵更快,或者是更好的方法,只在一个细胞活着时产生一个精灵,在细胞死亡时移除它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-16 14:26:35

我不太熟悉Bevy的性能特性,但通常情况下,为了获得绘制元胞自动机的良好性能,您不希望存储每个单元格的"sprite“对象,而只存储一个单元格状态的数组,并以某种高效的批处理形式绘制它们。

元胞自动机的状态基本上是一幅图像(可能有相当大的像素)。因此,以这种方式对待它:将单元格状态复制到纹理中,然后绘制纹理。如果你想让单元格看起来比小方格更漂亮,那就给碎片着色器编程。(例如,您可以读取CA状态的纹理,并使用它来决定在一个正方形的范围内绘制其他几个纹理中的哪个。)

这可能是必要的,也可能不是为用例获得可接受的性能所必需的,但它肯定比管理单个精灵更快。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68407372

复制
相关文章

相似问题

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