mcpField
I
iphone-duo-games

iphone-duo-games

github.com/mirzaaghazadeh开发250480 次安装今天更新
代码仓库

关于 iphone-duo-games

面向游戏开发者的 iPhone Duo 适配指南,重点说明运行时窗口变化、触控目标避开折叠区域,以及如何保持不同姿态下的可玩性。

主要功能

  1. 01响应运行时视口尺寸变化
  2. 02优先调整画面纵横比
  3. 03保持文字与触控目标尺寸稳定
  4. 04让触控控件避开折叠和遮挡区域
  5. 05检查分屏时的渲染表现

适用场景

  1. 01适配设备开合和旋转时的游戏画面
  2. 02为折叠姿态调整虚拟摇杆和按钮位置
  3. 03在固定比例游戏中设计有意图的留边
  4. 04确保分屏窗口中控件仍可见

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mirzaaghazadeh/iphone-duo-skills --skill iphone-duo-games

安装后在 Claude Code 中输入/iphone-duo-games确认已加载。

详细介绍

iPhone Duo 上的游戏

游戏不受本设备大部分 UI 指南的限制——无需调整工具栏的方向,也无需适配分屏视图。但游戏仍然必须适应尺寸变化。每当有人打开、关闭、折叠或旋转设备时,运行中的游戏所处屏幕的尺寸和形状都会改变。如果游戏假设视口固定,就会出现黑边、画面拉伸,或控件超出屏幕边缘的情况。

可以锁定方向,但不能停止填满屏幕

锁定为纵向或横向都没问题,而且系统支持。但不能把方向锁定当作假设尺寸固定的许可。

在这里,这种假设行不通有两个原因:

  1. 本设备有两块尺寸不同的显示屏,游戏会在一局中途切换到另一块屏幕。
  2. **内屏不遵循受支持的界面方向设置。**此前在每部 iPhone 上都生效的方向锁定,在内屏上会失效。

UIRequiresFullScreen 的行为也一样——仍会生效,但设备打开和关闭时,游戏仍会调整尺寸。无论如何,都要为尺寸变化做好准备。

因此:选择你需要的方向,然后确保游戏在每种姿态下都填满屏幕。这才是真正的要求。

调整宽高比胜过加黑边

视口形状变化时,你有三个选择,按优先顺序排列:

**1. 调整宽高比。**显示更多或更少的游戏世界。这是首选方案:扩展摄像机视锥,扩大可视范围,让场景自然延伸到分配给它的空间中。游戏始终铺满屏幕,无论设备处于何种姿态,都能呈现原生体验。

**2. 用美术内容填充左右或上下黑边。**如果设计确实无法适应可变宽高比——例如固定的益智游戏网格,或经过精确调校的平台游戏摄像机——那么可以接受加边,但要把边缘填满。延展背景、续接场景美术,或在填充区域加入主题边框。目标是让画面看起来像经过精心设计的边框,而不是游戏没能适配屏幕。

**3. 直接留黑边。**应当避免。这就是“未能适配”的样子。

保持文字和控件尺寸不变

视口调整尺寸时,不要急着将整个场景等比缩放。等比缩放会让 HUD 文字和触控目标与游戏世界一起缩小——因此,打开设备切换到更大的显示屏时,文字反而更难阅读,按钮也更难点击,这恰恰背道而驰。

缩放游戏世界;让 UI 保持在独立图层中,并以点为单位设置尺寸。尽可能让文字和控件在每种姿态下都保持近似恒定的实际尺寸。尤其要确保屏幕触控控件不会仅仅因为宽高比变化,就缩小到舒适尺寸以下。

折叠处会给触控控件带来实际问题

这是最可能影响游戏的 iPhone Duo 特有问题。

设备处于半折叠状态时,内屏中间会形成弯曲区域,这里的内容确实更难看清,也更难点击。虚拟摇杆、射击按钮或拖动目标如果落在弯曲处,就会变得不可靠——不是完全看不见,只是更难使用,因此也更难从错误报告中诊断问题。

