1个不稳定版本
0.1.0-alpha1 | 2024年6月2日 |
---|
#2356 in 游戏开发
在 4 个工具箱中使用 (通过 bevy_flurx_ipc)
11KB
bevy_flurx_wry
[!注意] 该工具箱处于开发初期阶段,可能面临重大变更。
目的
本工具箱的目的是通过 bevy 和 wry 集成 bevy_flurx。
除此之外,我还想利用 bevy 的可扩展性,并挖掘 bevy 超越现有游戏引擎框架的潜力。
平台支持
已在 Windows
和 MacOS
上确认运行。
Ubuntu
目前不支持。
用法
创建 webview 的两种方式
将现有窗口转换为 webview 窗口。
use bevy::prelude::*;
use bevy::window::PrimaryWindow;
use bevy_flurx_wry::prelude::*;
fn spawn_webview(
mut commands: Commands,
window: Query<Entity, With<PrimaryWindow>>,
) {
// Converts the `Window` attached the entity into a webview window.
commands.entity(window.single()).insert(
WryWebViewBundle {
uri: WebviewUri::new("https://bevy.rust-lang.net.cn/"),
..default()
}
);
}
在窗口内部创建作为子窗口的 webview。
use bevy::prelude::*;
use bevy::window::PrimaryWindow;
use bevy_flurx_wry::prelude::*;
fn spawn_webview(
mut commands: Commands,
window: Query<Entity, With<PrimaryWindow>>,
) {
commands.spawn((
WryWebViewBundle {
..default()
},
AsChildBundle {
// Here, create a webview as child inside a given window.
parent: ParentWindow(window.single()),
bounds: Bounds {
position: Vec2::new(100., 100.),
size: Vec2::new(500., 500.),
min_size: Vec2::new(100., 100.),
},
..default()
},
));
}
Ipc
IpcEvent
您可以监听来自 webview 的事件,反之亦然,向 webview 发射事件。
Webview(javascript) -> bevy
javascript
// you can use any type.
const event = {
message: "message"
};
window.__FLURX__.emit("event_id", event);
rust
use bevy::prelude::*;
use bevy_flurx_wry::prelude::*;
use serde::Deserialize;
#[derive(Deserialize, Debug)]
struct MessageFromWebview {
message: String,
}
fn read_webview_message(
mut er: EventReader<IpcEvent<MessageFromWebview>>
) {
for e in er.read() {
println!("webview message: {}", e.payload.message);
}
}
bevy -> Webview(javascript)
javascript
window.__FLURX__.listen("event_id", ({message}) => {
console.log(message);
});
rust
use bevy::prelude::*;
use bevy_flurx_wry::prelude::*;
use serde_json::json;
fn emit_event(
mut views: Query<&mut EventEmitter>
) {
for mut emitter in views.iter_mut() {
emitter.emit("event_id", &serde_json::json!({
"message" : "hello world!"
}));
}
}
IpcCommand
IpcEvent
无法接收另一侧的输出值。在这种情况下,可以使用 IpcCommand
。
IpcComamnd
可以分为两种命令模式:action-command,task-command
请参阅 examples/ipc_command.rs 了解详细信息。
待办事项
- 增强安全性
- 修复错误
- 添加 API
- 支持 Linux(X11)
- 支持 Linux(Wayland)
变更日志
请参阅 此处。
兼容 Bevy 版本
bevy_flurx_wry | bevy_flurx | bevy |
---|---|---|
0.1.0-alpha1 | 0.5.2 | 0.13.2 |
许可
本工具箱受 MIT 许可证或 Apache 许可证 2.0 的许可。
依赖关系
~3.5MB
~65K SLoC