XNA 主菜单中的光标移动非常快

本文关键字:移动 非常 光标 菜单 XNA | 更新日期: 2023-09-27 18:34:02

我有一点问题。我正在游戏的标题屏幕或主菜单中工作。以下是主窗口的屏幕截图:

截图

和代码:

class MenuPrincipal
{
    public Texture2D Fondo { get; set; }
    public Texture2D Cursor { get; set; }
    int cambiar = 0;
    int tiempoTranscurrido;
    KeyboardState teclaActual;
    bool menuActivo;
    public bool MenuActivo 
    { 
        get { return menuActivo; } 
        set { menuActivo = value; } 
    }
    public MenuPrincipal(Texture2D fondo, Texture2D cursor)
    {
        Fondo = fondo;
        Cursor = cursor;
    }
    public void Update(GameTime gameTime)
    {
        teclaActual = Keyboard.GetState();
        tiempoTranscurrido = gameTime.ElapsedGameTime.Milliseconds;
        if (tiempoTranscurrido > 50)
        {
            tiempoTranscurrido = 0;
            if (teclaActual.IsKeyDown(Keys.Down))
            {
                if (cambiar > 2)
                    cambiar = 0;
                else
                    cambiar++;
            }
        }
     }
    public void Draw(SpriteBatch spriteBatch)
    {
        spriteBatch.Draw(Fondo, new Rectangle(0, 0, 800, 600), Color.White);
        switch(cambiar)
        {
            case 0: spriteBatch.Draw(Cursor, new Rectangle(325, 225, 16, 12), Color.White);
                    break;
            case 1: spriteBatch.Draw(Cursor, new Rectangle(325, 281, 16, 12), Color.White); 
                    break;
            case 2: spriteBatch.Draw(Cursor, new Rectangle(325, 336, 16, 12), Color.White); 
                    break;
        }
    }
}

}

我希望当用户按下向下箭头键时,光标从"un jugador"移动到"opciones",从"opciones"移动到"creditos"。但是,当用户按下向下键时,光标移动得非常快。我想要一个速度限制,以便当我按下一次键时,光标会移动一个选项。如果我放一个"极限帧"(变量tiempoTranscurrido),光标永远不会移动。如果我什么都不放,光标移动得非常快。

XNA 主菜单中的光标移动非常快

添加一个标志,直到键出现,像这样...

bool keyDown = false;
public void Update(GameTime gameTime)
{
    teclaActual = Keyboard.GetState();
    tiempoTranscurrido = gameTime.ElapsedGameTime.Milliseconds;
    if (tiempoTranscurrido > 50)
    {
        tiempoTranscurrido = 0;
        if (teclaActual.IsKeyDown(Keys.Down) && !keyDown)
        {
            keyDown = true;
            if (cambiar > 2)
                cambiar = 0;
            else
                cambiar++;
        }
        if (teclaActual.IsKeyUp(Keys.Down))
        {
            keyDown = false;
        }
    }
}