> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Handheld Compatibility 计划准则

> 遵循 Handheld Compatibility 计划的五条准则,为 Windows 游戏掌机优化你的 GDK 作品:默认设置、输入、字体、电源与检测。

XBOX 设计的 Handheld Compatibility 计划旨在让玩家有信心相信游戏在游戏掌机上能良好运行。让游戏在掌机上表现出色需要在与 PC 桌面环境相比时额外考虑一些因素。虽然掌机上的游戏本质上仍是 PC 游戏,但要在掌机上表现良好,游戏必须考虑到:屏幕更小、离眼睛只有 12 英寸,并且输入来自手柄而不是鼠标键盘。

开发者应重点考虑五条主要准则。本文档从高层介绍这五条准则,并为游戏开发者提供满足这些准则的指导。

## 准则 1:默认值就能用

玩家在掌机上期望获得类主机的体验。他们不应该需要找到某个菜单调整某个设置来让游戏进入掌机模式。仅使用手柄,他们就应该能够浏览游戏的所有元素。虽然玩家可能希望自定义并变化渲染选项(黑位、阴影、性能 vs 画质),但他们仍然期望有一个良好的默认体验。

让默认值“就能用”的关键是知道自己正在游戏掌机上运行。以下代码可以用来判断游戏是否运行在游戏掌机上。

```c theme={null}
#ifndef DEVICEFAMILYDEVICEFORM_GAMING_HANDHELD
#define DEVICEFAMILYDEVICEFORM_GAMING_HANDHELD    0x0000002E 
#endif
  
DWORD DeviceForm; 
RtlGetDeviceFamilyInfoEnum(nullptr, nullptr, &DeviceForm); 
  
if (DeviceForm == DEVICEFAMILYDEVICEFORM_GAMING_HANDHELD) 
{ 
   // Do stuff for a handheld 
} 
```

启动游戏时,游戏可以检查设备是否为游戏掌机。如果是掌机,游戏应该选择能够创造良好体验的默认值:

