C# XNA - 遍历项目并绘制它们
C# XNA - Iterating through items and drawing them
所以这是我的代码:
// 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
像素?
如果我没看错你的问题,当你绘制字符串时,你可以简单地根据每个字符串的索引向每个字符串的 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
。
所以这是我的代码:
// 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
像素?
如果我没看错你的问题,当你绘制字符串时,你可以简单地根据每个字符串的索引向每个字符串的 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
。