Bevy的一些窗口设置

2023-10-08 18:44
文章标签 设置 窗口 bevy

本文主要是介绍Bevy的一些窗口设置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Bevy的一些窗口设置

    • 0. 运行环境
    • 1. 背景色设置
      • 官网文档
      • 代码示例
    • 2. 分辨率、标题、窗口按钮、锁定窗口尺寸设置
      • 官网文档
      • 代码示例
    • 3. 帧率设置
      • 使用方法
    • 完整代码示例
    • 参考链接

记录了Bevy中窗口背景色、分辨率、标题、是否保留窗口按钮、是否锁定窗口尺寸、帧率的设置。

0. 运行环境

运行环境如下:

  • Rust版本:1.72.0
  • Bevy版本:0.11.3

所用Cargo.toml如下:

[package]
name = "bevy-test"
version = "0.1.0"
edition = "2021"[dependencies]
bevy = "0.11.3"

以下代码基于的基本代码如下:

use bevy::prelude::*;
use bevy::window::PrimaryWindow;fn main() {App::new().add_plugins(DefaultPlugins).add_systems(Startup, spawn_camera).add_systems(Startup, spawn_player).run();
}#[derive(Component)]
pub struct Player {}/* 在屏幕中心创建2D摄像机 */
pub fn spawn_camera(mut commands: Commands, window_query: Query<&Window, With<PrimaryWindow>>) {let window = window_query.get_single().unwrap();commands.spawn(Camera2dBundle {transform: Transform::from_xyz(window.width() / 2.0, window.height() / 2.0, 0.0),..default()});
}/* 在屏幕中心创建玩家(方块) */
pub fn spawn_player(mut commands: Commands,window_query: Query<&Window, With<PrimaryWindow>>
) {let window = window_query.get_single().unwrap();commands.spawn((SpriteBundle {sprite: Sprite {color: Color::rgb(0.0, 1.0, 1.0),custom_size: Some(Vec2::new(50.0, 50.0)),..default()},transform: Transform::from_xyz(window.width() / 2.0, window.height() / 2.0, 0.0),..default()},Player {},));
}/* 玩家移动 */
pub fn player_movement(keyboard_input: Res<Input<KeyCode>>,mut player_query: Query<&mut Transform, With<Player>>,time: Res<Time>,
) {if let Ok(mut transform) = player_query.get_single_mut() {let mut direction = Vec3::ZERO;if keyboard_input.pressed(KeyCode::Left) || keyboard_input.pressed(KeyCode::A) {direction += Vec3::new(-1.0, 0.0, 0.0);}if keyboard_input.pressed(KeyCode::Right) || keyboard_input.pressed(KeyCode::D) {direction += Vec3::new(1.0, 0.0, 0.0);}if keyboard_input.pressed(KeyCode::Up) || keyboard_input.pressed(KeyCode::W) {direction += Vec3::new(0.0, 1.0, 0.0);}if keyboard_input.pressed(KeyCode::Down) || keyboard_input.pressed(KeyCode::S) {direction += Vec3::new(0.0, -1.0, 0.0);}if direction.length() > 0.0 {direction = direction.normalize();}transform.translation += direction * 500.0 * time.delta_seconds();}
}

1. 背景色设置

Bevy中背景色是通过添加bevy::prelude::ClearColor资源的方式设置的。

官网文档

ClearColor文档链接:https://docs.rs/bevy/latest/bevy/prelude/struct.ClearColor.html

pub struct ClearColor(pub Color);

A Resource that stores the color that is used to clear the screen between frames.
This color appears as the “background” color for simple apps, when there are portions of the screen with nothing rendered.

翻译:

一种资源,用于储存在两帧之间填充屏幕的颜色。
当屏幕的某些部分没有任何渲染时,此颜色显示为简单应用程序的“背景”颜色。

代码示例

fn main() {App::new()/* 设置背景色 */.insert_resource(ClearColor(Color::rgb(0.0, 0.8, 0.0))).add_plugins(DefaultPlugins).add_systems(Startup, spawn_camera).add_systems(Startup, spawn_player).run();
}

2. 分辨率、标题、窗口按钮、锁定窗口尺寸设置

Bevy中分辨率、标题、窗口按钮、锁定窗口尺寸设置是通过设置默认插件(DefaultPlugins)中的WindowPlugin来实现的。
注意:在Bevy 0.8及以前分辨率等设置是通过WindowDescriptor来实现的,从0.9版本改为通过设置WindowPlugin来实现。

官网文档

Window结构体文档链接:https://docs.rs/bevy/latest/bevy/window/struct.Window.html

