[英]XNA C# Issue with Keyboard Array
我已經開始為我的游戲制作Player
類,因此由於游戲的控件數量眾多,我將Key的數組放入了一個開關中以使其變得簡單。 它適用於除一個以外的所有鍵。
當我按下空格鍵和箭頭鍵時,它只能同時檢測到箭頭鍵和空格鍵之一。 但是它僅在空格鍵時發生。 我試圖解決這個問題,但是我評論了空格部分,它也做了同樣的事情。
如果我使用isDown
方法,則不會發生。
這是代碼:
for (int Key = 0; Key < Keyboard.GetState().GetPressedKeys().Count(); Key++)
{
switch (Keyboard.GetState().GetPressedKeys()[Key])
{
case Keys.Up:
Move(Direction.Up);
Console.WriteLine("Up");
break;
case Keys.Down:
Move(Direction.Down);
Console.WriteLine("Down");
break;
case Keys.Left:
Move(Direction.Left);
Console.WriteLine("Left");
break;
case Keys.Right:
Move(Direction.Right);
Console.WriteLine("Right");
break;
case Keys.LeftShift:
if (!isShifting)
isShifting = true;
break;
case Keys.A:
if (!oldKeyboardState.IsKeyDown(Keys.A))
CastSkill(1);
break;
case Keys.Space:
shootMgr.Shoot();
break;
}
}
我會親自在ifs而不是for和switch中進行操作。
var keys = Keyboard.GetState();
if (keys.IsKeyDown(Keys.Up) {
Move(Direction.Up);
Console.WriteLine("Up");
}
if (keys.IsKeyDown(Keys.Down) {
...
}
但是,如果您想通過循環和切換來完成此操作,將其切換到以下位置時會發生什么:
var keys = Keyboard.GetState().GetPressedKeys();
for (var i = 0; i < keys.Count(); i++) {
switch (keys[i]) {
case: Keys.Up:
...
break;
case: Keys.Down:
...
break;
}
}
我相信您的問題來自循環的每次迭代從GetPressedKeys()調用和接收新數組。
您要同時按下多少鍵。 如果您同時按下多個按鈕,您將得到“鍵盤重影”: http : //www.microsoft.com/appliedsciences/antighostingexplained.mspx
現在,如果不是這種情況,我想看看您的Move(Direction.Up)
做什么。
我個人不會使用for開關,而是:
if (Keyboard.GetState().IsKeyDown(Keys.D))
{
velocity.Y = 0f;
velocity.X = 2f;
}
將其放在Player類的更新中(以防您不知道:S)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.