裝置屬性
需要知道裝置特定詳細資料的應用程式,可以存取裝置的 GameInputDeviceInfo 結構。此結構包含有關裝置的大量資訊,但使用時有幾件事需要了解。 裝置資訊可能很大,有時達 10 KB 以上。基於效率考量,GameInput API 不會複製裝置資料,而是暫時授與應用程式直接存取 GameInput 內部所儲存資料的權限。此方法可避免緩衝區配置和大量記憶體傳輸,有利於高效能程式碼,因為應用程式通常只對資料的一小部分感興趣。這也讓 GameInputDeviceInfo 結構能夠包含巢狀指標,指向裝置資訊資料區塊內可找到各種支援資訊陣列的其他區域,而不會增加可變大小輸出和深層複製的複雜度。裝置識別碼
裝置資訊中提供的一項重要資訊,是裝置的應用程式本機裝置識別碼。這是一個特殊的 32 位元組值,可唯一識別裝置,即使在應用程式重新啟動或系統重新開機後也是如此。此識別碼在無線裝置中斷連線及重新連線後也保持穩定,有線 USB 裝置只要插回相同的 USB 連接埠也是如此。 應用程式本機裝置識別碼最常用於在應用程式存留期之外識別特定裝置。例如,具有輸入對應 UI 的遊戲可以使用裝置識別碼,確保每次應用程式啟動時,都將使用者的輸入設定套用至相同的裝置。對於支援跨多個裝置進行複雜對應的應用程式而言,這一點尤其重要,因為這些裝置在其他情況下可能看起來完全相同 (例如,飛行模擬器的一組同質儀表板裝置)。裝置列舉
雖然大多數應用程式應該永遠不需要,但 GameInput 確實支援明確列舉已連線的裝置。這可以透過 IGameInput 介面的 RegisterDeviceCallback 方法來執行。彙總裝置
當同時連接多個鍵盤時,大多數輸入 API 會以合併的方式將輸入呈現給應用程式,就好像所有輸入都來自單一虛擬_系統鍵盤_。(滑鼠也是如此。) 不過,GameInput 通常會個別公開每個裝置及其輸入。這開啟了許多可能性 (例如,能夠分辨在本機多人遊戲中是哪個使用者的 chatpad 產生輸入),但也為不需要此功能的應用程式增加了許多複雜度。 為了解決此問題,GameInput 支援彙總裝置的概念。IGameInput 介面上的 CreateAggregateDevice 方法,可讓應用程式建立虛擬 IGameInputDevice 執行個體,以公開單一 GameInputKind 之所有裝置的合併輸入。接著,此彙總裝置可作為其他 GameInput API 函式的篩選條件,以便與彙總裝置互動 (例如擷取讀數)。雖然這最常用於鍵盤和滑鼠輸入,但也可以搭配大多數其他類型的輸入使用。在目前的版本中,
CreateAggregateDevice 尚未實作。 —>