Почему моя попытка обнаружения изменений в Bevy никогда не срабатывает?

Я не уверен, не понимаю ли я, что делают системы обнаружения изменений Bevy, или я просто делаю это неправильно. Но при попытках обнаружить изменения я получаю уведомление только тогда, когда компонент создается.

Ниже я spawn кортеж Group,Size(2). Затем,sizequery запускается каждый кадр, пока размер не станет 5. В это время groupsize запускается только один раз, в размере 2. Почему?

use bevy:: {
    prelude::*,
};

fn main () {
    App::build()
        .add_resource(WindowDescriptor {
            ..Default::default()
        })
        .add_default_plugins()
        .add_startup_system(setup.system())
        .add_plugin(TestPlugin)
        .run();
}

struct Group;
struct Size(u32);

fn setup(mut commands: Commands) {
    commands.spawn((Group,Size(2)));
}

fn groupsize(mut query: Query<Changed<Size>>) {
    for s in &mut query.iter() {
        println!("GS-{}",s.0);
    }
}

fn sizequery(mut query: Query<&mut Size>) {
    for mut s in &mut query.iter() {
        if s.0 < 5 {
            s.0 = s.0+1;
            println!("add{}",s.0);
        }
    }
}

pub struct TestPlugin;

impl Plugin for TestPlugin {
    fn build(&self, app: &mut AppBuilder) {
        app.add_system(groupsize.system());
        app.add_system(sizequery.system());
    }
}

Cargo.toml:

[package]
name = "bevy_test"
version = "0.1.0"
edition = "2018"

[dependencies]
bevy = "0.1.3"

0 ответов

Это потому что sizequeryкажется, бежит за размером группы.
Возможно, я ошибаюсь, но у меня есть ваш код, который, как я считаю, является вашим намерением.
Я изменил ваш плагин на:

fn build(&self, app: &mut AppBuilder) {
    app.add_system(groupsize.system())
        .add_system_to_stage(stage::FIRST, sizequery.system());
}

groupsize не будет печатать GS-2 поскольку sizequeryобновляет свое значение до того, как сможет. Результат изменений:

add3
GS-3
add4
GS-4
add5
GS-5

Итак, ответ на ваш письменный вопрос будет таков: системы, считывающие изменения, должны быть настроены на этапы, которые выполняются после систем, которые вносят изменения.

Другие вопросы по тегам