Rust: 如何用bevy画2d图形及使用按键控制移动
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();
}
运行效果:

Rust: 如何用bevy画2d图形及使用按键控制移动的更多相关文章
- Java界面编程-建立一个可以画出图形的简单框架
引子:总共使用3个.java文件,建立一个简单界面编程的框架. 第1个文件:NotHelloWorldComponent.java //NotHelloWorldComponent.java 1 im ...
- jzy3D从入门到弃坑_2使用jzy3D0.9画2D散点图
jzy3D从入门到弃坑_2 使用jzy3D0.9画2D散点图 觉得有用的话,欢迎一起讨论相互学习~Follow Me 在上一节中安装jzy3D 0.9版本并且运行了3D的例子 https://blog ...
- Shadertoy 教程 Part 5 - 运用SDF绘制出更多的2D图形
Note: This series blog was translated from Nathan Vaughn's Shaders Language Tutorial and has been au ...
- 如何用css画出三角形
看到有面试题里会有问到如何用css画出三角形 众所周知好多图形都可以拆分成三角形,所以说会了画三角形就可以画出很多有意思的形状 画出三角形的原理是调整border(边框)的四个方向的宽度,线条样式以及 ...
- iOS-CGContextRef画各种图形例子
iOS-CGContextRef画各种图形例子 绘制效果图 绘制代码 - (void)drawRect:(CGRect)rect { //一个不透明类型的Quartz 2D绘画环境,相当于一个画布,你 ...
- 2D图形如何运动模拟出3D效果
一.先看看实现效果图 (左边的2d图片如何运动出右边3d的效果) 引言: 对于这个题目,真的很尴尬,不知道取啥,就想了这个题目 ...
- 【Android】21.2 2D图形图像处理(Canvas和Paint)
分类:C#.Android.VS2015: 创建日期:2016-03-19 一.Canvas对象简介 画布(Canvas对象)是与System.Drawing或iOS核心图形等传统框架非常类似的另一种 ...
- 如何用CorelDRAW画箭头?
CorelDRAW,简称为cdr,是一款专业的矢量绘图软件,在设计界也是常用的专业设计之一,在日常的设计工作中,我们常常需要绘制一些特殊的图形,比如箭头.很多对cdr不是特别熟练的小伙伴不知道如何用c ...
- Shadertoy 教程 Part 4 - 绘制多个2D图形和混入
Note: This series blog was translated from Nathan Vaughn's Shaders Language Tutorial and has been au ...
- Quartz 2D 图形上下文栈 矩阵 裁剪
Quartz 2D 图形上下文栈 矩阵 // // DJVIew.m // 图形上下文栈 // // Created by zjj on 15/6/30. // Copyright (c) 2015 ...
随机推荐
- Spring中的依赖注入DI
目录 Spring中的依赖注入DI Spring中的依赖注入DI 依赖注入的简单理解就是给对象设置变量值. Spring配置文件 <?xml version="1.0" en ...
- Java字节流--输出流OutputStream和输入流InputStream
OutputStream和InputStream都是抽象类 OutputStream定义和InputStream定义 OutputStream InputStream public abstract ...
- jsp技术之“如何在jsp中判断属性为空”
一.判断对象列表为空不显示某段代码 <%-- 展开子属性 --%> <c:if test="${not empty product.variations}"> ...
- Web前端入门第 52 问:JavaScript 的应用领域
截至目前,您应该对前端的 HTML + CSS 应该有了很清楚的认知,至少实现一个静态网页已经完全不在话下了. 当然,CSS 功能绝不止这些,一些不太常用的 CSS 相关知识,后续将通过案例进行分享. ...
- .NET程序启动就报错,如何截获初期化时的问题json
一:背景 1. 讲故事 前几天训练营里的一位朋友在复习课件的时候,程序一跑就报错,截图如下: 从给出的错误信息看大概是因为json格式无效导致的,在早期的训练营里曾经也有一例这样的报错,最后定位下来是 ...
- C++11 auto和decltype关键字
今天来看下C++中的auto和decltype两个关键字 auto关键字定义变量,编译器会自动判断变量的类型 举个栗子: auto i =100; // i 是 int auto p = new A( ...
- 代码随想录第一天|数组part01
二分查找 题目建议: 大家今天能把 704.二分查找 彻底掌握就可以,至于 35.搜索插入位置 和 34. 在排序数组中查找元素的第一个和最后一个位置 ,如果有时间就去看一下,没时间可以先不看,二刷的 ...
- AtCoder Beginner Contest 381-E
AtCoder Beginner Contest 381-E Problem 一个长度为奇数.最中间的那个字符是 /.左边所有字符都是都是 1.右边所有字符都是 2 的字符串被称为11/22 字符串. ...
- 题解:AT_arc073_d [ARC073F] Many Moves
题目链接:link. 题意已经挺简易了,直接上思路吧. 我们设 \(f_{i,j}\) 表示当前在第 \(i\) 个时刻,一个棋子在 \(x_i\) 位置,另一个棋子在 \(j\) 位置的最小代价之和 ...
- python之PypI打包whl文件
一.简单介绍 python中我们经常会用到第三方的包作为工具,比如爬虫解析工具,网络请求工具等.之所以要把它封装成包,意识为了技术与业务分离,二是为了能多 项目多平台共用.python里面用到的第三方 ...