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