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)中起作用,我认为这是一个键盘问题,但是,一些游戏是如何解决的?这似乎是一个键盘重影问题。我认为除了改变游戏的控制外,没有别的解决办法。