用不同的色调绘制列表中的每个字符串
Draw each string in list with a different tint color
所以我有这个代码:
编辑:
// 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
的值?如果我希望其中一个字符串为 "greyed out" 并且感觉它已被禁用?所以基本上我需要一个解决方案来解决如何用我在代码某处指定的不同颜色绘制每个字符串?我应该使用 Dictionary<string, Color>
而不是 List<string>
吗?如果是,如何遍历它?
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;
}
所以我有这个代码:
编辑:
// 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
的值?如果我希望其中一个字符串为 "greyed out" 并且感觉它已被禁用?所以基本上我需要一个解决方案来解决如何用我在代码某处指定的不同颜色绘制每个字符串?我应该使用 Dictionary<string, Color>
而不是 List<string>
吗?如果是,如何遍历它?
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;
}