Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Allegro] Nie wyświetla wczytanego obrazka

Ostatnio zmodyfikowano 2012-10-06 10:53
Autor Wiadomość
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:
C/C++
#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();
P-66119
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).
P-66121
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.
P-66122
Gabes
» 2012-10-05 20:40:54
Daj na początku pętli głównej
clear_to_color( bufor, makecol( 10, 10, 10 ) );
 (czyszczenie ekranu podanym kolorem).
I zobacz stronę 
http://cpp0x.pl/forum/temat/?id=156
P-66123
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.
P-66124
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?
P-66145
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!?
P-66146
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...
P-66147
« 1 »
  Strona 1 z 1