【问题标题】:Main Menu navigation / keyboard input speed is too fast主菜单导航/键盘输入速度太快
【发布时间】:2013-03-23 04:50:52
【问题描述】:

我最近开始使用 XNA 游戏工作室 4.0 制作视频游戏。我使用按钮列表制作了一个包含 4 种精灵字体的主菜单。当我按下向上和向下箭头时,它们的颜色会从白色变为黄色。

我的问题是,当我滚动浏览它时,它会非常快地从顶部字体转到底部字体,然后直接转到最后一个字体。我不确定这是为什么?是不是因为我把它放在更新方法中,它每 60 秒左右调用一次?

这是我按下箭头键时的代码。

 public void Update(GameTime gameTime)
    {
        keyboard = Keyboard.GetState();

        if (CheckKeyboard(Keys.Up))
        {
            if (selected > 0)
            {
                selected--;
            }
        }
        if (CheckKeyboard(Keys.Down))
        {
            if (selected < buttonList.Count - 1)
            {
                selected++;
            }
        }

        keyboard = prevKeyboard;
    }

    public bool CheckKeyboard(Keys key)
    {
        return (keyboard.IsKeyDown(key) && prevKeyboard.IsKeyUp(key));
    }

我需要有人帮我把它放慢到合理的速度。

如果您能帮助我,将不胜感激。

【问题讨论】:

  • 很高兴在 SO 上看到新用户。请注意,我们希望您不要使用谢谢。

标签: c# input keyboard xna-4.0


【解决方案1】:

我认为问题在于您没有正确设置prevKeyboard

试试这个:

public void Update(GameTime gameTime)
{
    keyboard = Keyboard.GetState();

    if (CheckKeyboard(Keys.Up))
    {
        if (selected > 0)
        {
            selected--;
        }
    }
    if (CheckKeyboard(Keys.Down))
    {
        if (selected < buttonList.Count - 1)
        {
            selected++;
        }
    }

    prevKeyboard = keyboard; // <=========== CHANGE MADE HERE
}

public bool CheckKeyboard(Keys key)
{
    return (keyboard.IsKeyDown(key) && prevKeyboard.IsKeyUp(key));
}

【讨论】:

  • @hunteroatway17 没问题。不要忘记标记正确答案,以便整个 SO 社区都能受益。
【解决方案2】:

我认为是因为

 if (CheckKeyboard(Keys.Up))
    {
        if (selected > 0)
        {
            selected--;
            // This loops executes so quick before you release button.
            // Make changes here to stop the loop if the button is pressed and loop
            // executed once.(May be) just **return;** would do ?
        }
    }
    if (CheckKeyboard(Keys.Down))
    {
        if (selected < buttonList.Count - 1)
        {
            selected++;
            // This loops executes so quick before you release button.
            // Make changes here to stop the loop if the button is pressed and loop
            // executed once.(May be) just **return;** would do ?
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多