快板,精灵留下痕迹

时间:2012-06-05 11:51:07

标签: allegro double-buffering

我遇到了问题,当我移动它们时,我的精灵会留下痕迹。 尝试在每次刷新时绘制BG,但随后它开始闪烁。

这就是我做的事情

// ...

int main(int argc, char *argv[])
{
    BITMAP *buffer = NULL;

    BITMAP *graphics = NULL; 
    buffer = create_bitmap(SCREEN_W, SCREEN_H);

    graphics = load_bitmap("my_graphics.bmp", NULL); 
        clear_to_color(screen, makecol(0, 0, 0));

    clear_to_color(buffer, makecol(0, 0, 0));

    while(!key[KEY_ESC]) 
    {

        // ...

        render_map(100,100);        

        // ...
    }
}

void render_map(int w, int h)

{
    // ...

    for(int i=0;i < w * h;i++)

    {
        masked_blit(graphics, buffer, 0, 0, pos_x, pos_y, 32, 32);  
    }

    // ...
        blit(buffer, screen, camera_x,camera_y,0,0,SCREEN_W, SCREEN_H);

    clear_to_color(buffer, makecol(0, 0, 0));

}

提前感谢您提供任何帮助

1 个答案:

答案 0 :(得分:0)

您的代码有点难以阅读,而且您遗漏了大部分内容。所以很难肯定地说,但这条线看起来很可疑:

blit(buffer, screen, camera_x,camera_y,0,0,SCREEN_W, SCREEN_H);

使用缓冲区时,通常会将其称为:

blit(buffer, screen, 0,0, 0,0, SCREEN_W,SCREEN_H);

这是您在屏幕上绘制的唯一时间。所以步骤是:

  1. 清除缓冲区(通过绘制背景图像,tileset,颜色等)
  2. 将所有内容绘制到缓冲区
  3. 将缓冲区复制到屏幕
  4. 重复