簡體   English   中英

XNA C#鍵盤陣列問題

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

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