輸入串流架構
GameInput 是以輸入串流的概念為基礎而建置:來自所有連線至系統之裝置的輸入,都會依照輸入發生的順序,導向單一連續的輸入事件串流。當多個裝置同時產生輸入時,就會自然地交錯輸入事件。以下是來自多個輸入裝置的輸入串流範例。
- 連按兩下按鈕可能會對應到與單按不同的連段/招式。
- 兩個按鈕的按下順序可能很重要。
- 兩次按下按鈕之間經過的時間可能很重要。
介面
GameInput API 是透過一組相關介面公開的,類似於圖形和音訊 API,如下圖所示。
-
IGameInput是透過呼叫GameInputCreateFactory 函式取得的基礎介面。它包含從輸入串流擷取讀數、註冊回呼,以及存取其他全域功能的方法。 -
IGameInputReading代表輸入串流中的單一元素。它包含擷取讀數中所儲存之輸入狀態資料的方法,以及存取產生讀數之裝置的方法。在串流的其他讀數中向前和向後移動時,讀數也會作為輸入串流中的參考點。 -
IGameInputDevice代表連線至系統的單一輸入裝置。它包含擷取裝置屬性和目前狀態的方法,以及控制裝置上觸覺回饋和力回饋的方法。它也包含執行低階原始裝置 I/O 的方法。
與圖形和音訊 API 一樣,GameInput 不是真正的 COM API,即使它公開衍生自 IUnknown 的介面。這種 API 樣式有時稱為「COM lite」或「nano-COM」。雖然 IUnknown 用於參考計數和反映,但 GameInput 不會使用 COM 執行階段基礎結構。具體而言,這表示下列事項。
- 應用程式不會呼叫
CoInitialize或CoCreateInstance來取得物件執行個體。 - 不支援彙總和呼叫端提供的介面實作等 COM 功能。
- 沒有跨處理序封送處理支援,也沒有 Apartment/執行緒模型。所有物件都是 Agile 物件。
- 可以直接比較介面指標以判斷物件身分識別,而不需透過 IUnknown。
- 方法不需要傳回
HRESULT代碼,這通常會產生更簡單的函式簽章。
