Skip to main content
使用本主題了解鍵盤和滑鼠特有的使用方式。鍵盤和滑鼠是 GameInput 的原生輸入。

鍵盤輸入

GetKeyState 方法會擷取鍵盤上每個按下按鍵的掃描碼和虛擬按鍵資料。此輸入資料接著會以 GameInputKeyState 結構的可變長度陣列傳回。按下的按鍵是指在鍵盤回報輸入時處於按住狀態的按鍵。鍵盤回報輸入的頻率各不相同,通常介於 125 Hz 到 1,000 Hz 之間。鍵盤狀態會針對連接到系統的每個個別鍵盤分別回報。 基本鍵盤狀態用於將鍵盤輸入對應至遊戲動作,例如移動或發射武器。它不適用於一般文字輸入,以及用於該用途的其他 API。

讀取按鍵狀態

使用下列程式碼,在您的遊戲中為鍵盤和滑鼠實作 GameInput。
每個按鍵的狀態並非儲存在陣列中的固定索引。相反地,陣列中有效元素的數目會隨著按鍵按下而增加,並隨著按鍵放開而縮減。新按鍵會加入陣列的結尾,而當按鍵放開時,所有項目都會往前移以填補空缺。GetKeyCount 會傳回按下的按鍵數目,如下列程式碼所示。這可用來判斷應該為 GetKeyState 配置多大的陣列。如果傳入 GetKeyState 的 stateArray 大於按下的按鍵數目,多餘的陣列元素不會被寫入或歸零。反之,如果 stateArray 小於按下的按鍵數目,陣列會被填滿,而多出的按下按鍵會遺漏。
標準鍵盤一次只能回報四到六個按鍵,即使是高階遊戲鍵盤也很少一次支援超過 12-16 個按鍵。因此,使用 GetKeyCount 可讓陣列的大小上限保持很小。大小上限可透過 IGameInputDevice 介面查詢。 請注意,codePoint 成員會根據目前的鍵盤配置,指定系統認為印在相關鍵帽上的字符。其用途是在輸入對應介面中顯示按鍵的表示法,而非用於建立文字輸入的字串。

滑鼠輸入

GetMouseState 方法會擷取滑鼠的移動和按鈕狀態,並以單一 GameInputMouseState 結構傳回,如下列程式碼所示。與鍵盤狀態一樣,滑鼠狀態會針對連接到系統的每個個別滑鼠分別回報。<!—As with keyboard input, the CreateAggregateDevice method on the IGameInput interface is used to get the combined system mouse state.> —>

讀取滑鼠移動

滑鼠移動原生會以一系列差異值回報,而非絕對位置。這與 GetCurrentReading 的輪詢性質不相容,因為定期要求目前的滑鼠讀數很可能會遺漏數個中間差異值。 與其使用 GetNextReading 逐一查看可能數十個歷史滑鼠讀數並加總差異值,這些差異值會累積到虛擬的 positionX 和 positionY 值中。接著,將 positionX 和 positionY 值減去先前取得之讀數的值,即可計算差異值。逐一查看所有中間讀數時,可以存取個別差異值;略過中間讀數時,則可透過累積的差異值存取。 positionX 和 positionY 值是所有移動差異值的總和。這些值與螢幕空間座標沒有任何關聯。累積的差異值僅適用於處理序在具有輸入焦點時所接收的滑鼠事件。

使用者關聯

目前鍵盤和滑鼠不支援使用者關聯。沒有任何介面可將這些周邊裝置對應至使用者。

參考 API 文件

另請參閱

GameInput 讀數 GameInput 裝置 進階 GameInput 主題 輸入 API 參考
Last modified on October 6, 2026