0

我遇到了问题,当我移动它们时,我的精灵会留下痕迹。尝试在每次刷新时绘制 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));

}

提前感谢您的帮助

4

1 回答 1

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. 重复
于 2012-06-06T03:46:16.447 回答