XNA中的多个按键

时间:2013-07-07 00:29:18

标签: c# xna

好的,所以我在XNA,Visual C#2010 Express Edition中创建游戏。我有一个可以成功完成一个运行周期的简笔画,所以我希望添加一个“闪避”功能。如果你举行班次,你可以躲避 - 这是有效的。但后来我用动画在我的spritesheet中添加了一个额外的图层,并在代码中声明如果shift和A被按下或​​移动和D,那么底行的动画将循环通过。它只进入下一帧并从那里移动,正如我在标题中所述,很可能是程序无法同时检测到两个按键的结果。这是我的代码的摘录,任何帮助将不胜感激。

else if (keyboardstate.IsKeyDown(Keys.LeftShift))
{
    currentFrame.X = 0;
    currentFrame.Y = 8;
}
if (keyboardstate.IsKeyDown(Keys.LeftShift) && keyboardstate.IsKeyDown(Keys.A) && killed == false)
{
    pos.X -= speed;
    this.flip = SpriteEffects.FlipHorizontally;
    leftPress = true;
    timeSinceLastFrame += gameTime.ElapsedGameTime.Milliseconds;
    if (timeSinceLastFrame > millisecondsPerFrame)
    {
        timeSinceLastFrame -= millisecondsPerFrame;
        ++currentFrame.X;
        if (currentFrame.X >= 8)
        {
            currentFrame.X = 0;
        }
    }
}
if (keyboardstate.IsKeyDown(Keys.LeftShift) && keyboardstate.IsKeyDown(Keys.D) && killed == false)
{
    pos.X += speed;
    if (leftPress == true)
    {
        this.flip = SpriteEffects.None;
    }
    timeSinceLastFrame += gameTime.ElapsedGameTime.Milliseconds;
    if (timeSinceLastFrame > millisecondsPerFrame)
    {
        timeSinceLastFrame -= millisecondsPerFrame;
        ++currentFrame.X;
        if (currentFrame.X >= 8)
        {
            currentFrame.X = 0;
        }
    }
}
else if (keyPress.IsKeyUp(Keys.LeftShift) && keyRelease.IsKeyDown(Keys.LeftShift) && killed == false)
{
    currentFrame.X = 0;
    currentFrame.Y = 0;
    leftPress = false;
}

P.S。这是我的spritesheet供参考。 :) http://oi43.tinypic.com/2v1uohg.jpg

P.S.S。这里的所有内容都位于Update方法中。

2 个答案:

答案 0 :(得分:0)

这听起来像key blocking。这不是由于软件,而是由于键盘。许多键盘将无法识别各种三键组合。

例如,我的笔记本电脑和工作键盘无法识别我尝试在我的应用程序中使用的几种组合。但我的游戏键盘确实如此。

答案 1 :(得分:0)

您还可以使用GetPressedKeys()获取与当前正在按下的键盘键对应的值数组。但不确定这是否会因硬件限制而起作用。

Keys[] currentPressedKeys = currentKeyboardState.GetPressedKeys();
foreach( Keys key in currentPressedKeys )
{
...
}