C++ DirectXTK 随时间推移更改 SpriteTint
C++ DirectXTK Changing SpriteTint Over Time
所以对于一个大学项目,我希望尝试在特定的时间范围内改变精灵的色调。目的是让一组岩石在 5 秒内从灰色变成橙色(模拟加热它们),然后在接下来的 5 秒内再次将它们从橙色变成灰色(模拟冷却它们)。
这是使用DirectXTK,SpriteBatch完成的,但是我似乎在控制加热和冷却逻辑时遇到了一些问题。目前,岩石加热到橙色,但不会冷却下来。
下面包括岩石的更新功能,以及我用来控制冷却的进一步的热延迟功能。
timeToChangeColor 初始化为 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;
}
任何帮助将不胜感激!
代码最大的概念问题是在函数中
void RockFade::Update(float timeDelta);
您似乎假设timeDelta
将是自过去指定的固定时间以来的时差,但实际上是自上次调用Update
以来的时差。
因此,条件
timeDelta < timeToChangeColour
似乎总是正确的(因为似乎timeToChangeColour
的值超过一帧时间)。
实现你在这里要做的事情的第一步可能是积累时间,并将其作为你的基础,例如:
this->myAccumulatedTime += timeDelta; // initialize it to zero
相关文章:
- 如何从 DirectXTK (ToolKit) DirectX::Model 类获取所有顶点坐标以用于冲突检测
- CoInitialize 尚未被调用 - (从 DirectXTK 加载 gamepad.h,无需库)
- DirectX11 DirectXTK需要一个CSO文件进行测试
- C++ DirectXTK 随时间推移更改 SpriteTint
- 使用DirectXTK / DirectXmath转换平面
- disablez缓冲无法使用directxtk
- 尝试使用DirectXTK创建GamePad时出现错误LNK2019
- DirectXTK -过程入口点CreateFile2无法在内核32.dll中找到