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 在 游戏开发
每月203次下载
在 2 个包中使用 (通过 lightyear)
16KB
198 行
bevy_web_keepalive
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