代码之家  ›  专栏  ›  技术社区  ›  jacksparrow

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

  •  2
  • jacksparrow  · 技术社区  · 9 年前

    这是我的代码:

    // 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 回复  |  直到 9 年前
        1
  •  1
  •   Maximillian Laumeister    9 年前

    如果我没看错你的问题,当你画你的字符串时,你可以简单地给每个字符串添加一个固定的像素量 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并不完全熟悉,但这应该是一个总的想法。如果出现类型不匹配错误,则可能需要强制转换 i 通过使用 (float)i 相反