#touch #bevy #canvas #input #plugin #web-page #position

bevy_wasm_touch_fix

适用于Bevy >=0.12,一个修复wasm中触摸位置错误的插件

3个版本

0.1.2 2023年11月11日
0.1.1 2023年11月10日
0.1.0 2023年11月10日

#2208 in 游戏开发

无许可证

29KB
98

一个插件,用于修复Web嵌入式Bevy应用程序中触摸输入的问题,其中触摸输入位置相对于网页视口而非画布。修复了UI元素以及读取TouchInput事件或Touches资源时的错误。

添加插件并确保在渲染Bevy应用程序的html中的canvas id与WindowPlugin和PrimaryCanvasId资源中设置的id匹配。资源中的此值默认为main-canvas

例如,在渲染Bevy应用程序的html中,指定canvas的id

<canvas id="main-canvas"></canvas>

然后您需要配置Window插件以将渲染到该ID

App::new()
    .with_plugins(DefaultPlugins.set(WindowPlugin {
        primary_Window: Some(Window {
            canvas: Some(String::from("#main-canvas")),
            ..default()
        }),
        ..default()
    }))
    // ...

并且如果您使用的是默认值以外的ID main-canvas,则需要更改PrimaryCanvasId资源。

        //...
        .insert_resource(PrimaryCanvasId(String::from("#my-custom-id")));
        //...

注意

我的测试仅限于非常基础的网页。我相当确信这不是问题,但是可能需要使用web-sys::Element::get_bounding_client_rect来计算复杂网页的准确偏移量。

如果在您的端需要额外的调整,您应使用[AdditionalTouchOffset]资源并添加所需的任何额外偏移量,它将被包含在触摸事件的偏移中。

我也不知道取出事件并将其推回的具体影响(如果有)。我保证了在偏移前后a和b队列保持不变(当然加上偏移),但事件计数将加倍。

依赖关系

~28MB
~519K SLoC