> ## 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.

# 掌机设备的其他注意事项

> 面向掌机的其他指导,涵盖底座模式检测、可保证的手柄输入、GetSystemPowerStatus 电源管理与屏幕尺寸考虑。

本文介绍在开发游戏以使其在掌机设备上高效运行时,你还需要注意的其他事项。这些注意事项是对 [面向掌机 Windows 设备优化 GDK 游戏](/build/gdk-and-engines/handheld/handheld-guidance) 中检查项的补充。

## 掌机的底座(docked)行为

某些掌机会在插入底座时使用。虽然没有 API 可以直接判断掌机是否处于底座模式,但插入底座的设备可能连接了外部显示器。你可以使用 [EnumDisplayDevices](https://learn.microsoft.com/windows/win32/api/winuser/nf-winuser-enumdisplaydevicesa) 和 [EnumDisplaySettings](https://learn.microsoft.com/windows/win32/api/winuser/nf-winuser-enumdisplaysettingsa) API 检查外部显示器。

当掌机设备插入底座时,使用以下方法检查已连接的外部显示器:

* 检查是否有额外的手柄。掌机自带的手柄始终可用,但用户也可能连接额外手柄。
* 检查已连接显示器的屏幕尺寸。
* 虚拟键盘的建议依然适用,因为手柄仍是主要输入方式。
* 有些玩家可能会像在主机上一样连接鼠标和键盘。

## 保证可用的输入

尽管不同的游戏掌机可能提供额外的输入方式,但每台掌机都具备以下输入。

* A、B、X、Y 按钮
* 左肩键与右肩键
* 左扳机与右扳机
* 左摇杆与右摇杆
* 方向键(D-pad)
* Menu 按钮
* View 按钮

无论设备是否在底座中,都请始终检查所有已连接的手柄和输入设备。当设备处于底座模式时,也要检查 View 按钮。

## 电源

要检查掌机设备是否使用交流电而非电池,请调用 [GetSystemPowerStatus](https://learn.microsoft.com/windows/win32/api/winbase/nf-winbase-getsystempowerstatus) 函数。它会告知设备是否使用交流电,并提供电量摘要(高、低、临界或正在充电)。

请考虑你的游戏对设备电池续航的影响,因为游戏所需的功耗并不总是显而易见的。[XBOX Sustainability Toolkit](https://aka.ms/SustainabilityToolkit) 中可能的节能建议同样适用于掌机。

要最大程度节能:

* 启用 VSync,给 GPU 更多空闲时间,降低功耗。
* 降低内部渲染分辨率并进行上采样。
* 降低帧率以省电。注意:较低的帧率可能影响玩法。
* 出现全屏菜单或 UI 元素、或游戏暂停时,停止世界渲染。
* 检测到输入空闲、玩家不活跃时暂停游戏。

## 屏幕尺寸

尽管不同的游戏掌机屏幕分辨率各异,你可以依赖以下标准:

* 屏幕对角线尺寸至少为 7 英寸(17.8 cm)。
* 屏幕的宽高比为 16:9 或 16:10。

调用 [GetIntegratedDisplaySize](https://learn.microsoft.com/windows/win32/api/sysinfoapi/nf-sysinfoapi-getintegrateddisplaysize) 获取掌机集成显示屏的对角线尺寸。

## 掌机体验最佳实践示例

关于为掌机设备构建和优化游戏的更多见解,Microsoft 发布了两个示例:一个原生 C++ 示例和一个 Unity 托管 C# 示例。两者都提供了一组类似的最佳实践,展示如何使用 API 轻松管理游戏的掌机体验。

* 判断设备是否为掌机。
* 判断设备是使用电池、正在充电,还是使用外部电源。
* 查询设备特定属性,包括集成显示器属性。
* 处理 DPI 变化并相应地缩放 UI。
* 使用虚拟键盘进行文本输入。
* 查询网络设备及类型。
* 判断网络与 Bluetooth® 连接状态。
* 处理来自手柄、键盘和鼠标的输入。
* 判断输入模态,例如识别最近使用的输入设备。

随着 Windows 增加有利于掌机游戏场景的增强功能,以及从为掌机开发游戏的开发者处收集到反馈,Microsoft 会更新这些示例。

获取这些示例:

* 原生 C++ 示例:[C++ Sample on GitHub](https://aka.ms/hhexpsample)。
* Unity 托管 C# 示例:[Unity Managed C# Sample on GitHub](https://aka.ms/hhexpsample_unity)。


## Related topics

- [游戏启动器与掌机](/zh-CN/build/gdk-and-engines/handheld/handheld-launchers.md)
- [预售](/zh-CN/publishing/game-publishing/concepts/availability/preorder-overview.md)
- [可见性 - 受众](/zh-CN/publishing/game-publishing/concepts/availability/visibility-audiences.md)
- [Handheld Compatibility 计划准则](/zh-CN/build/gdk-and-engines/handheld/handheld-guidance.md)
- [Handheld Compatibility 准则与测试用例](/zh-CN/build/gdk-and-engines/handheld/handheld-guidelines-and-testcases.md)
