#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);
.