* 选择与典型掌机能力相匹配的分辨率与设置。
* 将默认输入改为手柄,并在需要文本输入时弹出虚拟键盘。
* 增大字体(详见下方 [准则 4:UI 可读性](#guideline-4-ui-readability))。

在为掌机设备开发时,不仅仅要检测游戏运行在掌机上。开发者还应思考依赖手柄而非鼠标键盘会如何影响玩家体验。这会影响用户界面导航方式与焦点管理等方面。

你可能还需要应对一些输入挑战,例如手柄相比鼠标精度较低。诸如瞄准辅助之类的功能可以帮助弥补这一差距。

开始确保“默认值就能用”于掌机时,以下无障碍指南是极好的参考资源:

* [XBOX Accessibility Guideline 101: Text display](https://learn.microsoft.com/gaming/accessibility/xbox-accessibility-guidelines/101)
* [XBOX Accessibility Guideline 107: Input](https://learn.microsoft.com/gaming/accessibility/xbox-accessibility-guidelines/107)
* [XBOX Accessibility Guideline 112: UI navigation](https://learn.microsoft.com/gaming/accessibility/xbox-accessibility-guidelines/112)
* [XBOX Accessibility Guideline 113: UI focus handling](https://learn.microsoft.com/gaming/accessibility/xbox-accessibility-guidelines/113)

## 准则 2:图标与提示

屏幕上的提示,例如图标,能帮助玩家理解如何浏览和玩游戏。请确保不会出现暗示掌机原生不支持的输入方式的提示,以免引起混淆。

## 准则 3:文本输入

为 PC 编写的游戏通常假设有鼠标键盘可用。在游戏掌机上,默认输入是手柄。当游戏中需要输入文本时,开发者必须确保玩家仅使用手柄配合虚拟键盘即可输入文本。

任何可能需要输入文本的时刻都应触发虚拟键盘。两种常见做法是:检测到文本框上的“触摸”时启动虚拟键盘,或者在文本框获得“输入焦点”且按下“A”按钮时启动虚拟键盘。

游戏可以自由创建自己的虚拟键盘,也可以利用 Windows 自带的虚拟键盘。以下代码展示游戏如何在手柄模式下启动并隐藏 Windows 虚拟键盘。

```C theme={null}
#include <winrt/windows.ui.viewmanagement.core.h>
using namespace winrt::Windows::UI::ViewManagement::Core;
#pragma comment(lib,"windowsapp.lib")


// CoreInputViewKind::Gamepad enum requires headers from 26100.3624 Windows SDK or greater
// Otherwise, use static_cast<CoreInputViewKind>(7) for earlier SDKs

CoreInputView::GetForCurrentView().TryShow(CoreInputViewKind::Gamepad);

CoreInputView::GetForCurrentView().TryHide();
```

这段代码获取合适的 `ICoreInputView3` 接口,并调用 `TryShow` 方法,传入新的手柄启用型虚拟键盘的标识。`TryHide` 会在虚拟键盘当前显示时隐藏它。

<Note>
  `TryShow` 方法只会在 Windows 判断显示键盘合适时才会显示键盘。例如,在附加了物理键盘的设备上(以及其他情形)调用该方法可能不会显示虚拟键盘。在带触摸屏的掌机设备上,此调用会按预期工作。
</Note>

<Note>
  上述 API 不依赖 GDK。这是一个在 Windows 10 版本 10.0.17763.0(2018 年 10 月发布)中引入的 Windows API,但 `CoreInputViewKind::Gamepad` 枚举需要 Windows SDK 10.0.26100.3624 或更高版本。
</Note>

## 准则 4:UI 可读性

7 英寸左右的小屏幕在游戏掌机上很常见。这些小屏幕可能让游戏中的文本 UI 难以阅读。针对这些小屏幕,给游戏开发者的建议是:

* 如果屏幕分辨率为 1280 x 720,文本的像素高度应至少为 9 像素。我们建议高度为 12 像素或更多。
* 如果屏幕分辨率为 1920 x 1080,文本的像素高度应至少为 14 像素。我们建议高度为 18 像素或更多。

文本可读性是无障碍问题的主要来源之一。许多游戏认识到这一点,并在游戏中提供了字体大小设置。满足文本可读性的简单方法是,当检测到游戏运行在掌机设备上时,将其中一种较大字号自动设为默认。

大多数游戏使用位图字体,而位图字体不会根据屏幕大小、DPI 或其他 Windows 设置自动缩放。请确保如果使用位图字体,也提供更大文字尺寸的选项。

如果开发者在游戏中使用 TrueType 字体,可以使用 [DirectWrite](https://learn.microsoft.com/windows/win32/directwrite/direct-write-portal) 来渲染文本。`DirectWrite` 可以利用 Windows 的关键功能,例如字体缩放、DPI 与其他 Windows 设置。

## 准则 5:支持的显示

游戏会利用屏幕空间提供出色体验。游戏不应严重出现黑边(letter-box),也不应以扭曲玩法的宽高比进行渲染。对于游戏掌机常见的小屏幕来说,严重的黑边会让本已很小的屏幕更小,影响玩法。

## 其他考虑

除上述五项准则之外,请参见 [面向掌机 Windows 设备开发 GDK 游戏时的其他注意事项](/build/gdk-and-engines/handheld/handheld-considerations)。


## Related topics

- [游戏启动器与掌机](/zh-CN/build/gdk-and-engines/handheld/handheld-launchers.md)
- [Handheld Compatibility 准则与测试用例](/zh-CN/build/gdk-and-engines/handheld/handheld-guidelines-and-testcases.md)
- [在性能与能效之间取得平衡](/zh-CN/build/gdk-and-engines/handheld/handheld-performance.md)
- [Microsoft Store 开发者行为准则](/zh-CN/publishing/game-publishing/store-developer-code-of-conduct.md)
- [Microsoft Store 政策和行为准则](/zh-CN/publishing/game-publishing/store-policies-and-code-of-conduct-overview.md)
