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

本文关键字:字符串 列表 颜色 色调 绘制 | 更新日期: 2023-09-27 18:11:23

所以我有这样的代码:

编辑:

// 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>,如果是这样,如何通过它迭代?

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

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

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

EDIT:对于评论中的问题,您可以在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;
}