如果你在为 XBOX 开发,自 2510 GDK 起,GDK 中默认可用的版本是 v.0。使用 v1.0+ API 的游戏可通过集成 Microsoft.GameInput NuGet 包在 PC (v1.0+) 和主机 (v2.2+) 上都实现。在主机上使用此 NuGet 包需要 GDK 2510 或更高版本。PC 应用需要在目标计算机上安装最新的 GameInput 可再发行组件(已包含在 NuGet 包中)。主机应用必须针对 NuGet 包中最新的 GameInput 头文件和库进行编译与链接,但无需可再发行组件,因为最新的 GameInput 运行时已随附于 XBOX 上的 GDK 镜像。
升级运行时和 API 版本
不同版本的 GameInput 名称和方法相似,但通过不同的 UUID 进行明确的版本区分。自 GameInput API v.1 起,每个版本都在唯一的命名空间中定义(例如GameInput::v1)。GameInput 中相同的底层对象实现这些接口。你可以QueryInterface 在版本之间切换,这意味着你可以在游戏中混合使用 API。
如果你从 API 定义在全局命名空间中的 GameInput v.0 升级,可能会发现添加一条 using namespace GameInput::v1 语句有助于减少为采用 v.1 及后续 API 修订版而需要更新的 GameInput 调用点数量。
除了运行时版本检查之外,你还可以通过检查 GAMEINPUT_API_VERSION 预处理器宏进行条件编译。该宏对应当前使用的 GameInput API 版本以及 GameInput 主版本号。v.0 API 没有此定义,因此如果你想对该版本进行条件测试,可以在包含 GameInput 头文件后添加以下代码片段。
仅升级运行时
GameInput 允许你在不强制更新 API 用法的情况下获取最新的 bug 修复。为获取这些修复,请安装最新 Microsoft.GameInput NuGet 包中随附的 GameInput 可再发行组件。因为 GameInput 与旧版 API 保持二进制兼容,你可以继续使用现有头文件搭配新运行时。请务必与游戏一起分发最新的 GameInput 二进制文件,以确保测试环境中的功能与生产环境一致。GameInput v.1 更改
如果你在使用较早版本的 GameInput,请注意,许多未实现的函数以及对应的枚举和常量已自 v.1 起从 API 中移除。此外,API 被放入GameInput::v1 命名空间以便版本管理。由于这些更改,你在使用此版本(及后续版本)构建旧代码时可能会遇到编译错误。值得注意的更改包括:
-
IGameInputDevice::GetDeviceInfo之前将生成的IGameInputDeviceInfo结构体作为函数返回值返回。此结构体现在通过函数的输出参数返回,函数的返回值改为HRESULT。 -
IGameInput::UnregisterCallback之前将超时值作为其第二个参数,此参数已被移除。 -
IGameInputReading::GetSequenceNumber已被移除。请改用IGameInputReading::GetTimestamp。
版本管理提示
- v.0 与 v.1 之间可用 API 表面的变化很小,主要是移除了从未实现的功能,以及前文所述的函数签名更改。
- 原始
GameInput.h头文件中的原 v.0 API 仍受支持,但该 API 保持静态。此情况下,你继续按原样使用来自 GDK、较早 NuGet 包或 Windows SDK 中的头文件。 - 无论你使用哪个版本的 API,在开发期间都必须安装 NuGet 包中的最新可再发行组件,并将该可再发行组件(或更新版本)作为面向最终用户的游戏安装过程的一部分。此可再发行组件是较新的 GameInput 运行时实现所在之处,它使所有版本的 API 都能获得例如更广的控制器支持、触控板支持、远程桌面支持以及各种其他 bug 修复等增强。
