EDITAR
Depois de pensar sobre isso, se você não estiver pintando nada, mas usando as cores originais dos gráficos, você poderá ter (como eu declaro abaixo) todas as cores de objetos desenhados configuradas para uma variável declarada Color definida como branca. (Color NoTint = Color.White;) e depois Lerp que, se o jogador vive, é igual a zero. Todo objeto desenhado com a cor NoTint muda lentamente (de acordo com a taxa de interpolação mencionada abaixo) para o que você estiver lendo.
No entanto, se você tiver matizes diferentes em objetos diferentes, o loop foreach abaixo poderá funcionar.
Finalizar edição
No meu conhecimento limitado, eu tentaria o seguinte: Declare as cores que você usa ao desenhar objetos específicos, ex. Cor catColor = Color.Brown e adicione todas as cores dos seus jogos a uma lista.
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);
}
}
Você pode até fazer isso para itens desenhados sem matiz e ler novamente o Color.White para um Color.Gray. (nomeie algo como Color NoTint = Color.White e coloque isso em todos os seus objetos desenhados)
Provavelmente existe uma maneira melhor, independentemente, espero que isso ajude!