问题描述
我不确定我是在混淆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"
解决方法
这是因为SELECT
name,status,COUNT(date) as partial_count,SUM(COUNT(date)) OVER (PARTITION BY name) as full_count
FROM
(
SELECT name,date FROM dbo.table1 WHERE status IN ('A','B','C')
UNION ALL
SELECT name,date FROM dbo.table2 WHERE status IN ('A','C')
) t
GROUP BY name,status
ORDER BY name,status;
似乎在分组大小之后运行。
我在这里可能是错的,但是我得到了您的代码以达到我认为是您的意图。
我将您的插件更改为:
sizequery
fn build(&self,app: &mut AppBuilder) {
app.add_system(groupsize.system())
.add_system_to_stage(stage::FIRST,sizequery.system());
}
将不会打印groupsize
,因为GS-2
会先更新其值。
更改的输出:
sizequery
因此,您书面问题的答案是,读取更改的系统应设置为在进行更改的系统之后运行的阶段。