如何在 Bevy 中制作一个不干扰底层应用程序(不阻挡鼠标、键盘等)的透明覆盖窗口

问题描述 投票:0回答:1

我想创建一个 bevy 窗口: 没有背景 没有窗户装饰 总是在最前面 不会干扰底层窗口的输入。

我做了一些研究,我认为在windows上你可以在窗口上设置一个名为“input transparency”的值,它定义了下面的窗口是否也可以接收输入。 Bevy-rs 是一个简单的 rust 库,所以我不知道我是否可以很容易地完成这项工作。 有没有办法让我做这个工作?我是否必须修改 wgpu-rs 底层代码?还是我必须使用 Bevy 以外的其他游戏引擎?

Bevy 版本:0.8.0

rust window cross-platform bevy wgpu-rs
1个回答
0
投票

一旦 0.10 版本发布(应该最早可能在下周发布),这应该是开箱即用的。 0.10.0 添加了对禁用输入直通命中测试的支持。已经支持透明窗口。

let window_descriptor = WindowDescriptor {
    // Enable transparent support for the window
    transparent: true,
    decorations: false,
    always_on_top: true,
    // Allows inputs to pass through to apps behind this app. New to bevy 0.10
    hittest: false,
    width: 800.0,
    height: 600.0,
    ..default()
};

App::new()
    // Make it render background as transparent
    .insert_resource(ClearColor(Color::NONE))
    .add_plugins(DefaultPlugins.set(WindowPlugin {
        window: window_descriptor,
        ..default()
    }))

您可能想使用 https://crates.io/crates/bevy_global_input 在窗口未聚焦时获取输入,因为 bevy 不支持开箱即用。

如果你想使用 bevy 0.9,为此做出更改的人有一个 0.9 分支,其中应用了更改:https://github.com/laundmo/bevy/tree/bevy_0.9_overlay

这是我为周末项目做的一个例子:https://mastodon.gamedev.place/@paul/109604847674290795

关于该项目的不和谐线程的一些有用的讨论: https://discord.com/channels/691052431525675048/692648638823923732/1058481406730317907

© www.soinside.com 2019 - 2024. All rights reserved.