РЕДАКТИРОВАТЬ
Подумав об этом, если вы не наносите оттенок на что-либо, а используете исходные цвета графики, вы можете просто иметь (как я утверждаю ниже) все ваши цвета нарисованных объектов, установленные в объявленную переменную Color, установленную в белый цвет. (Color NoTint = Color.White;), а затем Lerp, что, если игрок живет, равен нулю. Каждый объект, нарисованный с помощью NoTint Color, будет медленно меняться (в соответствии с вашей частотой интерполяции, указанной ниже) до того, к чему вы его привязываете.
Однако, если у вас разные оттенки на разных объектах, цикл foreach может сработать.
Конец Править
В моих ограниченных знаниях я бы попробовал это: Объявите цвета, которые вы используете при рисовании конкретных объектов, напр. Color catColor = Color.Brown, затем добавьте все цвета ваших игр в список.
public static Color catColor = Color.Brown;
List<Color> colorList = new List<Color>(){ catColor }; // and other colors
float interpolation = 0f;
float interpolationRate = .01f;
.
.
.
if(playerLives == 0)
{
interpolation += interpolationRate;
if (interpolation >= 1)
{interpolation = 1;}
foreach(Color c in colorList)
{
Color.Lerp(c, Color.Gray, interpolation);
}
}
Вы можете даже сделать это для элементов, которые вы рисуете без оттенка, и Lerp Color.White к Color.Gray. (назовите это что-то вроде Color NoTint = Color.White и поместите это на все ваши нарисованные объекты)
Вероятно, есть лучший способ, но я надеюсь, что это поможет!