【问题标题】:Ammo count Xna / Monogame弹药计数 Xna / Monogame
【发布时间】:2015-11-12 19:38:26
【问题描述】:

每次按下空格键时,我都会尝试从玩家弹药中减去 1。

但是,无论何时我按下空格键,它都会从 Player Ammo int 中减去一个多于一的值。

这是我的代码:

int player1Ammo = 5;

检索键盘的当前状态:

KeyboardState keyboardState = Keyboard.GetState();
KeyboardState _previousKeyboardState = keyboardState;


if (Keyboard.GetState().IsKeyDown(Keys.Space))
           {

                player1Ammo -= 1; FireBullet();

            }

如何解决我遇到的问题?

【问题讨论】:

    标签: xna


    【解决方案1】:

    在您的情况下 if (Keyboard.GetState().IsKeyDown(Keys.Space)) 的意思不是“if 按下空格”。这意味着“同时按下空间”,因为游戏每秒调用更新方法 60 次(默认情况下)。您不能以快于 1/60 秒的速度按下和释放按钮,因此每次按下时,此表达式都会为真。并且每次它都会重复你的代码。

    这样做:

    class Game1 : Game
    {
        private bool isKeyPressed;
    
        void Update()
        {
            KeyboardState keyboardState = Keyboard.GetState();
            if (keyboardState.IsKeyDown(Keys.Space))
            {
                if (!isKeyPressed)
                {
                    isKeyPressed = true;
                    // do what you need when key pressed
                }
            }
            else if(keyboardState.IsKeyUp(Keys.Space))
            {
                if (isKeyPressed)
                {
                    isKeyPressed = false;
                    // do what you need when key released
                }
            }
        }
    }
    

    更新

    My own solution on BitBucket(如果链接断开,请写信给我)。

    创建 CustomKeyInputManager 的实例,注册您想要的键并在每一帧更新它。检查何时按下、释放、按住等键。

    【讨论】:

    • 我建议创建(或找到)一个完全独立的类来处理键盘的状态,这样您就可以在每次更新时执行 KeyboardManager.Update(time),并使用 KeyboardManager 检查按下.IsKeyDown(Keys.Space)。这基本上就是这段小代码的作用,只限于空格键。
    猜你喜欢
    • 2018-08-05
    • 2021-10-06
    • 1970-01-01
    • 2014-03-06
    • 1970-01-01
    • 1970-01-01
    • 2016-05-27
    • 1970-01-01
    • 2015-07-07
    相关资源
    最近更新 更多