Как перевернуть таблицу спрайтов в Bevy

#rust #bevy

#Ржавчина #группа

Вопрос:

Я пытаюсь перевернуть спрайт, основываясь на том, движется ли игрок влево или вправо по экрану. Мой текущий подход к изменению преобразования SpriteSheetComponents следующим образом, похоже, вообще не изменяет sprite:

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

Есть ли другой компонент спрайта, который я должен изменить, чтобы перевернуть его?

Ответ №1:

Вы можете работать с преобразованием напрямую, но я думаю, что было бы проще вместо этого установить Rotation компонент.

 fn flip_sprite_system(direction: amp;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();
    }
}
  

Комментарии:

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

2. С переработкой системы преобразования из bevy v0.2 это было бы: transform.set_rotation(Quat::from_rotation_y(std::f32::consts::PI)); (использование bevy::math::Quat ).

3. С bevy v0.3 это было бы transform.rotation = Quat::from_rotation_y(std::f32::consts::PI); .