2011-09-07 84 views
0

即时通讯试图做一个简单的程序,有一个BITMAP是“背景”,另一个BITMAP,我可以移动,我尝试了不同的方式,如直接绘制背景屏幕,尝试制作两个缓冲区,两个BITMAPS在一个缓冲区中。现在即时运行程序与两个在循环中调用两次缓冲区。但可移动的BITMAP闪烁。Allegro C++;闪烁BITMAP

#include <allegro.h> 


int main(int argc, char *argv[]) 


{ 
allegro_init(); 
install_keyboard(); 
set_color_depth(16); 
set_gfx_mode(GFX_AUTODETECT, 640,480,0,0); 



BITMAP *my_pic = NULL; 
my_pic = load_bitmap("image.bmp", NULL); 
BITMAP *my_pics; 
my_pics = load_bitmap("picture.bmp", NULL); 
BITMAP *buffer = NULL; 
buffer = create_bitmap(640,480); 
BITMAP *bitty=NULL; 
bitty = create_bitmap(640,480); 





int my_pic_x = 0; 
int my_pic_y = 0; 
int my_pics_x=0; 
int my_pics_y=0; 

while(!key[KEY_ESC]) 
{ 


    if(key[KEY_RIGHT]) 
    { 
     my_pic_x ++; 
    } 
    else if(key[KEY_LEFT]) 
    { 
     my_pic_x --; 
    } 
    else if(key[KEY_UP]) 
    { 
     my_pic_y --; 
    } 
    else if(key[KEY_DOWN]) 
    { 
     my_pic_y ++; 
    } 

draw_sprite(bitty,my_pic,my_pic_x,my_pic_y);       
//draw_sprite(screen, my_pic, 0, 0); 
blit(bitty, screen, 0,0,0,0,640,480); 
clear_bitmap(bitty); 

draw_sprite(buffer,my_pics,my_pics_x,my_pics_y); 
blit(buffer, screen, 0,0,0,0,640,480); 
clear_bitmap(buffer); 




} 


destroy_bitmap(my_pic); 
destroy_bitmap(my_pics); 
destroy_bitmap(buffer); 
destroy_bitmap(bitty); 
return 0; 
} 
END_OF_MAIN() 

回答

1

你有这样的作品代码:

// draw the my_pic sprite to bitty 
draw_sprite(bitty,my_pic,my_pic_x,my_pic_y); 
// status now: bitty contains my_pic 

// draw bitty to the screen 
blit(bitty, screen, 0,0,0,0,640,480); 
// status now: screen contains my_pic by way of bitty 

// clear bitty 
clear_bitmap(bitty); 
// status now: screen contains my_pic by way of a former 
// version of bitty, bitty is now empty 

// draw my_pics to buffer 
draw_sprite(buffer,my_pics,my_pics_x,my_pics_y); 
// status now: screen contains my_pic, bitty is empty, 
// buffer contains my_pics 

// draw buffer to the screen 
blit(buffer, screen, 0,0,0,0,640,480); 
// status now: screen and buffer both contain my_pics, 
// bitty is empty 

// clear the buffer 
clear_bitmap(buffer); 
// status now: 
// 
// screen contains my_pics 
// bitty and buffer are empty 

我可以想象你想要更多的东西一样:

// clear buffer 
clear_bitmap(buffer); 
// status now: buffer is empty 

// draw my_pic to buffer 
draw_sprite(buffer,my_pic,my_pic_x,my_pic_y); 
// status now: buffer contains my_pic 

// draw my_pics to buffer 
draw_sprite(buffer,my_pics,my_pics_x,my_pics_y); 
// status now: buffer contains my_pic, with my_pics on top 

// copy buffer to the screen 
blit(buffer, screen, 0,0,0,0,640,480); 
// status now: buffer and screen contain my_pic, with my_pics on top 
+0

天啊!!!!谢谢你,先生!它的工作和它的真棒!感谢所有的评论让我明白了我的错误。 –