pub struct Window {pub cursor: Cursor,pub present_mode: PresentMode,pub mode: WindowMode,pub position: WindowPosition,pub resolution: WindowResolution,pub title: String,pub composite_alpha_mode: CompositeAlphaMode,pub resize_constraints: WindowResizeConstraints,pub resizable: bool,pub decorations: bool,pub transparent: bool,pub focused: bool,pub window_level: WindowLevel,pub canvas: Option<String>,pub fit_canvas_to_parent: bool,pub prevent_default_event_handling: bool,pub internal: InternalWindowState,pub ime_enabled: bool,pub ime_position: Vec2,pub window_theme: Option<WindowTheme>,
}

The defining Component for window entities, storing information about how it should appear and behave.
Each window corresponds to an entity, and is uniquely identified by the value of their Entity. When the Window component is added to an entity, a new window will be opened. When it is removed or the entity is despawned, the window will close.
This component is synchronized with winit through bevy_winit: it will reflect the current state of the window and can be modified to change this state.

代码示例

fn main() {App::new().insert_resource(ClearColor(Color::rgb(0.0, 0.8, 0.0)))/* 窗口设置 */.add_plugins(DefaultPlugins.set(WindowPlugin {primary_window: Some(Window {title: "A Cool Title".into(),resolution: (800., 600.).into(),resizable: true,decorations: true,..default()}),..default()})).add_systems(Startup, spawn_camera).add_systems(Startup, spawn_player).run();
}

3. 帧率设置

目前官网似乎没有提供设置帧率的方法,但有一个名为bevy_framepace的crate可以实现设置帧率的功能。
链接:https://github.com/aevyrie/bevy_framepace

和Bevy的版本对应关系:

bevybevy_framepace
0.110.13
0.100.12
0.90.7, 0.8, 0.9, 0.10, 0.11
0.80.5, 0.6

使用方法

  1. Cargo.toml中加入依赖:
[package]
name = "bevy-test"
version = "0.1.0"
edition = "2021"[dependencies]
bevy = "0.11.3"
bevy_framepace = "0.13.3"
  1. 加入插件
app.add_plugin(bevy_framepace::FramepacePlugin);
  1. 设置帧率
pub fn set_frame_rate(mut settings: ResMut<bevy_framepace::FramepaceSettings>,){use bevy_framepace::Limiter;settings.limiter = Limiter::from_framerate(30.0);
}

完整代码示例

use bevy::prelude::*;
use bevy::window::PrimaryWindow;fn main() {App::new().insert_resource(ClearColor(Color::rgb(0.0, 0.8, 0.0)))/* 窗口设置 */.add_plugins(DefaultPlugins.set(WindowPlugin {primary_window: Some(Window {title: "A Cool Title".into(),resolution: (800., 600.).into(),resizable: true,decorations: true,..default()}),..default()})).add_plugins(bevy_framepace::FramepacePlugin).add_systems(Startup, spawn_camera).add_systems(Startup, spawn_player).add_systems(Startup, set_frame_rate).add_systems(Update, player_movement).run();
}#[derive(Component)]
pub struct Player {}/* 在屏幕中心创建2D摄像机 */
pub fn spawn_camera(mut commands: Commands, window_query: Query<&Window, With<PrimaryWindow>>) {let window = window_query.get_single().unwrap();commands.spawn(Camera2dBundle {transform: Transform::from_xyz(window.width() / 2.0, window.height() / 2.0, 0.0),..default()});
}/* 在屏幕中心创建玩家(方块) */
pub fn spawn_player(mut commands: Commands,window_query: Query<&Window, With<PrimaryWindow>>
) {let window = window_query.get_single().unwrap();commands.spawn((SpriteBundle {sprite: Sprite {color: Color::rgb(0.0, 1.0, 1.0),custom_size: Some(Vec2::new(50.0, 50.0)),..default()},transform: Transform::from_xyz(window.width() / 2.0, window.height() / 2.0, 0.0),..default()},Player {},));
}/* 玩家移动 */
pub fn player_movement(keyboard_input: Res<Input<KeyCode>>,mut player_query: Query<&mut Transform, With<Player>>,time: Res<Time>,
) {if let Ok(mut transform) = player_query.get_single_mut() {let mut direction = Vec3::ZERO;if keyboard_input.pressed(KeyCode::Left) || keyboard_input.pressed(KeyCode::A) {direction += Vec3::new(-1.0, 0.0, 0.0);}if keyboard_input.pressed(KeyCode::Right) || keyboard_input.pressed(KeyCode::D) {direction += Vec3::new(1.0, 0.0, 0.0);}if keyboard_input.pressed(KeyCode::Up) || keyboard_input.pressed(KeyCode::W) {direction += Vec3::new(0.0, 1.0, 0.0);}if keyboard_input.pressed(KeyCode::Down) || keyboard_input.pressed(KeyCode::S) {direction += Vec3::new(0.0, -1.0, 0.0);}if direction.length() > 0.0 {direction = direction.normalize();}transform.translation += direction * 500.0 * time.delta_seconds();}
}/* 设置帧率 */
pub fn set_frame_rate(mut settings: ResMut<bevy_framepace::FramepaceSettings>,){use bevy_framepace::Limiter;settings.limiter = Limiter::from_framerate(30.0);
}

