bevy自帶的畫圖功能有點弱,得先引入bevy_prototype_lyon, Cargo.toml依賴部分如下:
[dependencies]
bevy = { version = "0.5.0", features = ["dynamic"] }
bevy_prototype_lyon = "0.3.1"
main.rs完整代碼如下,已經加了詳細注釋,應該不難看懂
use bevy::diagnostic::{FrameTimeDiagnosticsPlugin, LogDiagnosticsPlugin};
use bevy::prelude::*;
use bevy_prototype_lyon::prelude::*;
#[derive(Default)]
struct ExampleShape;
// 速度
#[derive(Default)]
struct Speed(i8);
// x軸移動方向(1右,-1左,0靜止)
#[derive(Default)]
struct XDirection(i8);
// y軸移動方向(1上,-1下,0靜止)
#[derive(Default)]
struct YDirection(i8);
//按鍵移動
fn move_shape(
input: Res<Input<KeyCode>>,
mut query: Query<&mut Transform, With<ExampleShape>>,
speed: Res<Speed>,
mut x_direct: ResMut<XDirection>,
mut y_direct: ResMut<YDirection>,
) {
for mut transform in query.iter_mut() {
if input.just_pressed(KeyCode::Left) {
x_direct.0 = -1;
}
if input.just_pressed(KeyCode::Right) {
x_direct.0 = 1;
}
if input.just_pressed(KeyCode::Down) {
y_direct.0 = -1;
}
if input.just_pressed(KeyCode::Up) {
y_direct.0 = 1;
}
if input.just_pressed(KeyCode::Space) {
x_direct.0 = 0;
y_direct.0 = 0;
}
transform.translation.x += speed.0 as f32 * x_direct.0 as f32;
transform.translation.y += speed.0 as f32 * y_direct.0 as f32;
}
}
/**
* 初始化
*/
fn setup(mut commands: Commands) {
//畫圓
let shape = shapes::Circle {
radius: 20.,
..shapes::Circle::default()
};
//聲明1個2d"對象"
commands.spawn_bundle(OrthographicCameraBundle::new_2d());
commands
.spawn_bundle(GeometryBuilder::build_as(
&shape,
ShapeColors::outlined(Color::TEAL, Color::BLACK),
DrawMode::Outlined {
//畫外框
fill_options: FillOptions::default(),
outline_options: StrokeOptions::default().with_line_width(1.0),
},
Transform::default(),
))
.insert(ExampleShape);
}
fn main() {
App::build()
//防鋸齒
.insert_resource(Msaa { samples: 8 })
//設置窗口屬性
.insert_resource(WindowDescriptor {
title: "make things move".to_string(),
width: 400.,
height: 300.,
resizable: false,
..Default::default()
})
//初始化x軸方向
.insert_resource(XDirection(0))
//初始化y軸方向
.insert_resource(YDirection(0))
//初始化速度
.insert_resource(Speed(1))
//初始化
.add_startup_system(setup.system())
//添加按鍵控制系統
.add_system(move_shape.system())
//打印幀數等信息
.add_plugin(LogDiagnosticsPlugin::default())
.add_plugin(FrameTimeDiagnosticsPlugin::default())
//加載默認插件
.add_plugins(DefaultPlugins)
//加載畫圖插件
.add_plugin(ShapePlugin)
.run();
}
運行效果:

