我正在构建一个元胞自动机可视化“游戏”与锈和BevyEngine。目前,在初始化世界时,我为每个细胞生成了一个精灵。在每次更新中,精灵的颜色会根据它是活的还是死的而改变。
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(),
_ => (),
}
}问题是,当处理一个越来越大的地图时,精灵的数量会越来越多。所以我想,如果我只在活细胞的位置上产卵一个精灵,然后在细胞死亡时移除它,它会不会更快一些。
因此,我的问题是:如果我为每个网格位置生成所有的精灵更快,或者是更好的方法,只在一个细胞活着时产生一个精灵,在细胞死亡时移除它。
发布于 2021-07-16 14:26:35
我不太熟悉Bevy的性能特性,但通常情况下,为了获得绘制元胞自动机的良好性能,您不希望存储每个单元格的"sprite“对象,而只存储一个单元格状态的数组,并以某种高效的批处理形式绘制它们。
元胞自动机的状态基本上是一幅图像(可能有相当大的像素)。因此,以这种方式对待它:将单元格状态复制到纹理中,然后绘制纹理。如果你想让单元格看起来比小方格更漂亮,那就给碎片着色器编程。(例如,您可以读取CA状态的纹理,并使用它来决定在一个正方形的范围内绘制其他几个纹理中的哪个。)
这可能是必要的,也可能不是为用例获得可接受的性能所必需的,但它肯定比管理单个精灵更快。
https://stackoverflow.com/questions/68407372
复制相似问题