Scot Temat założony przez niniejszego użytkownika |
[Allegro, C++] Problem z podwójnym buforowaniem » 2010-06-28 14:27:00 A wiec tak jak w temacie mam problem z podwójnym buforowaniem . Problem mój polega na tym , iz w wiekszosci kursow pokazane jest jak uzyc go w takiej postaci : bufor + postać . Mi zależny na tym , by dowiedzieć się jak użyć go w takim przypadku by postać była wyświetlana na bitmapie stworzonej przez mnie , nie na buforze . Tak wygląda mój aktualny kod : #include <allegro.h> int main() { allegro_init(); install_keyboard(); set_color_depth( 16 ); set_gfx_mode( GFX_AUTODETECT, 1200, 800, 0, 0 ); clear_to_color( screen, makecol( 128, 128, 128 ) ); BITMAP * tor = NULL; BITMAP * bufor = NULL; BITMAP * car = NULL; tor = load_bmp( "tor.bmp", default_palette ); if( !tor ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); allegro_message( "Nie mogę zaladowac tor.bmp !" ); allegro_exit(); return 0; } bufor = create_bitmap( 1100, 750 ); if( !bufor ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); allegro_message( "Nie mogę utworzyć bufora !" ); allegro_exit(); return 0; } car = load_bmp( "car.bmp", default_palette ); if( !car ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); allegro_message( "nie mogę załadować car.bmp !" ); allegro_exit(); return 0; } int car_x = 100, car_y = 100; while( !key[ KEY_ESC ] ) { if( key[ KEY_LEFT ] ) car_x--; if( key[ KEY_RIGHT ] ) car_x++; if( key[ KEY_UP ] ) car_y--; if( key[ KEY_DOWN ] ) car_y++; clear_to_color( bufor, makecol( 150, 150, 150 ) ); masked_blit( car, bufor, 0, 0, car_x, car_y, car->w, car->h ); blit( bufor, screen, 0, 0, 0, 0, 1200, 800 ); } destroy_bitmap( car ); destroy_bitmap( bufor ); allegro_exit(); return 0; } END_OF_MAIN();
Prosiłbym by ktoś go poprawił , ponieważ na tym przykładzie prawdopodobnie najłatwiej było by mi go zrozumieć. |
|
ison |
» 2010-06-28 15:25:04 mógłbyś jasniej przedstawić swój problem? Twój kod działa bez zarzutów... wszystko co chcesz aby było wyświetlane najpierw rysujesz na buforze a potem cały bufor wywalasz na ekran i jeszcze taka mała sugestia zamiast zrób int depth = desktop_color_depth(); if( depth == 0 ) depth = 32;
set_color_depth( depth );
ponieważ w twoim programie na viście jest wyłączane Aero podczas działania programu |
|
Scot Temat założony przez niniejszego użytkownika |
» 2010-06-28 15:29:46 Chodzi mi o to , ze car.bmp wyświetlany jest na buforze , a chce by byl wyswietlany na tor.bmp i nie umiem tego pogodzić , albo nie widzę car.bmp , albo się rozmazuje , albo mryga itp . |
|
ison |
» 2010-06-28 15:39:30 to najpierw rysujesz tor na buforze i potem car na buforze masked_blit( tor, bufor, 0, 0, 0, 0, tor->w, tor->h ); masked_blit( car, bufor, 0, 0, car_x, car_y, car->w, car->h ); blit( bufor, screen, 0, 0, 0, 0, bufor->w, bufor->h );
zmień też set_gfx_mode( GFX_AUTODETECT, 1200, 800, 0, 0 );
na set_gfx_mode( GFX_AUTODETECT_WINDOWED, 1200, 800, 0, 0 );
bo w twoim programie na Viście przed odpaleniem gry okienko troche miga jeśli już się zabierasz za robienie gry to polecam przeczytać jakiś tutorial o timerach. Są bardzo ważne, dzięki nim na każdym komputerze twoja gra będzie chodziła z taką samą szybkością. |
|
Scot Temat założony przez niniejszego użytkownika |
» 2010-06-28 15:58:33 Wielkie dzięki , właśnie o to mi chodziło . Co do windowed to zapomniałem zmienić bo wcześniej tak miałem . Jeszcze raz wielkie dzieki . Temat do zamknięcia . |
|
« 1 » |