0

好的,所以我正在 XNA 中创建一个游戏,Visual C# 2010 Express Edition。我有一个可以成功完成运行周期的简笔画,所以我希望添加一个“闪避”功能。如果你按住shift,你可以躲避——这很管用。但是后来我用动画在我的精灵表中添加了一个额外的层 - 并在代码中声明如果按住 shift 和 A 或 shift 和 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;
}

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

PSS 这里的一切都位于Update 方法中。

4

2 回答 2

1

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

Keys[] currentPressedKeys = currentKeyboardState.GetPressedKeys();
foreach( Keys key in currentPressedKeys )
{
...
}
于 2013-07-08T06:11:39.870 回答
0

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

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

于 2013-07-08T04:29:07.693 回答