Tombol Temat założony przez niniejszego użytkownika |
[Allegro] Podwójne Buforowanie nic nie daje » 2008-09-30 15:49:34 Mam problem chce zrobić po prostu wyświetlanie obrazka i on migocze niestety podwójne buforowanie nic nie daje :/ Jeżeli jest potrzeba mogę podać kod ale nie wiem czy on będzie potrzebny mam prawie wszystko identyczne jak w turtoalu :/ Chce wyświetlić 2 obrazki jak wyświetlam 1 to all jest ok ale jak już 2 to migoczą ;/ |
|
lynx |
Kod » 2008-09-30 15:54:17 To daj zerknąć na kod, może coś wymyślimy. ;P |
|
Tombol Temat założony przez niniejszego użytkownika |
» 2008-09-30 16:03:04 #include <allegro.h> volatile long speed = 0; void increment_speed() { speed++; } END_OF_FUNCTION( increment_speed ); LOCK_VARIABLE( speed ); LOCK_FUNCTION( increment_speed ); int main() { allegro_init(); install_keyboard(); set_color_depth( 16 ); set_gfx_mode( GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0 ); clear_to_color( screen, makecol( 0, 0, 0 ) ); install_timer(); install_int_ex( increment_speed, BPS_TO_TIMER( 100 ) ); BITMAP * statek = NULL; BITMAP * pocisk = NULL; BITMAP * bufors = NULL; BITMAP * buforp = NULL; bufors = create_bitmap( 640, 480 ); if( !bufors ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); allegro_message( "Nie mogę utworzyć bufora statek !" ); allegro_exit(); return 0; } buforp = create_bitmap( 640, 480 ); if( !buforp ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); allegro_message( "Nie mogę utworzyć bufora pocisk !" ); allegro_exit(); return 0; } statek = load_bmp( "statek.bmp", default_palette ); if( !statek ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); allegro_message( "nie mogę załadować obrazka statek!" ); allegro_exit(); return 0; } int statek_x = 0, statek_y = 0; int pocisk_x = 0, pocisk_y = 0; while( !key[ KEY_ESC ] ) { while( speed > 0 ) { if( key[ KEY_LEFT ] ) statek_x--; if( key[ KEY_RIGHT ] ) statek_x++; if( key[ KEY_A ] ) pocisk_y--; speed--; } pocisk = load_bmp( "pocisk.bmp", default_palette ); if( !pocisk ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); allegro_message( "nie mogę załadować obrazka pocisk!" ); allegro_exit(); return 0; } masked_blit( statek, bufors, 0, 0, statek_x, statek_y, statek->w, statek->h ); masked_blit( pocisk, buforp, 0, 0, pocisk_x, pocisk_y, pocisk->w, pocisk->h ); blit( bufors, screen, 0, 0, 0, 0, 640, 480 ); blit( buforp, screen, 0, 0, 0, 0, 640, 480 ); } remove_int( increment_speed ); destroy_bitmap( statek ); destroy_bitmap( pocisk ); destroy_bitmap( bufors ); destroy_bitmap( buforp ); allegro_exit(); return 0; } END_OF_MAIN(); Niestety w allegro siedzę dopiero kilka dni to nie za bardzo umiem coś zrobić ale jak ktoś mógł by mi powiedzieć jak zrobić żeby jak się naciśnie guzik to pocisk leci aż do samej góry ekranu i wtedy znika |
|
DejaVu |
» 2008-09-30 16:34:20 Wszystko powinno być rysowane w jednym buforze, który następnie jest kopiowany na ekran. Ty posiadasz dwa bufory, co jest błędne. Problem leży w poniższym kodzie: blit( bufors, screen, 0, 0, 0, 0, 640, 480 ); blit( buforp, screen, 0, 0, 0, 0, 640, 480 ); |
|
Tombol Temat założony przez niniejszego użytkownika |
» 2008-09-30 17:28:13 AAAAAAAA no spoko ale to by się przydało takie info do turtoala dopisać że może być tylko 1 bufor :P
To jeszcze bym prosił żeby ktoś mi wyjaśnił jak zrobić żeby pocisk leciał do końca ekranu potem znikł :P
|
|
DeBugger |
» 2008-09-30 18:15:45 Pomyślę nad tym pytaniem. Tylko uwaga odnośnie regulaminu. W jednym wątku może być jedno pytanie. |
|
grabon |
» 2008-09-30 19:16:09 Tak ogólnie to powinieneś również do pocisku dopisać przemieszczanie się w pozycji x zgodnie z ruchem statku w innym wypadku statek będzie na środku ekranu a, pocisk będzie wylatywał z boku ekranu. Teraz pocisk leci Ci do góry zgodnie z linią if( key[KEY_A]) pocisk_y--; Umieściłeś statek i pocisk w lewym górnym rogu ekranu, to gdzie ten pocisk ma Ci polecieć ? Co do znikania pocisku to poducz się C++. Ogólnie radzę zacząć od C++, bez tego co najwyżej przekopiujesz parę tutków i pozmieniasz w nich kilka lini kodu, to za mało jak na napisanie nawet najprostrzej gry. Tak jak wyżej, jeden wątek == jedno pytanie. |
|
DeBugger |
» 2008-09-30 19:48:11 |
|
« 1 » 2 |