TNTeener Temat założony przez niniejszego użytkownika |
[Allegro] Nie wyświetla wczytanego obrazka » 2012-10-05 20:30:27 Cześć, znowu ja. Tym razem chodzi o czarny obraz. Kod piszę na podstawie kursu. Mam tam wgrane tekstury wszytko załączone. Nie mam żadnych błędów a zamiast wyświetlać mój samochód - całe czarne. Dodam że odkąd nie zanimowałem ruchu i nie dodałem podwójnego buferowania było wszystko dobrze. Oto kodzik: #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, 640, 480, 0, 0 ); clear_to_color( screen, makecol( 10, 10, 10 ) ); install_timer(); install_int_ex( increment_speed, BPS_TO_TIMER( 80 ) ); BITMAP * bufor = NULL; BITMAP * ludek = NULL; BITMAP * ludek1 = NULL; BITMAP * ludek2 = NULL; BITMAP * ludek3 = NULL; bufor = create_bitmap( 800, 800 ); if( !bufor ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); allegro_message( "Nie moge utworzyc bufora !" ); allegro_exit(); return 0; } ludek = load_bmp( "ludek.bmp", default_palette ); ludek1 = load_bmp( "ludek01.bmp", default_palette ); ludek2 = load_bmp( "ludek02.bmp", default_palette ); ludek3 = load_bmp( "ludek03.bmp", default_palette ); int ludek_x = 100, ludek_y = 100; int frame = 0; while( !key[ KEY_ESC ] ) { while( speed > 0 ) { if( key[ KEY_LEFT ] ) ludek_x--; if( key[ KEY_RIGHT ] ) ludek_x++; if( key[ KEY_UP ] ) ludek_y--; if( key[ KEY_DOWN ] ) ludek_y++; speed--; frame++; if( frame > 80 ) frame = 0; rest( 10 ); } if( frame < 20 ) { draw_sprite( bufor, ludek, ludek_x, ludek_y ); } else if( frame >= 20 && frame < 40 ) { draw_sprite( bufor, ludek1, ludek_x, ludek_y ); } else if( frame >= 40 && frame < 60 ) { draw_sprite( bufor, ludek2, ludek_x, ludek_y ); } else if( frame >= 60 && frame < 80 ) { draw_sprite( bufor, ludek3, ludek_x, ludek_y ); } blit( bufor, screen, 0, 0, 0, 0, 640, 480 ); } destroy_bitmap( ludek ); remove_int( increment_speed ); destroy_bitmap( ludek1 ); destroy_bitmap( ludek2 ); destroy_bitmap( ludek3 ); destroy_bitmap( bufor ); allegro_exit(); return 0; } END_OF_MAIN();
|
|
DejaVu |
» 2012-10-05 20:33:41 Jeżeli pliki z bitmapami są fizycznie na dysku we właściwym miejscu, to jedynym powodem dla którego mogą one nie działać jest zły format pliku. Zmiana rozszerzenia *.png na *.bmp nie załatwia sprawy. Trzeba uruchomić painta/gimpa i zapisać jako bitmapę 24 bitową (najlepiej bez wszelkich opcji kompresji - bo z takimi też się spotkałem). |
|
TNTeener Temat założony przez niniejszego użytkownika |
» 2012-10-05 20:36:24 Textura została zapisana w rozszerzeniu *.bmp więc nie wiem dlaczego nie działa. |
|
Gabes |
» 2012-10-05 20:40:54 |
|
DejaVu |
» 2012-10-05 20:42:00 Kod na pierwszy rzut oka wygląda ok, tj. 1. zmienne zainicjalizowane początkowymi wartościami we właściwych zakresach; 2. funkcje do wyświetlania bitmap na buforze są wywoływane (co prawda są warunki no ale powinny być one spełnione) 3. bufor jest wyświetlany na ekran Reasumując: nadal stawiam na zły format tekstur - wiele osób szło w zaparte, że NA PEWNO tekstura jest OK i wiele osób po długiej i bezsensownej pisaninie przyznawało się do błędu.
Jeżeli będziesz pewien, że wskaźniki na tekstury != NULL to wówczas będzie można szukać innej przyczyny błędu. |
|
TNTeener Temat założony przez niniejszego użytkownika |
» 2012-10-06 10:15:46 Teraz mi nie działa żadna textura. Zna ktoś może przyczyne?
|
|
wojownik266 |
» 2012-10-06 10:49:47 Spróbuj zmienić to bufor = create_bitmap( 800, 800 ); na To bufor = create_bitmap(640, 480 ); Napisz czy to coś pomogło!? |
|
TNTeener Temat założony przez niniejszego użytkownika |
» 2012-10-06 10:53:45 To samo.. EDIT: Rozwiązane. Nie użyłem masked_blit... |
|
« 1 » |