1 个不稳定版本
| 0.1.0-alpha1 | 2024年6月2日 | 
|---|
#1331 在 游戏开发
被  3 包 使用
28KB
460 行
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授权。
依赖关系
~35–72MB
~1.5M SLoC
