IGameInput::GetPreviousReading
基于可选的已筛选输入流中的参考读取,检索上一个 IGameInputReading。
语法
HRESULT GetPreviousReading(
IGameInputReading* referenceReading,
GameInputKind inputKind,
IGameInputDevice* device,
IGameInputReading** reading
)
参数
referenceReading _In_
类型:IGameInputReading*
在此参考读取之前按顺序读取返回的 IGameInputReading
接口。
inputKind _In_
类型:GameInputKind
输入类型的筛选器,要从该类型输入中拉取上一个读取信息。 GameInputKind
界面是一个标志变量。 可将多个值合并以筛选多个常量。
在指定多种输入类型时,将匹配并返回包含至少一种输入类型的任何读取。
device _In_opt_
类型:IGameInputDevice*
特定设备的筛选器,要从该特定设备中拉取上一个读取信息。
reading _COM_Outptr_
类型:IGameInputReading**
在 referenceReading
输入之前按顺序返回的 IGameInputReading
接口。
返回值
类型:HRESULT
函数结果。 如果传递进了 null 的 IGameInputDevice 指针,则会返回 E_NOTIMPL。
备注
GetNextReading 和 GetPreviousReading 方法使应用可以按读取信息依次遍历读取信息的历史记录。
如果在 referenceReading
后没有读取,或者为断开连接的设备提供了设备筛选器,或者在经过了过长的时间后参考读取和返回的读取已离开输入流历史记录缓冲区,则返回 NULL
值和失败 HRESULT
。 对于持续不断处理输入的应用而言,上述经过了过长时间的错误情况十分罕见,因为输入流会在其历史记录缓冲区中保持每个设备半秒钟的读取。
以下代码示例演示了如何从某一特定设备轮询所有游戏手柄状态。
Microsoft::WRL::ComPtr<IGameInput> gameInput;
Microsoft::WRL::ComPtr<IGameInputDevice> gamepad;
Microsoft::WRL::ComPtr<IGameInputReading> prevReading;
void PollGamepadInput() noexcept
{
if (!prevReading)
{
if (SUCCEEDED(gameInput->GetCurrentReading(
GameInputKindGamepad,
nullptr,
&prevReading)))
{
prevReading->GetDevice(&gamepad);
// Application-specific code to process the initial reading
}
}
else
{
Microsoft::WRL::ComPtr<IGameInputReading> nextReading;
HRESULT hr = gameInput->GetNextReading(
prevReading.Get(),
GameInputKindGamepad,
gamepad.Get(),
&nextReading);
if (SUCCEEDED(hr))
{
// Application-specific code to process the next reading
prevReading = nextReading;
}
else if (hr != GAMEINPUT_E_READING_NOT_FOUND)
{
gamepad = nullptr;
prevReading = nullptr;
}
}
}
要求
头文件:GameInput.h
库:xgameruntime.lib
支持平台:Windows、Xbox One 系列主机和 Xbox Series 主机
另请参阅
GameInput
GameInput 概述
IGameInput_GetCurrentReading
IGameInput_GetNextReading
IGameInput