使用不同的色调颜色绘制列表中的每个字符串

时间:2015-09-05 10:04:33

标签: c# xna

所以我有这段代码:

修改

// Variables
private Dictionary<string, Color> menuEntries;
private Color fontColour;

// LoadContent()
fontColour = Color.White; // By default
menuEntries = new Dictionary<string, Color>();
menuEntries["SinglePlayer"] = Color.White;
menuEntries["MultiPlayer"] = Color.Gray;
menuEntries["Achievements"] = Color.White;
menuEntries["Options"] = Color.White;
menuEntries["Quit Game"] = Color.White;

// 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) + 48 * i), fontColour, 0.0f, fontOrigin, 1.0f, SpriteEffects.None, 0.0f);
}*/

foreach (var entry in menuEntries)
{
    var text = entry.Key;
    var color = entry.Value;
    Vector2 fontOrigin = Game.gameFontLarge.MeasureString(entry.Key) / 2;
    spriteBatch.DrawString(Game.gameFontLarge, entry.Key, new Vector2(ScreenManager.Instance.Dimensions.X / 2, (ScreenManager.Instance.Dimensions.Y / 2)), entry.Value, 0.0f, fontOrigin, 1.0f, SpriteEffects.None, 0.0f);
}

那么如何将fontColour(默认为Color.White)的值更改为Color.Gray之类的内容?如果我想把其中一个字符串变成“灰色”并觉得它被禁用了?所以基本上我需要一个解决方案,如何绘制我在代码中指定的不同颜色的每个字符串?我应该使用Dictionary<string, Color>而不是List<string>,如果是,请如何迭代它?

1 个答案:

答案 0 :(得分:1)

Dictionary<string, Color>听起来不错。

foreach (var entry in menuItems)
{
   var text = entry.Key;
   var color = entry.Value;
   // ...
}

编辑:对于评论中的问题,您可以在foreach之外定义变量并在其中使用,例如:

var y = ScreenManager.Instance.Dimensions.Y / 2;
foreach (var entry in menuEntries)
{
    var text = entry.Key;
    var color = entry.Value;
    Vector2 fontOrigin = Game.gameFontLarge.MeasureString(entry.Key) / 2;
    spriteBatch.DrawString(Game.gameFontLarge, entry.Key, new Vector2(ScreenManager.Instance.Dimensions.X / 2, y), entry.Value, 0.0f, fontOrigin, 1.0f, SpriteEffects.None, 0.0f);
    y += 48;
}