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

时间:2012-05-14 13:32:38

标签: c# xna

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

screenshot

和代码:

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),则光标永远不会移动。如果我没有放任何东西,光标移动得非常快。

1 个答案:

答案 0 :(得分:2)

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

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;
        }
    }
}