0

「背景」である 1 つの BITMAP と移動できる別の BITMAP を持つ単純なプログラムを作成しようとしています。背景を画面に直接描画するなど、さまざまな方法を試しました。2 つのバッファーを作成してみました。両方の BITMAP を 1 つにまとめてみました。バッファ。現在、ループ内で2回呼び出されたバッファ内で両方を使用してプログラムを実行しています。しかし、移動可能な 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() 
4

1 に答える 1

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
于 2011-09-07T03:10:51.540 に答える