00 最近越來越多人對鍵位衝突的話題有興趣,但是許多玩家甚至媒體的解讀是錯的,所以小編在此重點說明一些概念、並分享如何測試。在許多遊戲與軟體中都會使用組合鍵功能,也就是同時按下特定幾個按鍵之後就能觸發特別的功能,簡單的說就是一些動作的快捷鍵。不過,有時候按不出功能並不是軟體的問題,而是鍵盤內部硬體的問題。

鍵盤內部為矩陣設計

不管是薄膜式鍵盤或機械式鍵盤,內部都有行與列組成的電路圖,這些行與列都至少會有16條線路與8條線路交叉形成,組合出共有128個交叉點。目前鍵盤按鍵數大約為103鍵,所以這些電路已經足夠使用。由於鍵盤的按鍵資訊都是設計在鍵盤矩陣中,裡面每個行與列的交錯點都代表著1個按鍵資訊。當有按鍵被壓下時,鍵盤就會進行掃描動作來查詢是哪顆鍵被壓下。這部分是很容易理解的,不過當使用者同時按下的按鍵越多時,狀況就有點不同。

產生鬼鍵造成鍵位衝突

當只有1個按鍵被壓下時,鍵盤會進行掃瞄行與列資訊來判斷,但如果超過1顆按鍵同時按下時就沒這麼容易。在同一個井字矩陣電路中的4個按鍵訊號,如果有同時3個按鍵被按下,會送出2個行與2個列的資訊,鍵盤是無法反推判斷是哪3個按鍵,而會認為是4個按鍵同時按下,這時沒有真正按下卻被送出的按鍵就稱為鬼鍵(Ghost Key)。

有些鍵盤會避免輸出錯誤的按鍵資訊,選擇忽略玩家按下的第3個鍵,這時便會有按下3個鍵卻只輸出2個按鍵訊號的狀況,這些都是為了避免產生鬼鍵造成鍵位衝突所採用的一種應變方式。不過有的鍵位設計則是設法加以改良,註明支援N-Key Rollover(NKRO),也就是可以同時輸出多顆按鍵,不會有鍵位衝突的問題。也有一些電競鍵盤,針對遊戲常用的特定按鍵進行矩陣電路最佳化避免鍵位衝突,也可以減少玩家出錯的機會。

▲薄膜式鍵盤與機械式鍵盤內部都是由矩陣電路所組成,此為鍵盤訊號示意圖,實際電路圖每家廠商都有所不同。

微軟線上進行簡易判斷鍵位訊號

透過國外的KeyboardTest付費軟體(約新台幣768元),或者由台灣玩家Ivan Lin開發的hKBTEST免費軟體都能測試,不過無論如何方便性也比不上直接開啟網頁就能測試。微軟設計了一個網頁平台,可以讓玩家利用網頁上的元件就能測試鍵盤的按鍵訊號。測試時可以分別將常用的3個鍵各別測試,比較容易判斷出哪些鍵一起按時會產生鬼鍵,這些都可以在設定快捷組合鍵時做為一個重要的參考指標。網址是:http://www.microsoft.com/appliedsciences/KeyboardGhostingDemo.mspx

▲微軟提供線上測試鍵位衝突問題,直接在網頁上就能即時測試。

打字快與鍵位衝突無關

近來有些玩家與媒體認為,打字輸入太快會造成鍵位衝突,小編在這裡可以跟各位掛保證這完全是兩回事。鍵位衝突的發生與否,與打字輸入的快慢毫無關係,按下去會產生鬼鍵的這3個按鍵,並不會因為速度太快或太慢而改善,千萬不要被誤導了。

如果以連接介面來說,對於內部設計會造成鍵位衝突的鍵盤,就算更改成PS/2與USB都還是會造成鍵位衝突。唯一差別的在於USB鍵盤通常都會受到USB規範所限制,只能有6+2鍵輸出,不能像PS/2鍵盤可以達到全部按鍵同時輸出。況且鍵盤衝突是鍵盤內部設計所造成的問題,跟外部輸出介面不同沒有相對關係。一般玩家看到這裡就可以了,如果真的很有興趣,可以翻閱75期電腦王雜誌,會有更詳細的說明。

使用 Facebook 留言

3e2a7d61ebc148a6b5f7110a6d3ea6dd?size=48&default=wavatar
1.  changshun (發表於 2011年2月04日 23:48)
頭一次聽到鬼鍵這個名詞,看了這篇文章,真是長知識了。
2bc1cea5ad8dc88a219dae4973233dae?size=48&default=wavatar
4.  SdDt (發表於 2011年2月06日 08:02)
哀 想不到微軟自家SideWinder X6遊戲鍵盤只不過方向鍵+Shift就發生鬼鍵問題
老貓 iqmore
5.  老貓 iqmore (發表於 2011年2月09日 09:20)
※ 引述《SdDt》的留言:
> 哀 想不到微軟自家SideWinder X6遊戲鍵盤只不過方向鍵+Shift就發生鬼鍵問題

如果沒有N-Key Rollover鍵盤都是屬於2-Key Rollover,所以X6會發生這樣的事都不意外,每把鍵盤都是如此。只是說依各家每把鍵盤矩陣設計的不同,所發生的鍵位衝突按鍵也會不一樣。
35ea5faa6e2c5353254a39c87ca25493?size=48&default=wavatar
7.  weic (發表於 2012年9月29日 20:35)
<( ̄︶ ̄)>
有一個疑問, 假設2 row & 2 column 共有四個按鍵(左上為A, 順時針B, C, D), 先掃描 row 1 並讀取 column 1 data, 再掃描 row 2 並讀取 column 2 data, 此做法會甚麼會有鬼鍵呢?
R1 --A B
R2 --D C
| |
C1 C2
R1=0;
Button_A=C1;
Button_B=C2;
R1=1;

R2=0;
Button_D=C1;
Button_C=C2;
R2=1;

假設按下A, Button data=0111;
假設按下B, Button data=1011;
假設按下A&B, Button data=0011;
假設按下A&B&C, Button data=0001;
因為一個時間裡只有R1 or R2 為0, R1=0(R2=1)時偵測到A B兩鍵被按下, R2=0(R2=1)時偵測到C鍵被按下,主因為C1(column 1)=1, 所以三鍵同時按不應該會偵測到D也被按下,有人可解釋嗎??

發表回應

謹慎發言,尊重彼此。按此展開留言規則