SuperAPI AI 工具集

bevy-adapt-desktop-to-mobile

编程与开发

查看项目

更新于 10-16 06:08

技能介绍

用途

本技能用于把已经运行在桌面窗口上的 Bevy 游戏改造成可接受触摸输入、并适配更小屏幕布局的版本。它关注的是输入、UI 与 DPI 三个层面的适配,而不是平台打包或商店上架。当桌面窗口游戏需要接受触摸并采用更紧凑的布局时,可以加载本技能。平台相关功能由 bevy-platform-mobile 负责。

主要能力

输入

使用 Touches 资源列出当前活动触点。示例中通过 touches.iter().next().map(|touch| touch.position()) 记录最近一次触摸位置,存入自定义的 LastTouch 资源。桌面窗口上的指针位置则通过 Window::cursor_position 获取。动作映射不在本技能内,属于 bevy-input-handling。

UI

放大 Node 的点击目标:示例将带 TouchTarget 组件的节点 min_width 与 min_height 设为 88 像素。为 HUD 根节点添加安全内边距:通过 SafeInsets 资源(含 top、bottom 字段)设置 Node 的 padding,左右固定为 12 像素。

窗口与 DPI

WindowResolution 用于设置逻辑尺寸,并可选地覆盖缩放因子。示例中 window.resolution.set(720.0, 1280.0) 设置逻辑尺寸,set_scale_factor_override(Some(2.0)) 覆盖缩放因子。WindowScaleFactorChanged 事件用于报告实时的 DPI 变化,示例中读取该事件并更新 UiScale 资源。

纹理

ASTC 是面向移动 GPU 的压缩纹理格式,上传仍然通过 Assets<Image> 进行。

使用方式

技能以 Bevy ECS 系统形式给出示例代码,包括:

  • configure_window:查询 &mut Window,设置分辨率与缩放因子覆盖。
  • track_touch:读取 Res<Touches>,写入 ResMut<LastTouch>。
  • enlarge_targets:查询带 TouchTarget 的 &mut Node,设置最小宽高。
  • pad_hud:读取 Res<SafeInsets>,为带 HudRoot 的 &mut Node 设置 padding。
  • follow_dpi:读取 MessageReader<WindowScaleFactorChanged>,更新 ResMut<UiScale>。

依赖声明为 bevy = "0.20"。

适配选择对照:

  • 指针:触点用 Touches;桌面窗口指针位置用 Window::cursor_position。
  • 仅悬停菜单:需要悬停状态的动作也要提供按下或点击路径。
  • 安全边距:用 SafeInsets 资源作为 Node padding 应用。

ECS 所有权与调度规则

技能强调状态归属与调度顺序:

  • 单个实体上的数据由 Component 承载,通过 Query 由单个系统修改,运行在 Update 或 FixedMain。
  • 整个应用共享的一个值由 Resource 承载,由单个系统修改;Startup 插入,之后由读取它的调度使用。
  • 生成由 Commands 负责,由生成系统执行;初始世界在 Startup,运行时生成在后续调度。
  • 不能竞态的顺序用 .chain() 约束,仅作用于被链式的系统,且在同一调度内。
  • 插件边界由 Plugin 的 build 注册系统与资源,在应用运行前完成。

借用规则:两个系统若都可变查询同一组件,必须用 .chain() 排序,或拆分使只有一个写入;无关系统保持并行。

决策对照:

  • 每实体数据:用 Component + Query,不要把脚本字段复制到实体上。
  • 应用级配置或时钟:用 Resource,不要把值复制到每个实体。
  • 稳定模拟步长:用 FixedMain 与 Fixed 时钟,不要把模拟绑定到原始帧 Update。
  • 启动生成:在 Startup 中用 Commands,不要从渲染系统生成。
  • 非共享状态的跨系统通知:使用 bevy-events-messaging 中的 Message 或 observer 槽位,不要在本文件中新造事件类型。
  • 文档集之外的 API:先查官方文档,不要使用虚构的 crate 或 API。

适用场景

  • 桌面窗口游戏需要接受触摸输入。
  • 需要为小屏幕重新布局 HUD,并处理安全边距。
  • 需要跟随设备 DPI 变化调整 UI 缩放。
  • 需要放大触摸点击目标以适配手指操作。

限制

  • 商店列表与操作系统权限对话框不在本技能范围内。
  • 平台打包仍由 bevy-platform-mobile 负责。
  • 本技能只命名有文档的 Bevy crate 与模块,不涉及物理、导航、网络或 XR crate。
  • 不在 Bevy 代码中使用导出预设或触摸模拟名称;Touches、Window、UiScale 才是文档化的 Bevy 部件。
  • 文档 URL 不要固定 /0.20.0/,链接保持指向最新版,0.20 目标只在正文中说明一次。
  • 不要从两个无序系统可变查询同一组件。

相关技能

前置:bevy-master(枢纽与调度)、bevy-ecs-composition(组件与系统)、bevy-platform-mobile(Android 与触摸功能)、bevy-ui-layout(重排 HUD)。

互补:bevy-adapt-mobile-to-desktop(反向适配)、godot-adapt-desktop-to-mobile(Godot 路线上的同一主题)。

下游消费者:暂无。

主技能:bevy-master(Bevy 路由)。