相关疑难解决方法(0)

线性运动口吃

我创建了简单,独立于帧,可变时间步长,Direct3D9使用中的线性运动ID3DXSprite.大多数用户都无法注意到它,但在某些(包括我的)计算机上,它经常发生,有时它会很多口吃.

  • VSync启用和禁用会发生口吃.

  • 我发现在OpenGL渲染器中也会发生同样的情况.

  • 它不是浮点问题.

  • 似乎问题只存在于AERO Transparent Glass窗口模式中(在全屏,无边界全屏窗口或禁用航空器时很好或至少不那么明显),当窗口失去焦点时甚至更糟.

编辑:

即使发生口吃,帧增量时间也不会留出16 ... 17 ms的界限.

好像我的帧增量时间测量日志代码被窃听了.我现在修好了.

  • 通常启用VSync的帧会渲染17ms,但有时(可能在发生sutttering时)它会跳到25-30ms.

(我只在应用程序出口处转储一次日志,而不是在运行,渲染时,因此它不会影响性能)

    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)

c++ game-physics directx-9

7
推荐指数
1
解决办法
2867
查看次数

标签 统计

c++ ×1

directx-9 ×1

game-physics ×1