Я использую множество цветов в XNA.Все эти цвета взяты из класса Theme, который содержит возможные цвета для текущей темы.
Эти цвета используются в SpriteBatch.Draw () в качестве наложения, используя белую текстуру (1,1 пикселя).
У пользователя есть возможность изменить эту тему во время выполнения, тогда цвета класса Theme будут переназначены.
Однако, поскольку Color является структурой, все, что я ему назначил, получаетновая копия этого объекта.
Проблема в том, что если я изменю исходные цвета, изменения не будут отражены.Есть ли способ передать цвета по ссылке?Или другое решение?
Дополнительная информация:
Класс моей темы:
/// <summary>
/// Theme enumerator
/// </summary>
public enum Theme
{
Standard = 1, Blue, Dark
}
public class ThemeColor
{
//TODO: Refactor this out
private readonly SmartHome _gameRef;
public Color FBlue;
public Color FDarkGrey;
public Color FGreen;
public Color FLightBlue;
public Color FLightGrey;
public Color FOrange;
public Color FWhite;
public ThemeColor(SmartHome gameref)
{
Dal.Instance.Setting.OnChangedSetting += ChangedColor;
FBlue = new Color(0, 114, 186);
FDarkGrey = new Color(107, 108, 110);
FGreen = new Color(140, 189, 70);
FLightBlue = new Color(0, 179, 231);
FLightGrey = new Color(233, 233, 234);
FOrange = new Color(241, 142, 0);
FWhite = Color.White;
}
/// <summary>
/// Called if a setting is changed, checks if this setting is a theme setting,
/// if so, change the colors
/// </summary>
/// <param name="setting">Changed setting</param>
public void ChangedColor(Setting setting)
{
if (setting.Key == "Theme")
{
switch ((Theme)Int32.Parse(setting.Value))
{
case Theme.Standard:
FBlue = new Color(0, 114, 186);
FDarkGrey = new Color(107, 108, 110);
FGreen = new Color(140, 189, 70);
FLightBlue = new Color(0, 179, 231);
FLightGrey = new Color(233, 233, 234);
FOrange = new Color(241, 142, 0);
FWhite = Color.White;
break;
case Theme.Blue:
FBlue = new Color(0, 114, 186);
FDarkGrey = new Color(107, 108, 110);
FGreen = new Color(0, 179, 231);
FLightBlue = new Color(241, 142, 0);
FLightGrey = new Color(233, 233, 234);
FOrange = new Color(140, 189, 70);
FWhite = Color.White;
break;
case Theme.Dark:
FBlue = new Color(233, 233, 234);
FDarkGrey = new Color(0, 179, 231);
FGreen = new Color(107, 108, 110);
FLightBlue = new Color(0, 114, 186);
FLightGrey = new Color(140, 189, 70);
FOrange = new Color(241, 142, 0);
FWhite = Color.White;
break;
}
}
}
}
Элемент управления имеет свойство Color и устанавливается следующим образом: control ctrl.Color = ThemeColor.FGreen
Затем в контрольном классе: SpriteBatch.Draw(x,x,Color);