簡體   English   中英

如何使用C#中的keys枚舉檢測小寫密鑰?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM