8个版本 (5个破坏性更新)
0.6.0 | 2024年7月14日 |
---|---|
0.5.0 | 2024年3月11日 |
0.4.0 | 2024年2月22日 |
0.3.2 | 2024年2月3日 |
0.1.0 | 2023年11月24日 |
#220 in 游戏开发
214 每月下载量
39KB
411 行
bevy_file_dialog
一个用于使用系统对话框加载和保存文件的Bevy游戏引擎插件。
用法
请参见下面的用法说明以及示例(单独的加载/保存对话框)。此示例也存在于示例中,您可以使用cargo run --example save_and_load
运行它。
use bevy::prelude::*;
use bevy_file_dialog::prelude::*;
struct TextFileContents;
fn main() {
App::new()
.add_plugins(DefaultPlugins)
// Add the file dialog plugin
.add_plugins(
FileDialogPlugin::new()
// allow saving of files marked with TextFileContents
.with_save_file::<TextFileContents>()
// allow loading of files marked with TextFileContents
.with_load_file::<TextFileContents>(),
)
.add_systems(Startup, setup)
.add_systems(
Update,
(
dialog,
file_loaded,
file_saved,
file_load_canceled,
file_save_canceled,
),
)
.run();
}
fn setup(mut commands: Commands) {
commands.spawn(Camera2dBundle::default());
}
fn dialog(mut commands: Commands, keys: Res<ButtonInput<KeyCode>>) {
// Ctrl+S - save file
// Ctrl+O - load file
if keys.any_pressed([KeyCode::ControlLeft, KeyCode::ControlRight]) {
if keys.just_pressed(KeyCode::S) {
// save contents to selected file
commands
.dialog()
.add_filter("Text", &["txt"])
.set_file_name("hello.txt")
.save_file::<TextFileContents>(b"hello".to_vec());
} else if keys.just_pressed(KeyCode::O) {
// read contents from selected file
commands
.dialog()
.add_filter("Text", &["txt"])
.load_file::<TextFileContents>();
}
}
}
fn file_loaded(mut ev_loaded: EventReader<DialogFileLoaded<TextFileContents>>) {
for ev in ev_loaded.read() {
eprintln!(
"Loaded file {} with contents '{}'",
ev.file_name,
std::str::from_utf8(&ev.contents).unwrap()
);
}
}
fn file_load_canceled(mut ev_canceled: EventReader<DialogFileLoadCanceled<TextFileContents>>) {
for _ in ev_canceled.read() {
eprintln!("Text file content load canceled");
}
}
fn file_saved(mut ev_saved: EventReader<DialogFileSaved<TextFileContents>>) {
for ev in ev_saved.read() {
match ev.result {
Ok(_) => eprintln!("File {} successfully saved", ev.file_name),
Err(ref err) => eprintln!("Failed to save {}: {}", ev.file_name, err),
}
}
}
fn file_save_canceled(mut ev_canceled: EventReader<DialogFileSaveCanceled<TextFileContents>>) {
for _ in ev_canceled.read() {
eprintln!("Text file content save canceled");
}
}
Linux和BSD上的文件对话框
您可以在Linux上使用两个后端之一创建文件对话框,该对话框由特性指定,即gtk3
或xdg-portal
。默认情况下,bevy_file_dialog
使用由rfd
提供的默认值,即xdg-portal
。您可以通过在Cargo.toml
中指定正确的特性来更改此设置。
bevy_file_dialog = { version = "*", default-features = false, features = ["gtk3"] }
更多信息请参阅rfd文档,那里的信息与bevy_file_dialog
匹配。
bevy | bevy_file_dialog |
---|---|
0.14 | 0.6.0 |
0.13 | 0.4.0 - 0.5.0 |
0.12 | 0.1.0 - 0.3.1 |
依赖关系
~8–22MB
~309K SLoC