是否可以创建直接按组件中字段的值进行过滤的复杂查询?
例如,假设 - 我有一个 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,我发现迭代器上的方法min_by和max_by返回一个Option<T>. 为什么会这样呢?什么时候会回来None?