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

[Allegro] Problem z gra

Ostatnio zmodyfikowano 2009-08-21 18:00
Autor Wiadomość
kampar
Temat założony przez niniejszego użytkownika
[Allegro] Problem z gra
» 2009-08-20 09:26:52
Witam probuje napisac gre RPG (:)) i mam problem z tym fragmentem kodu:
C/C++
BITMAP * miecz1 = NULL;

void laduj_itemy()
{
    miecz1 = load_bmp( "grafika/miecz1.bmp", default_palette );
};

BITMAP * czysta = NULL;

void laduj_czysta()
{
    czysta = load_bmp( "grafika/czysta.bmp", default_palette );
};

BITMAP * nazwa1;

void zmienne()
{
    nazwa1 = czysta;
};

void wyswietl_itemy()
{
    masked_blit( nazwa1, bufor, 0, 0, 564, 10, nazwa1->w, nazwa1->h );
};
/////////////////////////////
int main()
{
    allegro_init();
    install_keyboard();
    set_color_depth( 16 );
    set_gfx_mode( GFX_AUTODETECT, 640, 480, 0, 0 );
    install_mouse();
   
    bufor = create_bitmap( 640, 480 );
   
    laduj_czysta();
    zmienne();
    laduj_itemy();
   
    while( !key[ KEY_ESC ] )
    {
        //...
        wyswietl_itemy();
        //...
    }
    show_mouse( NULL );
    destroy_bitmap( miecz1 );
    destroy_bitmap( nazwa1 );
    destroy_bitmap( czysta );
    allegro_exit();
    return 0;
}
END_OF_MAIN();
Niby wszystko dobrze sie kompiluje, program też wlasciwie dobrze dziala, tylko po wylaczeniu wyswietla sie blad (Wystapil problem z aplikacja ble ble i musiala zostac zamknieta...) Dlaczego tak sie dzieje?

Niewiem czy zrozumieliscie sens tego kodu
Na poczatku laduje obrazki wszystkich itemow do ich nazw(miecz1, miecz2..), potem tworze Bitmapy tyle ile jest okienek w eq (nazwa1,nazwa2...) tworze bitmape czysta, i wczytuje w nia caly rozowy obrazek wielkosci itemow, nastepnie chce aby bitmapy nazwa1(i inne) na poczatku wyswietlaly pusty obrazek (czysta) a potem dowolnie przypisuje do nazwa1, nazwa2... obrazki itemow (miecz1) , a potem jesli chce aby itemy znikly z eq znowu  przypisuje do nazwy1 czysta.
Troche to skomplikowane, ale mam nadzieje ze zrozumieliscie

Z gory dziekuje za wszystkie odpowiedzi
P-9644
DeBugger
» 2009-08-20 11:41:29
Ja nie wiem czy to pomoze, ale jezeli wczytujesz do jednej bitmapy wiecej grafik, do przed kazdym wczytaniem niszcz poprzednia (destroy).
P-9646
DejaVu
» 2009-08-20 17:54:57
C/C++
if( miecz1 ) destroy_bitmap( miecz1 );

if( nazwa1 ) destroy_bitmap( nazwa1 );

if( czysta ) destroy_bitmap( czysta );
P-9657
kampar
Temat założony przez niniejszego użytkownika
» 2009-08-20 18:32:56
Czyli za kazdym razem bede musial tworzyc bitmape, potem ja niszczyc, a potem znow tworzyc ta sama bitmape? Hmm, to troche komplikuje sprawe...
P-9661
DejaVu
» 2009-08-20 19:13:52
C/C++
int * zmienna = NULL;
delete zmienna;
Aplikacja się wywali. To samo zachodzi w Twojej aplikacji.
P-9662
kampar
Temat założony przez niniejszego użytkownika
» 2009-08-21 07:41:31
hm nadal troche nie rozumiem bledu w moim programie. Przecierz na razie nie wczytuje kilku grafik do jednej bitmapy. Po prostu tworze czysta laduje do niej grafike, tworze nazwa1 i przypisuje do niej czysta, a potem tylko wyswietlam nazwa1. I ktora bitmape mam usunac nazwa1? napewno nie .To wiec  moze czysta? Probowalem i na miejscu nazwy1 pojawily sie jakies rozmazane obrazki. To wiec co mam zrobic (narazie przypisywanie do nazwy1 obrazkow itemow sobie odpuscmy puzniej bede sie tym martwil).
P-9672
DejaVu
» 2009-08-21 12:10:56
Jeśli aplikacja wysypuje się przy zamknięciu to oznacza to, że błąd jest poza pętlą while(). Są bardzo rzadkie przypadki, gdzie mógłby wystąpić wcześniej w podanych okolicznościach, jednak prawdopodobieństwo wystąpienia takiego zdarzenia jest bliskie zeru. Tak więc skoncentruj się na kodzie, który jest poza pętlą. Na początek możesz go całego wykomentować i sprawdzić czy aplikacja dalej się wysypuje.
P-9677
kampar
Temat założony przez niniejszego użytkownika
» 2009-08-21 12:39:31
problem tkwi w niszczeniu bitmap:
po petli while niszcze wszystkie bitmapy, a blad wywala sie przy niszczeniu wszystkich nazw (nazwa1, nazwa2...), gdy je wykomentowalem wszystko dzialalo, powodem tez moze byc funkcja zmienne w ktorej przypisuje do nazw czysta, gdy ja wykomentowalem (ale juz niszczenie nie) program sie nie wywalal. Czy moge calkowicie wywalic niszczenie tych bitmap z mojego programu?
P-9680
« 1 » 2
  Strona 1 z 2 Następna strona