> ## 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 軟體開發套件開發所用的輸入 API。在概念上，`GameInput` 以不同的方式看待裝置和輸入讀數。本主題說明 `Windows.Xbox.Input` 與 `GameInput` 之間的一些主要差異。

## 以輸入為中心與以裝置為中心

`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

在下列程式碼範例中，程式碼會尋找來自任何裝置的最新遊戲台讀數。透過呼叫 [GetCurrentReading](/zh-TW/reference/input/gameinput/interfaces/igameinput/methods/igameinput_getcurrentreading) 並將 [GameInputKind](/zh-TW/reference/input/gameinput/enums/gameinputkind) 篩選條件設為 `GamePad`，程式碼會要求 `m_gameInput` 只傳回遊戲台讀數。接著，程式碼會查詢讀數的狀態，並檢查是否按下 **A**。

您可能會想要追蹤您正在溝通的遊戲台。如需更完整的範例，請參閱 [GameInput 讀數](/zh-TW/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` 不要求您逐一查看裝置並檢查每個讀數。相反地，您可以透過一次方法呼叫來檢查最新的輸入狀態。您可以自行選擇要對每個實體裝置了解多少。</Note>

<a id="seeAlsoSection" />

## 參考 API 文件

* [GameInput (API 內容)](/zh-TW/reference/input/gameinput/gameinput_members)

## 另請參閱

[GameInput 概觀](/zh-TW/build/core-features/common/input/overviews/input-overview)

[輸入 API 參考](/zh-TW/reference/input/gc-reference-input-toc)

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


## Related topics

- [移植到 XBOX GDK 的指南](/zh-TW/home/build-first-title/porting-guides.md)
- [从 Windows.XBOX.Input 移植到 GameInput](/zh-CN/build/core-features/common/input/porting/input-porting-wxi.md)
- [将现有输入代码移植到 GameInput](/zh-CN/build/core-features/common/input/porting/index.md)
- [Windows.XBOX.Input から GameInput への移植](/ja-jp/build/core-features/common/input/porting/input-porting-wxi.md)
- [从 XInput 移植到 GameInput](/zh-CN/build/core-features/common/input/porting/input-porting-xinput.md)
