基于可选的已筛选输入流中的参考读取,检索上一个 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
函数结果。
备注
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
库:gameinput.lib
支持的平台: 窗户
另请参阅
GameInput概述 GameInputIGameInput_GetCurrentReadingIGameInput_GetNextReadingIGameInput