【问题标题】:How to increase frame rate and reduce flickering in C? [closed]如何提高帧速率并减少C中的闪烁? [关闭]
【发布时间】:2013-12-19 12:15:46
【问题描述】:

我用 C 语言编写了一个小型图形应用程序,我在其中画了一个盒子和一个圆圈(就像房间里的一个球)。当圆圈触及其中一个边界时,它会反弹回来。

我为此使用了以下示例代码:

xVelocity = 5;
yVelocity = 5;

if(circle.x <= 0) {
    xVelocity = 5;
}

if(circle.y <= 0) {
    yVelocity = 5;
}

if(circle.x>=box.width) {
    xVelocity = -5;
}

if(circle.y>=box.breadth) {
    yVelocity = -5;
}

drawCircle();

我使用 50 毫秒的刷新率来运行循环以更新位置并绘制圆。 但是,当我通过减少刷新时间或增加速度来增加圆的速度时,会发生闪烁。此外,如果我增加速度,圆圈会在检测到碰撞之前超出范围。我用Turbo C写了这个程序。

我想知道如何提高帧速率以免出现闪烁。这个问题还有其他解决方案吗?

【问题讨论】:

    标签: c graphics game-physics frame-rate


    【解决方案1】:

    减少闪烁的一种方法是将图形输出同步到监视器,并且仅当它处于垂直空白时才重新绘制它。

    另一种选择是使用后备缓冲区。您绘制到图形显示的副本中,完成后将其放在屏幕上。

    【讨论】:

    • 因为我使用的是简单的圆圈,所以我猜画起来并没有那么重。我还需要缓冲吗?另外我没有使用特殊的图形驱动程序(使用默认值)。我需要司机吗?
    • @SaurabhJinturkar:Turbo C 是一个非常古老的图形编程环境。如果您坚持这样做,是的,请始终使用后缓冲区,即使对于最简单的动画也是如此。
    • @rodrigo 您能否为我提供 C 中后缓冲的参考?还有哪些框架易于学习并且有大量文档?我对框架的使用知之甚少。
    • Here 是关于双缓冲的一些信息,但这是关于 VGA,而不是 Turbo C。这里还有一些关于此的内容:stackoverflow.com/questions/12428345/…
    【解决方案2】:

    当背景被擦除时会导致闪烁。

    解决方案是在不同的表面(后台缓冲区)上绘制,并且仅在完成后将其复制到显示/渲染缓冲区

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-01
      • 2015-07-15
      • 1970-01-01
      • 2010-09-16
      • 1970-01-01
      • 1970-01-01
      • 2011-03-27
      • 2021-05-23
      相关资源
      最近更新 更多