XGameStreamingGetTouchBundleVersion
获取指定设备上当前正在使用的触控适配捆绑包的版本。
语法
HRESULT XGameStreamingGetTouchBundleVersion(
XGameStreamingClientId client,
XVersion* version,
size_t versionNameSize,
char* versionName
)
参数
client _In_
类型:XGameStreamingClientId
正在被查询的流式处理客户端。
version _Out_opt_
类型:XVersion*
当前指定用户正在使用的捆绑包的版本号。 若捆绑包未指定版本号,将返回 0.0.0.0。
versionNameSize _In_
类型:size_t
要返回的 versionName
的最大大小(以字节为单位)。 可通过调用 XGameStreamingGetTouchBundleVersionNameSize 来找到指定的大小。
versionName _Out_writes_opt_z_
类型:char*
当前指定用户正在使用的捆绑包的名称。 若捆绑包未指定版本名称,则将返回 null
。
返回值
类型:HRESULT
如果成功,则返回 S_OK;否则返回错误代码。
可能的错误
错误代码 | 错误值 | 错误原因 |
---|---|---|
E_GAMESTREAMING_NOT_INITIALIZED | 0x89245400 | XGameStreaming 运行时尚未初始化。 在调用其他 API 之前,请先调用 XGameStreamingInitialize。 |
E_GAMESTREAMING_CLIENT_NOT_CONNECTED | 0x89245401 | 指定客户端未连接。 |
有关错误代码的列表,请参阅错误代码。
备注
在游戏流式处理期间,玩家看到的触控布局使用作为触控式配捆绑包的一部分上传到 Microsoft 的预定义布局。
XGameStreamingGetTouchBundleVersion
让游戏基于在某客户端上使用的触控控制组做出运行时决定。 下面是一些应用情况示例:
- 玩家正在使用触控,且元素通过触控目标文档控制可用的情况下,从 HUD 中删除某元素。
- 基于将显示的触控布局决定显示哪个图形提示。
上传到服务的每个版本有专属的 version
。 每次更新将要求新的版本号。
可以使用 versionName
提供语义版本(例如,此布局组支持 DLC2),而不是锁定于具体版本号。 例如,如果版本号由生成系统自动分配,则游戏代码可能很难知道在运行时显示的触摸适配捆绑包的确切版本号。 为了允许代码检测捆绑包是否存在,而无需知道其确切版本,它可以选择使用版本名称,而不是根据版本号进行比较。
示例
void GameStreamingClientManager::GetClientTouchBundleVersion(XGameStreamingClientId client)
{
// Get the touch bundle version and initialize the touch HUD based on the
// semantic version name that was returned
size_t versionNameSize = XGameStreamingGetTouchBundleVersionNameSize(clientId);
XVersion version{};
std::vector<char> versionName(versionNameSize, 0);
XGameStreamingGetTouchBundleVersion(clientId, &version, versionNameSize, &versionName[0]);
InitializeTouchHUD(versionName);
if (strcmp("DLC2", versionName.data()) == 0)
{
// we have our DLC2 controls, switch to the HUD layout that works best with those overlay controls.
InitializeHUDForDLC2TouchControls();
}
}
要求
头文件: XGameStreaming.h
库:xgameruntime.lib
支持平台:Windows、Xbox One 系列主机和 Xbox Series 主机