【问题标题】:In the Bevy Engine, how do I use &mut queries in the for-each system?在 Bevy 引擎中,如何在 for-each 系统中使用 &mut 查询?
【发布时间】:2020-08-23 21:04:46
【问题描述】:

当使用组件的变异扩展一个基本示例时,我尝试将&mut 添加到系统中的组件参数中。但是,这触发了no method "system" found 错误。

我的代码在这里:

use bevy::prelude::*;

  fn setup(
      mut commands: Commands,
      asset_server: Res<AssetServer>,
      mut materials: ResMut<Assets<ColorMaterial>>,
  ) {
      let texture_handle = asset_server.load("icon.png").unwrap();
      commands
          .spawn(Camera2dComponents::default())
          .spawn(SpriteComponents {
              material: materials.add(texture_handle.into()),
              rotation: Rotation::from_rotation_z(0.0),
              ..Default::default()
          })
          .with(Player(0.0))
          .with(());
  }

  struct Player(f32);

  fn control_system(keyboard_input: Res<Input<KeyCode>>, player: &mut Player) { // <- mut added here
      let mut r = player.0;
      println!("hello");

      /*
      if keyboard_input.pressed(KeyCode::Left) {
          player.0 += 0.1;
      }

      if keyboard_input.pressed(KeyCode::Right) {
          player.0 -= 0.1;
      }
      */
  }

  fn main() {
      App::build()
          .add_default_plugins()
          .add_startup_system(setup.system())
          .add_system(control_system.system())
          .run();
  }

看着Into foreach system,我承认我不完全理解这不起作用或为什么不起作用,所以也许我错过了一些基本的东西!

我犯了一个简单的错误吗?人们是否正在做一些事情来解决这个问题?

谢谢!

【问题讨论】:

    标签: rust bevy


    【解决方案1】:

    我们选择在 Bevy ECS 中专门使用 Mut&lt;T&gt; 指针,因为它们让我们可以跟踪组件何时发生更改。这就是我们的“更改跟踪”查询起作用的原因。

    Query 实际上也返回一个Mut&lt;T&gt; 指针。

    我们实际上最初在 for-each 系统中支持 &amp;mut T,但这会返回一个实际的 &amp;mut T 引用,这会阻止我们跟踪 T 的突变。这会造成使用 &amp;mut T 的人不再信任的情况“更改查询”的结果,例如 Changed&lt;T&gt;。让人们能够意外(或有意)脱离变更跟踪似乎并不值得在系统中使用更直观的&amp;mut T

    Mut&lt;T&gt; 是一个稍微不标准的 api,它支持非常酷的功能。许多新用户会点击一次并认为“好吧,这有点奇怪”,但他们再也不需要考虑它了。

    【讨论】:

      【解决方案2】:
      fn control_system(keyboard_input: Res<Input<KeyCode>>, mut player: Mut<Player>) {
          let mut r = player.0;
          println!("hello");
      }
      

      mut entity: Mut&lt;Entity&gt; 好像是格式。

      Mut 借用了一个实体。在文档中here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-16
        • 1970-01-01
        • 2012-11-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-30
        相关资源
        最近更新 更多