次の方法で共有


IGameInput::GetNextReading

必要に応じてフィルター処理された入力ストリームから、参照読み取り値に基づいて次に利用可能な IGameInputReading インターフェイスを取得します。

構文

HRESULT GetNextReading(  
         IGameInputReading* referenceReading,  
         GameInputKind inputKind,  
         IGameInputDevice* device,  
         IGameInputReading** reading  
)  

パラメーター

referenceReading _In_
型: IGameInputReading*

現在の IGameInputReading。 返される IGameInputReading インターフェイスは、この参照読み取り値よりも後の次の読み取り値です。

inputKind _In_
型: GameInputKind

次の読み取り値をプルするための入力の種類のフィルター。 GameInputKind インターフェイスはフラグ変数です。 複数の値を組み合わせて複数の GameInputKind 定数をフィルター処理できます。 複数の入力の種類を指定すると、入力の種類の 1 つ以上が含まれている読み取り値がすべて一致し、返されます。

device _In_opt_
型: IGameInputDevice*

次の読み取り値をプルするための特定のデバイスのフィルター。

reading _COM_Outptr_
型: IGameInputReading**

返される IGameInputReading インターフェイスであり、順番的には referenceReading 入力よりも後になります。

戻り値

型: 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 の概要
IGameInput_GetCurrentReading
IGameInput_GetPreviousReading
IGameInput