【问题标题】:How would I compress keyboard input, if statements into a for loop? (shooting bullets)我将如何将键盘输入压缩到 for 循环中? (射击子弹)
【发布时间】:2016-12-14 15:01:50
【问题描述】:

所以我正在创建一个 XNA 游戏,它由一艘宇宙飞船组成,向周围发射子弹,在携带“绳子”的不同敌方宇宙飞船上。它本质上是一个拼字游戏,我必须通过用正确的字母击中宇宙飞船来拼出单词。

不管怎样,我的问题是,我目前有两个“if”语句用于射击子弹,如果我对键盘上剩下的 25 个字母键执行此操作,那将是一些可怕的编程.是的,我确实需要键盘上的每个“字母”键,因为这将是一个拼写游戏。这是我为其中一个项目符号获取的代码示例。

我在这里基本上做的是如果“Fired”布尔值是假的,并且按下了相应的键,我将一个矩形定位在枪的位置并将“Fired”设置为true,让子弹松动.然后很明显,每当它到达屏幕顶部时,我将fired back设置为false,以便重新加载概念。

 if (MyKeys.IsKeyDown(Keys.Q) && OldKeys.IsKeyUp(Keys.Q) && Fired[0] == false)
        {

            CurrentChar = "Q";
            Shot[0].X = SpaceStationGun.X;
            Shot[0].Y = SpaceStationGun.Y;
            Fired[0] = true;
        }

        if (Fired[0] == true)
        {
            Shot[0].Y -= SHOT_SPEED;
            if (Shot[0].Y < 0 - SHOT_HEIGHT)
            {
                Fired[0] = false;
            }
        }

现在的问题是,我如何在键盘上的 25 个字母键的其余部分循环这个,并且仍然保持功能?

【问题讨论】:

    标签: c# loops keyboard xna


    【解决方案1】:

    Keyboard.GetState().GetPressedKeys() 为您提供在其状态期间被按下的Keys 的集合。

    我看不到您的 MyKeysOldKeys 是如何更新的,但我假设您可以使用以下内容

    var keysPressed = MyKeys.GetPressedKeys()
        .Where(k => !OldKeys.GetPressedKeys().Contains(k));
    
    foreach(var key in keysPressed)
    {
        // Do your logic
    }
    
    OldKeys = MyKeys;
    
    MyKeys = Keyboard.GetState();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-26
      相关资源
      最近更新 更多