gpt4 book ai didi

rust - 如何在Rust SPECS中读取组件并写入具有相同组件的新实体?

转载 作者:行者123 更新时间:2023-12-03 11:42:50 26 4
gpt4 key购买 nike

我有一个正在生成其他实体的实体。例如,生成器具有位置分量,并且我希望生成的实体具有与生成器相同的位置。
在生成系统中,似乎我需要同时读写一个组件,这听起来是不可能的。唯一的选择似乎是LazyUpdate,但是我想避免这种情况,因为它需要调用world::maintain,并且我想在同一框架内的另一个系统中使用生成的实体。
我的系统代码:

#[derive(Debug)]
struct Position {
x: f32, // meters
y: f32,
z: f32,
direction: f32,
}
impl Component for Position {
type Storage = VecStorage<Self>;
}

struct GenerateEntity;
impl<'a> System<'a> for GenerateEntity {
type SystemData = (
ReadStorage<'a, Generator>,
ReadStorage<'a, Position>,
Entities<'a>,
);

fn run(&mut self, (gen, pos, entities): Self::SystemData) {
for (pos, gen) in (&pos, &gen).join() {
let generated = entities.create();
// This gives an error because position can only be read
pos.insert(generated, pos.clone());
}
}
}
我该如何解决这个问题?

最佳答案

it would seem that I would need to both read and write a component, which doesn't sound possible


当然可以:使用 WriteStorage
这个名字有点误导。 WriteStorage不是只写存储;它是可变的存储,其中包括阅读。
唯一的问题是,当您在位置存储上进行迭代时,您很可能无法将其插入位置存储中。您需要存储要在循环中进行的更改,然后再应用它们。
(也正如注释所指出的那样,您应该在循环中重命名 pos(指的是单个组件),以便它不会遮盖您作为参数使用的 pos(指的是整个存储))

关于rust - 如何在Rust SPECS中读取组件并写入具有相同组件的新实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63579975/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com