如何在Graphics.h中使用swapbuffers

时间:2016-03-29 14:10:08

标签: c++ visual-studio-2015 double-buffering winbgi

所以我在这段代码中使用swapbuffers来刷新它:

Concrete { name: 'Concrete' } 'Concrete'

所以我在绘图程序结束时使用它,然后是一个清晰的设备。 当播放动画或在背景中绘制某些东西(被删除)时,这种方式会起作用。我不明白我应该如何使用它。我知道它用于双缓冲,并且它应该用旧的替换预生成的下一帧但是在任何地方我看起来都很难解释。 我如何有效地使用swapbuffers,以便我可以播放动画并在背景中绘制内容(就像我的程序应该在玩家离开点击时做的那样)而不会消失?

我正在使用此网站的图书馆http://winbgim.codecutter.org/

1 个答案:

答案 0 :(得分:0)

我不确定您正在使用哪些库,但是从您调用的函数的名称来看,在使用前缓冲区交换后缓冲区后,您似乎正在清除颜色缓冲区。我认为这不会起作用。此外,我还假设setbkcolor函数设置将用于清除颜色缓冲区的颜色。我习惯做实时图形的方式是这样的:

repeat {
    // check for and handle user input
    // set background color
    // clear color buffer
    // update scene information
    // render the new scene
    // swap the buffers
}

但是,在您的代码中,您似乎在交换后立即清除了颜色缓冲区,您的循环应该如下所示(更改已标记为注释):

while (1) {
    setbkcolor(9);
    cleardevice(); // line of code added
    ytotal = 0;
    diffx = mousex() - gridposx;
    while (gridposx < mousex()&&diffx>=70) {
        gridposx += 70;

    }
    while (gridposx > mousex()&&diffx<=-70 + distanceFromMouse) {
        gridposx =gridposx-70;

    }
    diffy = mousey() - gridposy;
    while (gridposy < mousey() && diffy >= 70) {
        gridposy += 70;

    }
    while (gridposy > mousey() && diffy <= -70+distanceFromMouse) {
        gridposy = gridposy - 70;

    }
    while (ytotal < 900) {
        drawGridOnX(xtotal, ytotal);
        ytotal += 70;
    }
    if (WM_LBUTTONDOWN) {
        levelcode[gridposx/70][gridposy/70][0]=1;
        printf("CLICK");
    }
    decodelevelAndDraw();
    readimagefile("question.bmp", gridposx,gridposy, 70+gridposx, 70+gridposy);
    printf("gridposx:%d\tgridposy:%d\ttitlenumberx:%d\ttitlenumbery%d",gridposx,gridposy,gridposx/70,gridposy/70);
    swapbuffers();
    // cleardevice(); // line of code removed
}

编辑:我忘了解释这些变化。你这样做的方式,每次渲染帧并向用户显示时,它都会被cleardevice调用立即删除。通过将cleardevice调用移动到循环的开头,可以在渲染之前清除旧框架并显示新框架。我必须承认,这主要是我的猜测,因为我不知道你正在使用哪些库。