Visual Studio — C ++ DirectXTK изменяет SpriteTint с течением времени

Поэтому для университетского проекта я пытаюсь изменить оттенок спрайта в течение определенного периода времени. Цель состоит в том, чтобы заставить набор камней изменить цвет с серого на оранжевый (имитируя нагревание) в течение 5 секунд, а затем снова переключить их с оранжевого на серый (имитируя их охлаждение) в течение следующих 5 секунд.

Это делается с использованием DirectXTK, в частности SpriteBatch, однако у меня возникают некоторые проблемы с управлением логикой нагрева и охлаждения. В настоящее время камни нагреваются до оранжевого цвета, но не остывают.

Функция обновления для камней, а также дополнительная функция HeatDelay, которую я использую для управления охлаждением, приведены ниже.

timeToChangeColour инициализируется в 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;
}

Любая помощь очень ценится!

0

Решение

Самая большая концептуальная проблема с вашим кодом в том, что в функции

void RockFade::Update(float timeDelta);

Вы, кажется, предполагаете, что timeDelta будет разница во времени с указанного фиксированного времени в прошлом, но на самом деле это разница во времени с последнего раза Update назывался.

Из-за этого условия

timeDelta < timeToChangeColour

кажется, всегда верно (потому что кажется timeToChangeColourзначение превышает один кадр).

Первым шагом к достижению того, что вы пытаетесь сделать здесь, может стать накопление времени и использование его в качестве основы, например:

this->myAccumulatedTime += timeDelta; // initialize it to zero
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector