如果使用 GameInput 生成电脑游戏,请使用 Microsoft.GameInput NuGet 包为开发准备 Visual Studio。 这样做只会更新 Visual Studio 项目的电脑生成配置,不会对 Xbox/主机 GameInput 生成依赖项进行任何修改。
尽管新式 Windows 支持 GameInput,但请务必安装 NuGet 包中包含的 GameInput 可再发行组件,以便开发和发布,以便在电脑上利用最新的 GameInput 功能和更新。
GameInput Redistributable
注意
GameInput 可再发行组件包含在 NuGet 包中,但不会自动安装。
尽管新式 Windows 上现成支持 GameInput,但电脑游戏需要将 GameInput 可再发行组件合并到各自的安装程序中。 安装 GameInput NuGet 包后, GameInputRedist.msi
安装程序将放入 packages\Microsoft.GameInput.<version>\redist
目录中,该目录通常位于项目的根目录中。
如果你使用的是 GDK 电脑游戏,请参阅有关 自定义安装作 的文档,详细了解如何在发布时将此包包含在游戏中。 如果你使用的是非 GDK 电脑游戏,请确保将此可再发行组件作为正常游戏安装的一部分进行安装。
GameInput 可再发行组件验证它不会导致目标系统上的 GameInput 降级。 虽然这确实意味着你的游戏可以在安装了较新版本的 GameInput 的电脑上运行,但 GameInput API 将保持向后兼容,确保未来行为一致。
GameInput v.1 /电脑更改
如果您在电脑上使用早期版本的 GameInput,或使用 GDK 与 Xbox 上的 GameInput 共享代码,请注意,许多未实现的函数以及相应的枚举和常量已从 v.1 API 中删除。
此外,API 已放置在 命名空间中, GameInput::v1
以方便版本控制。 由于这些更改,使用此 (和将来) 版本生成代码时,可能会遇到编译错误。 值得注意的更改包括:
IGameInputDevice::GetDeviceInfo
以前将生成的 IGameInputDeviceInfo 结构作为函数的返回值返回。 此结构现在作为 out 参数在函数上返回,并且函数的返回值现在HRESULT
为 。IGameInput::UnregisterCallback
以前使用超时值作为其第二个参数,但此参数已被删除。IGameInputReading::GetSequenceNumber
已删除。 请改为使用IGameInputReading::GetTimestamp
。
在这些情况下,与主机上用于 XCloud 的触摸 API 一起,使用 GAMEINPUT_API_VERSION
定义来有条件地编译 (或排除电脑和主机之间的) 代码。
示例:
#include <GameInput.h>
#ifndef GAMEINPUT_API_VERSION
#define GAMEINPUT_API_VERSION 0
#endif
#if GAMEINPUT_API_VERSION == 1
using namespace GameInput::v1;
#endif
...
#if GAMEINPUT_API_VERSION >= 1
device->GetDeviceInfo(&deviceInfo);
#else
deviceInfo = device->GetDeviceInfo();
#endif
版本控制提示
- v.0 和 v.1 之间的可用 API 图面更改很小,删除了从未实现的功能,以及上面的函数签名更改。
- 电脑上仍支持原始标头中的原始
GameInput.h
v.0 API,但该 API 保持静态。 在这种情况下,将继续使用 GDK、旧版 NuGet 包或Windows SDK中的标头。 - 无论使用哪个版本的 API,都要求在开发过程中从 NuGet 包 安装最新的可再发行组件,并在游戏安装过程中将可再发行 (或更高版本) 包含在最终用户中。 这是较新的 GameInput 运行时实现的地方,它通过扩展的控制器支持、触控板支持、远程桌面支持和各种其他 bug 修复等功能增强了 API 的所有版本