> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Windows.XBOX.Input から GameInput への移植

> Windows.XBOX.Input から GameInput への移植

<a id="introductionSection" />

`Windows.Xbox.Input` は GDK 以前の XBOX One Software Development Kit 開発向けの入力 API です。概念的に、`GameInput` はデバイスや入力の読み取りを異なる方法で捉えます。このトピックでは、`Windows.Xbox.Input` と `GameInput` の主な違いについて説明します。

## 入力中心 vs. デバイス中心

`Windows.Xbox.Input` と `GameInput` の主要な違いは、前者ではデバイスを収集し、入力状態をデバイスのプロパティとして扱うところから始める必要があることです。対照的に、`GameInput` は関連するデバイスを持つ入力読み取りのフィルター可能なストリームから始まります。

## A ボタン押下を確認する

ゲームが最初に起動するとき、ユーザーは続行する準備ができていることを示すために **A** を押す必要があることがよくあります。ここでは、`Windows.Xbox.Input` と `GameInput` でこれを行う例を比較します。この例ではゲームパッドのみを対象とします。デモンストレーション用に例が簡略化されていることに注意してください。

### Windows.Xbox.Input

次のコード例は、システムに接続されているすべてのゲームパッドを列挙し、`gamepads` ベクターに格納することから始まります。次に、ループで `gamepads` を反復処理し、それぞれの現在の入力読み取りを見て、各読み取りを **A** についてチェックします。

<Note>このコードは以前の API を参照しています。これらの呼び出しは `GameInput` には存在しません。</Note>

```c++ theme={null}
void PollGamepadInput()
{
    // Find all gamepads.
    IVectorView<IGamepad^>^ gamepads = Gamepad::GetGamepads();

    // Cycle through each gamepad.
    for ( unsigned int i = 0; i < gamepads->Size; ++i )
    {
        // Get the gamepad's current reading.
        IGamepadReading^ reading = gamepads->GetAt(i)->GetCurrentReading();

        if ( reading->IsAPressed )
        {
            // Logic for the A button being pressed.
        }
    }
}
```

このモデルには改善の余地があります。ゲームはシステムに接続されているさまざまなデバイスのコピーを保存する必要があります。各デバイスの詳細を理解する必要があります。また、すべてのゲームパッドのローカルコピーを保存することで、コードは最新の読み取りを取得するのではなく、ある時点の状態を捉えます。

### GameInput

次のコード例では、コードは任意のデバイスから最新のゲームパッド読み取りを探します。[GameInputKind](/reference/input/gameinput/enums/gameinputkind) フィルターを `GamePad` に設定して [GetCurrentReading](/reference/input/gameinput/interfaces/igameinput/methods/igameinput_getcurrentreading) を呼び出すことで、コードは `m_gameInput` にゲームパッドの読み取りのみを返すよう要求します。次に、コードは読み取りの状態を問い合わせ、**A** の押下を確認します。

対話中のゲームパッドを追跡したい場合があります。より完全な例については、[GameInput の読み取り](/build/core-features/common/input/overviews/input-readings) を参照してください。

```c++ theme={null}
IGameInput* g_gameInput = nullptr;

HRESULT InitializeInput()
{
    return GameInputCreate(&g_gameInput);
}

void PollGamepadInput()
{
    ComPtr<IGameInputReading> reading;

    // Get the most current gamepad reading, not filtering by a specific device.
    // An error from the GetReading method indicates that no gamepad readings
    // were found.
    if (SUCCEEDED(g_gameInput->GetCurrentReading(GameInputKindGamepad, nullptr, &reading)))
    {
        // Read the gamepad state.
        GameInputGamepadState state;
        reading->GetGamepadState(&state);

        if (state.buttons & GameInputGamepadA)
        {
            // Logic for the A button being pressed.
        }
    }
}
```

<Note>`GameInput` では、デバイスを反復処理して各読み取りをチェックする必要はありません。代わりに、1 回のメソッド呼び出しで入力の最新状態を確認できます。各物理デバイスについてどの程度知りたいかを選択できます。</Note>

<a id="seeAlsoSection" />

## リファレンス API ドキュメント

* [GameInput (API 内容)](/reference/input/gameinput/gameinput_members)

## 関連項目

[GameInput の概要](/build/core-features/common/input/overviews/input-overview)

[Input API リファレンス](/reference/input/gc-reference-input-toc)

[Microsoft Game Development Kit](/services/playfab/sdks/platforms/gdk)


## Related topics

- [GameInput と既存の入力スタックの組み合わせ](/ja-jp/build/core-features/common/input/porting/input-porting.md)
- [既存の入力コードを GameInput に移植する](/ja-jp/build/core-features/common/input/porting/index.md)
- [XBOX GDK への移植ガイド](/ja-jp/home/build-first-title/porting-guides.md)
- [XInput から GameInput への移植](/ja-jp/build/core-features/common/input/porting/input-porting-xinput.md)
- [GameInput のよくある質問](/ja-jp/build/core-features/common/input/overviews/input-faq.md)
