Latest commit 07ed1d0
use bevy::prelude::*; /// 生成2D文本 fn main() { App::new() .add_plugins(DefaultPlugins) .add_startup_system(初始设置) .add_system(动画_平移) .add_system(动画_旋转) .add_system(动画_缩放) .run(); } #[derive(Component)] struct AnimateTranslation; #[derive(Component)] struct AnimateRotation; #[derive(Component)] struct AnimateScale; fn 初始设置(mut commands: Commands, asset_server: Res<AssetServer>) { let font = asset_server.load("fonts/LXGWWenKai.ttf"); let text_style = TextStyle { font, font_size: 60.0, color: Color::WHITE, }; let text_alignment = TextAlignment { vertical: VerticalAlign::Center, horizontal: HorizontalAlign::Center, }; // 2D摄像机 commands.spawn_bundle(OrthographicCameraBundle::new_2d()); commands .spawn_bundle(Text2dBundle { text: Text::with_section("平移", text_style.clone(), text_alignment), ..Default::default() }) // 用 AnimateTranslation 组件来标记这段 Text .insert(AnimateTranslation); commands .spawn_bundle(Text2dBundle { text: Text::with_section("旋转", text_style.clone(), text_alignment), ..Default::default() }) // 用 AnimateRotation 组件来标记这段 Text .insert(AnimateRotation); commands .spawn_bundle(Text2dBundle { text: Text::with_section("缩放", text_style.clone(), text_alignment), ..Default::default() }) // 用 AnimateScale 组件来标记这段 Text .insert(AnimateScale); } fn 动画_平移( mut query: Query<&mut Transform, (With<Text>, With<AnimateTranslation>)>, time: Res<Time>, ) { for mut transform in query.iter_mut() { transform.translation.x = 100.0 * time.seconds_since_startup().sin() as f32 - 400.0; transform.translation.y = 100.0 * time.seconds_since_startup().cos() as f32; } } fn 动画_旋转( mut query: Query<&mut Transform, (With<Text>, With<AnimateRotation>)>, time: Res<Time>, ) { for mut transform in query.iter_mut() { transform.rotation = Quat::from_rotation_z(time.seconds_since_startup().cos() as f32); } } fn 动画_缩放( mut query: Query<&mut Transform, (With<Text>, With<AnimateScale>)>, time: Res<Time>, ) { for mut transform in query.iter_mut() { transform.translation = Vec3::new(400.0, 0.0, 0.0); transform.scale = Vec3::splat((time.seconds_since_startup().sin() as f32 + 1.1) * 2.0); } }