小编nir*_*har的帖子

Bevy ECS 有没有办法进行复杂的查询?

是否可以创建直接按组件中字段的值进行过滤的复杂查询?

例如,假设 - 我有一个 2D 棋盘游戏(比如国际象棋或其他游戏),我想弄清楚特定坐标上是否有一个棋子。我的组件如下所示:

#[derive(Component)]
struct BoardPosition {
    x: usize,
    y: usize,
}
Run Code Online (Sandbox Code Playgroud)

我正在寻找位置(4,5)的那块。然后,我的查询将如下所示 - 迭代整个板:

fn some_system(pieces: Query<&BoardPosition>) {
    for piece in pieces.iter() {
        if piece.x == 4 && piece.y == 5 {
            // This is my piece, now I can do whatever I want with it
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

但显然,找到一个简单的片段需要 O(n) 的时间。如果我将板存储为双列表(即[[T; N]; N]),那么通过简单地执行 来找到这块将需要 O(1) board[4][5],但由于 bevy 拥有组件,所以我不能简单地访问该实体(或其其他组件)以此类推。

是否有更智能的方法来执行此操作,这将允许快速查询允许我获取(或更改)所查询实体的其他组件?

rust bevy

3
推荐指数
1
解决办法
1737
查看次数

为什么 Rust 中 `min_by` 和 `max_by` 返回 `Option&lt;T&gt;`?

我最近开始学习 Rust,我发现迭代器上的方法min_bymax_by返回一个Option<T>. 为什么会这样呢?什么时候会回来None

rust

-2
推荐指数
1
解决办法
95
查看次数

标签 统计

rust ×2

bevy ×1