2

我有一个小问题。我正在为我的游戏使用标题屏幕或主菜单。这是主窗口的屏幕截图:

截屏

和代码:

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),光标永远不会移动。如果我什么都不放,光标移动得非常快。

4

1 回答 1

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;
        }
    }
}
于 2012-05-14T13:35:55.347 回答