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

相关文章

PyCharm如何设置新建文件默认为LF换行符

《PyCharm如何设置新建文件默认为LF换行符》:本文主要介绍PyCharm如何设置新建文件默认为LF换行符问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录PyCharm设置新建文件默认为LF换行符设置换行符修改换行符总结PyCharm设置新建文件默认为LF

Linux上设置Ollama服务配置(常用环境变量)

《Linux上设置Ollama服务配置(常用环境变量)》本文主要介绍了Linux上设置Ollama服务配置(常用环境变量),Ollama提供了多种环境变量供配置,如调试模式、模型目录等,下面就来介绍一... 目录在 linux 上设置环境变量配置 OllamPOgxSRJfa手动安装安装特定版本查看日志在

Ubuntu中Nginx虚拟主机设置的项目实践

《Ubuntu中Nginx虚拟主机设置的项目实践》通过配置虚拟主机,可以在同一台服务器上运行多个独立的网站,本文主要介绍了Ubuntu中Nginx虚拟主机设置的项目实践,具有一定的参考价值,感兴趣的可... 目录简介安装 Nginx创建虚拟主机1. 创建网站目录2. 创建默认索引文件3. 配置 Nginx4

如何关闭 Mac 触发角功能或设置修饰键? mac电脑防止误触设置技巧

《如何关闭Mac触发角功能或设置修饰键?mac电脑防止误触设置技巧》从Windows换到iOS大半年来,触发角是我觉得值得吹爆的MacBook效率神器,成为一大说服理由,下面我们就来看看mac电... MAC 的「触发角」功能虽然提高了效率,但过于灵敏也让不少用户感到头疼。特别是在关键时刻,一不小心就可能触

Nginx配置系统服务&设置环境变量方式

《Nginx配置系统服务&设置环境变量方式》本文介绍了如何将Nginx配置为系统服务并设置环境变量,以便更方便地对Nginx进行操作,通过配置系统服务,可以使用系统命令来启动、停止或重新加载Nginx... 目录1.Nginx操作问题2.配置系统服android务3.设置环境变量总结1.Nginx操作问题

grom设置全局日志实现执行并打印sql语句

《grom设置全局日志实现执行并打印sql语句》本文主要介绍了grom设置全局日志实现执行并打印sql语句,包括设置日志级别、实现自定义Logger接口以及如何使用GORM的默认logger,通过这些... 目录gorm中的自定义日志gorm中日志的其他操作日志级别Debug自定义 Loggergorm中的

前端 CSS 动态设置样式::class、:style 等技巧(推荐)

《前端CSS动态设置样式::class、:style等技巧(推荐)》:本文主要介绍了Vue.js中动态绑定类名和内联样式的两种方法:对象语法和数组语法,通过对象语法,可以根据条件动态切换类名或样式;通过数组语法,可以同时绑定多个类名或样式,此外,还可以结合计算属性来生成复杂的类名或样式对象,详细内容请阅读本文,希望能对你有所帮助...

MySQL8.0设置redo缓存大小的实现

《MySQL8.0设置redo缓存大小的实现》本文主要在MySQL8.0.30及之后版本中使用innodb_redo_log_capacity参数在线更改redo缓存文件大小,下面就来介绍一下,具有一... mysql 8.0.30及之后版本可以使用innodb_redo_log_capacity参数来更改

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

mybatis和mybatis-plus设置值为null不起作用问题及解决

《mybatis和mybatis-plus设置值为null不起作用问题及解决》Mybatis-Plus的FieldStrategy主要用于控制新增、更新和查询时对空值的处理策略,通过配置不同的策略类型... 目录MyBATis-plusFieldStrategy作用FieldStrategy类型每种策略的作