0

メニューで XNA の文字列のリストを描画することに関する 2 つの質問。まず、テキストを中央揃えではなく左揃えにするにはどうすればよいですか? 2 つ目は、どの行が選択される前に、どのように言う行を表示するかです。これまでのところ、私が持っているコードは次のとおりです。

    public void Draw(SpriteBatch spriteBatch, GameTime gameTime)
    {
        Color color;
        int linePadding = 3;

        if (gameTime.TotalGameTime.TotalSeconds <= 3)
        {
            spriteBatch.Draw(mTheQuantumBros2, new Rectangle(300, 150, mTheQuantumBros2.Width, mTheQuantumBros2.Height), Color.White);
        }
        else
        {
            for (int i = 0; i < buttonList.Count; i++)
            {
                color = (i == selected) ? Color.Gold : Color.LawnGreen;
                spriteBatch.DrawString(spriteFont, buttonList[i], new Vector2((screenWidth / 2) - (spriteFont.MeasureString(buttonList[i]).X / 2), (screenHeight / 2) - (spriteFont.LineSpacing * (buttonList.Count) / 2) + ((spriteFont.LineSpacing + linePadding) * i)), color);
            }
        }
    }
4

1 に答える 1

1

うーん..正直なところ、中央揃えの方が見栄えが良いと思いますが、コードで行う必要があるのは、ドローストリングを次のように変更することだけです。

for (int i = 0; i < buttonList.Count; i++)
{
     color = (i == selected) ? Color.LawnGreen : Color.Gold;
     spriteBatch.DrawString(spriteFont, buttonList[i], new Vector2((screenWidth / 2) /*- (spriteFont.MeasureString(buttonList[i]).X / 2)*/, (screenHeight / 2) - (spriteFont.LineSpacing * (buttonList.Count) / 2) + ((spriteFont.LineSpacing + linePadding) * i)), color);
}

あなたは私がコメントアウトしたものを見ることができます。それを取り除くことで、文字列を幅の半分だけ左に移動することはなくなります。

2 番目の部分については、メニュー項目の色を決定するために既に行っているように、値が選択されているかどうかを確認するだけです。選択されている場合は、「|」を追加するだけです 文字列の先頭と末尾に:

for (int i = 0; i < buttonList.Count; i++)
{
     color = (i == selected) ? Color.LawnGreen : Color.Gold;
     if(i != selected)
     {
         spriteBatch.DrawString(spriteFont, buttonList[i], new Vector2((screenWidth / 2) /*- (spriteFont.MeasureString(buttonList[i]).X / 2)*/, (screenHeight / 2) - (spriteFont.LineSpacing * (buttonList.Count) / 2) + ((spriteFont.LineSpacing + linePadding) * i)), color);
     }
     else
     {
         spriteBatch.DrawString(spriteFont,"|" + buttonList[i] + "|", new Vector2((screenWidth / 2) - (int)spriteFont.MeasureString("|").X, (screenHeight / 2) - (spriteFont.LineSpacing * (buttonList.Count) / 2) + ((spriteFont.LineSpacing + linePadding) * i)), color);
     }
}

今、「|」を追加しているので 文字列の先頭まで、位置に影響します。「|」の測定された幅を差し引くことにより、文字列が再センタリングされます。

于 2013-05-14T22:42:20.233 に答える