如何在 Bevy 中翻转 spritesheet

EtT*_*ute 4 rust bevy

我试图根据玩家是在屏幕上向左还是向右移动来翻转精灵。我目前修改 SpriteSheetComponents 变换的方法如下,似乎根本没有改变精灵:

  fn player_direction_system(
      velocity: &Velocity,
      _: &FaceMovementDirection,
      mut transform: Mut<Transform>,
  ) {
      let flip = velocity.horizontal.signum();
      transform.value = transform.value * Mat4::from_scale(Vec3::unit_y() * flip);
  }
Run Code Online (Sandbox Code Playgroud)

我应该修改精灵的不同组件以翻转它吗?

car*_*art 6

您绝对可以直接处理转换,但我认为设置Rotation组件会更容易。

fn flip_sprite_system(direction: &FaceMovementDirection, mut transform: Mut<Transform>) {
    // I'm taking liberties with your FaceMovementDirection api :)
    if direction.is_left() {
        transform.rotation = Quat::from_rotation_y(std::f32::consts::PI);
    } else {
        transform.rotation = Quat::default();
    }
}
Run Code Online (Sandbox Code Playgroud)