我创建了简单,独立于帧,可变时间步长,Direct3D9使用中的线性运动ID3DXSprite.大多数用户都无法注意到它,但在某些(包括我的)计算机上,它经常发生,有时它会很多口吃.
VSync启用和禁用会发生口吃.
我发现在OpenGL渲染器中也会发生同样的情况.
它不是浮点问题.
似乎问题只存在于AERO Transparent Glass窗口模式中(在全屏,无边界全屏窗口或禁用航空器时很好或至少不那么明显),当窗口失去焦点时甚至更糟.
编辑:
即使发生口吃,帧增量时间也不会留出16 ... 17 ms的界限.
好像我的帧增量时间测量日志代码被窃听了.我现在修好了.
(我只在应用程序出口处转储一次日志,而不是在运行,渲染时,因此它不会影响性能)
device->Clear(0, 0, D3DCLEAR_TARGET, D3DCOLOR_ARGB(255, 255, 255, 255), 0, 0);
device->BeginScene();
sprite->Begin(D3DXSPRITE_ALPHABLEND);
QueryPerformanceCounter(&counter);
float time = counter.QuadPart / (float) frequency.QuadPart;
float deltaTime = time - currentTime;
currentTime = time;
position.x += velocity * deltaTime;
if (position.x > 640)
velocity = -250;
else if (position.x < 0)
velocity = 250;
position.x = (int) position.x;
sprite->Draw(texture, 0, 0, &position, …Run Code Online (Sandbox Code Playgroud)