[英]How do I detect lowercase keys using the Keys enum in C#?
for (Keys k = Keys.A; k <= Keys.Z; k++)
{
if (KeyPress(k))
Text += k;
}
此代碼檢測到我在鍵盤上按下的按鍵按鈕,它將打印出在控制台中按下的按鍵。 但是,我在鍵盤上按了'a',但它出現'A'。 我該如何解決?
這是一個經常遇到的問題。 問題是XNA不適合從鍵盤獲取文本輸入。 它適用於獲取鍵盤上每個鍵的當前狀態。
雖然您可以編寫自定義代碼來檢查是否按下shift等等,但是鍵盤不是您正在使用的鍵盤(例如,不同的語言,不同的布局)。 大多數人所做的就是讓窗戶為你做。
如果您希望文本按預期顯示,則需要基本上重新創建一些內容並讓窗口為您執行此操作。
請參閱Promit的帖子: http ://www.gamedev.net/topic/457783-xna-getting-text-from-keyboard/
用法:
將他的代碼添加到您的解決方案 EventInput.Initialize in your game's
Initialize`方法中調用EventInput.Initialize in your game's
並訂閱他的事件:
EventInput.CharEntered += HandleCharEntered;
public void HandleCharEntered(object sender, CharacterEventArgs e)
{
var charEntered = e.Character;
// Do something with charEntered
}
注意:如果您允許輸入任何字符(例如帶有變音符號的外國字符等),請確保您的SpriteFont
支持它們! (如果沒有,也許只是在將字體添加到文本字符串之前檢查您的字體是否支持它,或者讓spritefont使用特殊的“無效”字符)。
查看提供的代碼后,應該進行簡單的修改:
[...]
for (Keys k = Keys.A; k <= Keys.Z; k++)
{
if (KeyPress(k))
{
if (keyboardState.IsKeyDown(Keys.LeftShift) || keyboardState.IsKeyDown(Keys.RightShift)) //if shift is held down
Text += k.ToString().ToUpper(); //convert the Key enum member to uppercase string
else
Text += k.ToString().ToLower(); //convert the Key enum member to lowercase string
}
}
[...]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.