如何解决为什么我在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"
解决方法
这是因为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
因此,您书面问题的答案是,读取更改的系统应设置为在进行更改的系统之后运行的阶段。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。