【问题标题】:Allegro, sprites leaving trail快板,精灵离开踪迹
【发布时间】:2012-06-05 11:51:07
【问题描述】:

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

}

提前感谢您的帮助

【问题讨论】:

    标签: allegro double-buffering


    【解决方案1】:

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

    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. 清除缓冲区(通过绘制背景图像、图块集、颜色等)
    2. 将所有内容绘制到缓冲区
    3. 将缓冲区复制到屏幕
    4. 重复

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-04
      • 2012-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多