#bevy-plugin #bevy #web #web-worker #gamedev #wasm

bevy_web_keepalive

Bevy插件,即使在浏览器中不可见的情况下也能使bevy应用继续运行

7个版本

0.3.2 2024年7月9日
0.3.1 2024年5月27日
0.2.0 2024年5月25日
0.1.2 2024年5月25日

324游戏开发

Download history 67/week @ 2024-05-18 510/week @ 2024-05-25 28/week @ 2024-06-01 11/week @ 2024-06-08 4/week @ 2024-06-15 5/week @ 2024-06-22 3/week @ 2024-06-29 139/week @ 2024-07-06 47/week @ 2024-07-13 9/week @ 2024-07-20 74/week @ 2024-07-27 41/week @ 2024-08-03 66/week @ 2024-08-10 21/week @ 2024-08-17

每月203次下载
2 个包中使用 (通过 lightyear)

MIT/Apache

16KB
198

bevy_web_keepalive

crates.io docs.rs

Bevy插件库,即使在浏览器中不可见的情况下也能使bevy应用继续运行

WebKeepalivePlugin

WebKeepalivePlugin 插件创建一个Web Worker来运行主调度,以在后台保持bevy的运行(例如,当用户在其他浏览器标签页上时)。

使用方法

// To add the worker, use add_plugins
app.add_plugins(WebKeepalivePlugin::default())

// Configure the worker like this:
app.add_plugins(WebKeepalivePlugin {
    initial_wake_delay: 1000.0, // 1 sec delay
})

// To change the wake_delay at run-time, access the `KeepaliveSettings` resource in a system
fn system_a(mut settings: ResMut<KeepaliveSettings>) {
    settings.wake_delay = 16.667; // 60Hz updates
}

// To terminate the web worker remove the `KeepaliveSettings` resource
fn system_b(world: &mut World) {
    world.remove_resource::<KeepaliveSettings>();
}

原因:bevy_winit 通过requestAnimationFrame运行其事件循环。这对于不需要在后台运行的应用来说效果很好。然而,在某些情况下,这可能是我们不希望的,例如需要持续连接的多玩家游戏,不能依赖于重新连接。

VisibilityChangeListenerPlugin

VisibilityChangeListenerPlugin 插件注册了一个监听器,每当应用的可视性发生变化时都会触发,并更新 WindowVisibility 资源,同时允许在应用隐藏后最后一次运行 Main 调度。

使用方法

// To add the listener, use add_plugins
app.add_plugins(VisibilityChangeListenerPlugin::default())

// To actually run the main schedule, configure the plugin like this:
app.add_plugins(VisibilityChangeListenerPlugin { run_main_schedule_on_hide: true })

// To use the `WindowVisibility` resource, access it in a system
fn system_a(window_visibility: Res<WindowVisibility>) {
    if !window_visibility.0 {
        // Do something that you want to do whenever the window is hidden
    }
}

原因:这可以用来通知内部或外部服务用户的不活跃状态。

功能需求: listener

BackgroundTimerPlugin

BackgroundTimerPlugin 插件添加了一个包含计时器的实用资源,该计时器跟踪在后台花费的时间。此插件需要与 WebKeepalivePlugin 配对才能正常工作(在bevy_time中默认将帧时间间隔限制为250ms)

使用方法

// To add the listener, use add_plugins, please note that the WebKeepalivePlugin.initial_wake_delay should be < 250.0 so that we can ensure that the frame delta time won't be capped at 250ms
app.add_plugins((WebKeepalivePlugin::default(), BackgroundTimerPlugin))

// To use the `BackgroundTimer` resource, access it in a system
fn system_a(timer: Res<BackgroundTimer>) {
    if !timer.0.elapsed_secs() > 60.0 {
        // Clientside-timeout the user or something similar
    }
}

原因:可用于收集有关用户在窗口可见性方面的行为分析,或在多玩家游戏中在一段时间的不活跃后对玩家进行客户端超时。

功能需求: timer

依赖关系

~19MB
~335K SLoC