[英]Allegro c++; flashing BITMAP
我试图制作一个简单的程序,其中一个BITMAP是“背景”,另一个可以移动的BITMAP,我尝试了不同的方法,例如将背景直接绘制到屏幕上,尝试制作两个缓冲区,我尝试将两个BITMAPS放在一个程序中缓冲。 现在我正在循环中两次调用缓冲区中的两个程序来运行程序。 但可移动的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()
您拥有的代码如下所示:
// 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.