C# XNA - 遍历项目并绘制它们

3

这是我的代码:

// Variables
private SpriteFont font;
private Vector2 fontPos, fontOrigin;
private List<string> menuItems;

// LoadContent()
font = Content.Load<SpriteFont>("myFont");
fontPos = new Vector2(1920 / 2, 1080 / 2);
menuItems = new List<string>();
menuItems.Add("Single Player");
menuItems.Add("Multi Player");
menuItems.Add("Achievements");
menuItems.Add("Options");
menuItems.Add("Quit Game");

// Draw()
for (int i = 0; i < menuItems.Count; i++)
{
    Vector2 fontOrigin = Game.gameFontLarge.MeasureString(menuItems[i]) / 2;
    spriteBatch.DrawString(Game.gameFontLarge, menuItems[i], new Vector2(ScreenManager.Instance.Dimensions.X / 2, ScreenManager.Instance.Dimensions.Y / 2), Game.NoTint, 0.0f, fontOrigin, 1.0f, SpriteEffects.None, 0.0f);
}

目前这段代码绘制了所有的内容,但是所有文本都在同一坐标处重叠绘制,即屏幕中心。如何让列表中的每个字符串在前一个字符串下方绘制,比如在前一个字符串下面24像素?

1个回答

1
如果我理解你的问题正确,当你绘制字符串时,可以根据其索引简单地将固定像素数量添加到每个字符串的 y 值。
因此,您在这里的代码行:
spriteBatch.DrawString( . . . , new Vector2(ScreenManager.Instance.Dimensions.X / 2, ScreenManager.Instance.Dimensions.Y / 2), . . .);

变成了以下的样子:

变得更像以下内容:

spriteBatch.DrawString( . . . , new Vector2(ScreenManager.Instance.Dimensions.X / 2, (ScreenManager.Instance.Dimensions.Y / 2) + 24 * i), . . .);

希望这个解决方案对你有用 - 我不是非常熟悉XNA,但这应该是一般思路。 如果它给出类型不匹配的错误,则可能需要使用(float)i进行强制转换i

谢谢!它可以在不将i转换为浮点数的情况下工作。根据我的测试,Vector2.YVector2.Xfloat类型,但我不需要在除法中强制转换2,因为浮点数可以被整数除/乘(也许不是所有情况,但这个确切的情况不需要强制转换)。 - jacksparrow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接