Donc, pour un projet universitaire, je cherche à changer la teinte d'un sprite sur une période donnée. L'objectif est de faire passer un ensemble de roches du gris à l'orange (en les simulant en les chauffant) pendant 5 secondes, puis de les faire passer de l'orange au gris (en les simulant en les refroidissant) au cours des 5 secondes suivantes. Ceci est fait en utilisant le DirectXTK, SpriteBatch en particulier, mais je semble avoir quelques problèmes pour contrôler la logique de chauffage et de refroidissement. Actuellement, les roches chauffent jusqu'à l'orange, mais ne refroidissent pas.C++ DirectXTK Modification de SpriteTint au fil du temps
La fonction de mise à jour pour les roches, ainsi qu'une autre fonction HeatDelay que j'utilise pour contrôler le refroidissement sont incluses ci-dessous.
timeToChangeColour est initialisée à 5.
void RockFade::Update(float timeDelta)
{
if ((timeDelta >= timeToChangeColour) && (heatDelay == false))
{
this->heatUp = false;
HeatDelay();
timeToChangeColour = timeDelta + 10;
}
else if ((timeDelta < timeToChangeColour) && (heatDelay == false))
{
this->heatUp = true;
}
if (heatUp)
{
this->newBlue -= 0.002f;
}
else
{
this->newBlue += 0.002f;
}
this->spriteTint = DirectX::SimpleMath::Color{ 1.0f, 1.0f, newBlue, 1.0f};
}
void RockFade::HeatDelay()
{
heatDelay = true;
Sleep(5);
heatDelay = false;
}
Toute aide est grandement appréciée!
Cela est logique! J'ai résolu le problème en re-jigging la logique, et en utilisant totalSeconds par opposition à timeDelta pour évaluer le temps passé! Merci! –