IGameInput::GetCurrentReading
从与调用方提供的筛选器相匹配的输入流检索最近的读取。
语法
HRESULT GetCurrentReading(
GameInputKind inputKind,
IGameInputDevice* device,
IGameInputReading** reading
)
参数
inputKind _In_
类型:GameInputKind
枚举值之一,用于指定所使用的输入设备类型,例如控制器、键盘、鼠标或游戏手柄。 可以组合枚举值来指定多种输入类型。 在指定多种输入类型时,将匹配并返回包含至少一种输入类型的任何读取。
device _In_opt_
类型:IGameInputDevice*
可从特定设备返回读取信息的可选筛选器。
reading _COM_Outptr_
类型:IGameInputReading**
要返回的输入读取。 失败时返回 NULL。
返回值
类型:HRESULT
函数结果。
备注
此函数用于最初访问输入流。 可将此函数与 GetNextReading
和 GetPreviousReading
方法结合使用,浏览输入流,并且可不丢失输入。 或者,如果游戏可以允许丢失某些输入,则可以继续调用 GetCurrentReading
以获取最新的读数。
以下代码示例演示了如何轮询当前游戏手柄状态。
Microsoft::WRL::ComPtr<IGameInput> gameInput;
void PollGamepadInput() noexcept
{
Microsoft::WRL::ComPtr<IGameInputReading> reading;
if (SUCCEEDED(gameInput->GetCurrentReading(
GameInputKindGamepad,
nullptr,
&reading)))
{
// Application-specific code to process the reading.
}
}
以下代码示例演示了如何从某一特定设备轮询当前游戏手柄状态。
Microsoft::WRL::ComPtr<IGameInput> gameInput;
Microsoft::WRL::ComPtr<IGameInputDevice> gamepad;
void PollGamepadInput() noexcept
{
Microsoft::WRL::ComPtr<IGameInputReading> reading;
if (SUCCEEDED(gameInput->GetCurrentReading(
GameInputKindGamepad,
gamepad.Get(),
&reading)))
{
// Lock onto the first device we find input from, since this
// must be the one the player is using (if it's generating input).
if (!gamepad)
{
reading->GetDevice(&gamepad);
}
// Application-specific code to process the reading.
}
else
{
// Go back to looking for a device to lock onto, if the previous one is gone.
gamepad = nullptr;
}
}
以下代码示例演示了如何从某一特定设备轮询所有游戏手柄状态。
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)))
{
gamepad.Attach(prevReading->GetDevice());
// 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 主机
另请参阅
输入 API 概述
IGameInput_GetNextReading
IGameInput_GetPreviousReading
IGameInput