Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XNA C#键盘阵列问题_C#_Arrays_Xna_Keyboard Events - Fatal编程技术网

XNA C#键盘阵列问题

XNA C#键盘阵列问题,c#,arrays,xna,keyboard-events,C#,Arrays,Xna,Keyboard Events,我已经开始为我的游戏制作一个Player类,因此由于游戏的控制量很大,我使用了钥匙的数组作为开关来简化游戏。除一把钥匙外,所有钥匙都能正常工作 当我按下空格键和箭头键时,它只同时检测到一个箭头键和空格键。但它只发生在空格键上。我试图解决这个问题,但我评论了空间部分,它也做了同样的事情 如果使用isDown方法,则不会发生这种情况 代码如下: for (int Key = 0; Key < Keyboard.GetState().GetPressedKeys().Count(); Key++

我已经开始为我的游戏制作一个
Player
类,因此由于游戏的控制量很大,我使用了钥匙的数组作为开关来简化游戏。除一把钥匙外,所有钥匙都能正常工作

当我按下空格键和箭头键时,它只同时检测到一个箭头键和空格键。但它只发生在空格键上。我试图解决这个问题,但我评论了空间部分,它也做了同样的事情

如果使用
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;
    }
}
for(int Key=0;Key
我个人会在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;
    }
}
var keys=Keyboard.GetState().GetPressedKeys();
对于(var i=0;i

我相信您的问题来自于每次循环调用GetPressedKeys()并从中接收新数组。

您同时按下多少个键。 如果同时按多个键,则会出现“键盘重影”:

现在如果不是这样,我想看看你的
移动(Direction.Up)
有什么作用

我个人不会使用for开关,但:

if (Keyboard.GetState().IsKeyDown(Keys.D))
{
     velocity.Y = 0f;
     velocity.X = 2f;                
}

将此信息放在玩家类的更新中(如果您不知道:S)

同时按空格键和箭头键在其他地方是否有效?您的键盘上有一个物理限制,您可以同时按下这些键。是的,它适用于任何其他游戏或应用程序。我现在使用IsKeyDown方法,它对空格键也有相同的作用:/I我在一个新项目中测试了输入,它也有相同的作用。空格键对其他键也起着同样的作用。它似乎在一些引擎(如Multimedia Fusion 2)中不起作用,但在其他游戏(如S4 League)中起作用,我认为这是一个键盘问题,但是,一些游戏是如何解决的?这似乎是一个键盘重影问题。我认为除了改变游戏的控制外,没有别的解决办法。