游戏很少使用能自动避开折叠区域的系统组件,因此需要由你来处理:

  • 查询保留区域,并确保交互控件避开分隔区域(折叠处)。API 和位置调整模式请参见 ../iphone-duo-adaptive-layout/SKILL.md。
  • 将触控控件锚定在外侧边缘,而不是居中放置。边缘锚定在所有姿态下都更可靠,而且设备展开时不会造成任何损失。
  • 也要留意遮挡区域:外侧前置摄像头始终存在,内侧摄像头则会在启用时出现。

纯视觉、非交互内容可以跨越折叠处。需要移动的是触控目标和重要读数。

值得针对其进行设计的姿势

你不需要为每种姿势定制布局,但有两种值得考虑:

桌面/笔记本电脑姿势。 设备立在平面上,一半屏幕朝上,另一半朝向玩家。这是一种真正新颖的游戏姿势——下半部分是稳定的触控区域,上半部分是显示区域。采用棋盘与控制区分屏布局的游戏很适合这种姿势。

帐篷姿势。 设备立在边缘上,无需用手扶持。适合放置、观战、环境式或回合制游戏。

将这两种姿势都视为额外加分项。不要让任何功能依赖某种用户可能永远不会使用的姿势。

分屏视图

和其他应用一样,游戏也可以参与分屏视图多任务处理——你的游戏可能会缩小到内部显示屏的一半。这样一来,画面会比你设计时考虑的尺寸更小,形状也不同。确保游戏仍能正确渲染,控制项不会被挤出屏幕边缘;你不必保证这种尺寸下的游玩体验出色,但至少不能出现故障。

将铰链用作输入

铰链角度可作为实时连续值获取——包括粗略状态和角度——SwiftUI 中通过 onHingeChange 获取,UIKit 中则通过 UIHingeInteraction 获取。对于游戏引擎,可以像接入其他原生传感器一样进行桥接。

这是一种真正新颖的输入方式,值得考虑用于特效、摄像机视差或游戏机制。请注意两点:由于同一个二进制文件会在所有不可折叠的 iPhone 上运行,因此要处理铰链为 nil 的情况;绝不能让它成为执行某项操作的唯一方式。详情见 ../iphone-duo-hinge-and-scenes/SKILL.md。

引擎说明

大多数引擎都会将视口变化作为调整大小事件公开,并提供安全区域内边距查询。请接入这两项,并将调整大小视为一等事件,而不是只在启动时读取一次的值:

  • Unity — 使用 Screen.safeArea,并在运行时处理分辨率变化,而不是只在 Start() 中读取一次。
  • Unreal — 使用安全区/标题安全区数值,并在视口调整大小时重新评估。
  • Godot — 使用安全区域 API,并选择能够适应宽高比变化的拉伸模式。
  • SpriteKit / Metal — 视图本身会通知你尺寸变化;关键在于让场景对此作出响应,而不是假定绘图区域尺寸始终与初始值相同。

保留区域和铰链角度属于 iOS 27.1 API,没有对应的引擎级功能,因此需要使用原生插件。桥接方式与 ../iphone-duo-flutter/SKILL.md 和 ../iphone-duo-react-native/SKILL.md 中介绍的方式相同。

检查清单

  1. 将视口调整大小作为实时事件处理,而不是在启动时读取一次。
  2. 无论采用何种屏幕方向锁定,都要确保各种姿势下屏幕都能填满。
  3. 优先调整宽高比;如果要加黑边,请用美术素材填充。
  4. 确保 HUD 文本和触控目标在各种姿势下的实际物理尺寸一致。
  5. 将交互控件锚定在边缘,并避免放入折叠区域。
  6. 确认游戏在分屏视图中仍能正确渲染。
  7. 在 Device Hub 的 iPhone Duo 模拟器中测试每种姿势——展开、闭合、折叠和旋转。

评论

支持 Markdown