Reputation: 3
im trying to make a simple program that has one BITMAP that is the "background" and another BITMAP that i can move, ive tried different ways, like drawing the background directly to screen, tried making two buffers, ive tried putting both BITMAPS in one buffer. right now im running the program with both in the buffer called twice in a loop. but the moveable BITMAP flashes.
#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()
Upvotes: 0
Views: 1680
Reputation: 100632
The code you have works like this:
// 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
I would imagine you'd want something more like:
// 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
Upvotes: 1