C# - 仅拍摄一次 - IsKeyUp& IsKeyDown

时间:2014-01-17 17:00:38

标签: c# if-statement xna

我的Shoot Em Up游戏已经出现问题了一段时间了,我似乎无法找到任何答案。我想只拍1枚子弹,即使我按住空格键。根据我目前的代码,我根本不会发射任何子弹。我做错了什么?

        KeyboardState newState = Keyboard.GetState();
        KeyboardState oldState = Keyboard.GetState();

        if (oldState.IsKeyUp(Keys.Space) && newState.IsKeyDown(Keys.Space))
        {
            bulletList.Add(new Bullet(content.Load<Texture2D>(@"bullet"), new Vector2(initialPos.X, initialPos.Y - 28), new Vector2(2, 4), spriteBatch));
        }

        oldState = newState;

3 个答案:

答案 0 :(得分:1)

您的问题是您正在检查空格键是否上下,这是不可能的。我想你应该尝试这样的事情:

bool readytofire = true;
public override void Update()
{
    KeyboardState newState = Keyboard.GetState();

    readytofire = !newState.IsKeyDown(Keys.Space);

    if (newState.IsKeyDown(Keys.Space) && readytofire)
    {
        bulletList.Add(new Bullet(content.Load<Texture2D>(@"bullet"), new Vector2(initialPos.X, initialPos.Y - 28), new Vector2(2, 4), spriteBatch));
    }
}

答案 1 :(得分:0)

您在检查之前正在设置旧状态,因此它将始终与newState相同。删除此行: KeyboardState oldState = Keyboard.GetState();

第一次在循环中运行时,可能需要为oldState赋值。

答案 2 :(得分:0)

KeyboardState newState = Keyboard.GetState();
KeyboardState oldState = Keyboard.GetState();

这些将具有相同的值。

if (oldState.IsKeyUp(Keys.Space) && newState.IsKeyDown(Keys.Space))

这是检查Space键是UP还是DOWN。

两个代码片段都没有意义。这个代码在循环中吗?如果是这样,请检查空格DOWN并使用布尔标志以确保仅触发一次。然后检查空间UP,倒转标志。