参考链接

  1. 【中字】Bevy 0.8入门教程-基本3D场景_哔哩哔哩_bilibili
  2. 0.8 to 0.9
  3. Window in bevy::window - Rust

这篇关于Bevy的一些窗口设置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/167291

相关文章

PostgreSQL 默认隔离级别的设置

《PostgreSQL默认隔离级别的设置》PostgreSQL的默认事务隔离级别是读已提交,这是其事务处理系统的基础行为模式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一 默认隔离级别概述1.1 默认设置1.2 各版本一致性二 读已提交的特性2.1 行为特征2.2

一文详解MySQL如何设置自动备份任务

《一文详解MySQL如何设置自动备份任务》设置自动备份任务可以确保你的数据库定期备份,防止数据丢失,下面我们就来详细介绍一下如何使用Bash脚本和Cron任务在Linux系统上设置MySQL数据库的自... 目录1. 编写备份脚本1.1 创建并编辑备份脚本1.2 给予脚本执行权限2. 设置 Cron 任务2

mtu设置多少网速最快? 路由器MTU设置最佳网速的技巧

《mtu设置多少网速最快?路由器MTU设置最佳网速的技巧》mtu设置多少网速最快?想要通过设置路由器mtu获得最佳网速,该怎么设置呢?下面我们就来看看路由器MTU设置最佳网速的技巧... 答:1500 MTU值指的是在网络传输中数据包的最大值,合理的设置MTU 值可以让网络更快!mtu设置可以优化不同的网

Windows的CMD窗口如何查看并杀死nginx进程

《Windows的CMD窗口如何查看并杀死nginx进程》:本文主要介绍Windows的CMD窗口如何查看并杀死nginx进程问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Windows的CMD窗口查看并杀死nginx进程开启nginx查看nginx进程停止nginx服务

MySQL 设置AUTO_INCREMENT 无效的问题解决

《MySQL设置AUTO_INCREMENT无效的问题解决》本文主要介绍了MySQL设置AUTO_INCREMENT无效的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录快速设置mysql的auto_increment参数一、修改 AUTO_INCREMENT 的值。

详解Linux中常见环境变量的特点与设置

《详解Linux中常见环境变量的特点与设置》环境变量是操作系统和用户设置的一些动态键值对,为运行的程序提供配置信息,理解环境变量对于系统管理、软件开发都很重要,下面小编就为大家详细介绍一下吧... 目录前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变

安装centos8设置基础软件仓库时出错的解决方案

《安装centos8设置基础软件仓库时出错的解决方案》:本文主要介绍安装centos8设置基础软件仓库时出错的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录安装Centos8设置基础软件仓库时出错版本 8版本 8.2.200android4版本 javas

Ubuntu设置程序开机自启动的操作步骤

《Ubuntu设置程序开机自启动的操作步骤》在部署程序到边缘端时,我们总希望可以通电即启动我们写好的程序,本篇博客用以记录如何在ubuntu开机执行某条命令或者某个可执行程序,需要的朋友可以参考下... 目录1、概述2、图形界面设置3、设置为Systemd服务1、概述测试环境:Ubuntu22.04 带图

VSCode设置python SDK路径的实现步骤

《VSCode设置pythonSDK路径的实现步骤》本文主要介绍了VSCode设置pythonSDK路径的实现步骤,包括命令面板切换、settings.json配置、环境变量及虚拟环境处理,具有一定... 目录一、通过命令面板快速切换(推荐方法)二、通过 settings.json 配置(项目级/全局)三、

如何Python使用设置word的页边距

《如何Python使用设置word的页边距》在编写或处理Word文档的过程中,页边距是一个不可忽视的排版要素,本文将介绍如何使用Python设置Word文档中各个节的页边距,需要的可以参考下... 目录操作步骤代码示例页边距单位说明应用场景与高级用China编程途小结在编写或处理Word文档的过程中,页边距是一个