由于没有帧后缓冲器,清除屏幕会导致闪烁

时间:2012-12-02 08:03:46

标签: c graphics drawing

嘿伙计们我正在编写一个使用一些程序集和C的原始类型板,考虑将该板作为旧学校黑白游戏的aKin。

我在编写游戏时遇到问题,因为没有后备缓冲。当我清除屏幕时,它会直接绘制到屏幕上,以便屏幕真正被清除,从而使我绘制的任何内容都不可见,因为它会在下一次传递中立即被清除。因此,不是用新绘制的屏幕替换绘制的屏幕,而是清除屏幕然后绘制它。

我想出了一个hackish解决方案,我将渲染限制为每秒10帧。 我这样做的方法是清除屏幕,绘制形状,然后在1/10秒内刻录一个循环。这样,绘制的任何内容都将保持更长时间,并且可以更长时间显示,允许用户在立即擦除之前查看它。 即。

while (1)
{
    doRender = 1;
    screen_clear();
    draw_circle(x,y,20,1);
    while(doRender)
    {
                // a interrupt will set doRender to 0, thus ending the loop
    }
}

这个有效!!它会产生一种闪烁,而不是可怕,但可以肯定。我的游戏不需要令人难以置信的帧速率,每秒10秒。

有没有人能更好地解决我的问题?

2 个答案:

答案 0 :(得分:1)

你的解决方案很好。尝试通过仅清除绘制圆圈的区域来优化它。

答案 1 :(得分:1)

您也可以使用XOR渲染。例如:你将你的精灵XOR渲染到屏幕上进行渲染,然后在下一帧XOR它再次在同一个地方移除它并将它在新的地方进行异或。

你能等待vsync吗?如果您的绘图足够快,您可以在垂直空白间隔期间执行此操作,从而消除任何剩余的闪烁。