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」に移動します。ただし、ユーザーが下キーを押すと、カーソルが非常に速く移動します。キーを1回押すと、カーソルが1つのオプションに移動するように速度制限が必要です。「リミットフレーム」(変数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 に答える