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

[Allegro 5]Problem z wyświetlaniem grafiki

Ostatnio zmodyfikowano 2014-06-21 21:09
Autor Wiadomość
Loodwin
Temat założony przez niniejszego użytkownika
[Allegro 5]Problem z wyświetlaniem grafiki
» 2014-06-21 12:18:22
Witam!
Otóż mam taki problem, że po prawidłowym skompilowaniu kodu wyskakuje okienko, że program przestał działać. Wiem, że coś złego jest w metodzie wyświetlającej, więc tylko takową wstawiam:
C/C++
void draw( ALLEGRO_BITMAP * bufor )
{
    al_set_target_bitmap( bufor );
    al_draw_bitmap( graphic, x, y, 0 );
}
Wywołuję ją tak:
C/C++
statek.draw( bufor );

Nie wiem czy dobrze myślę, ale chyba problem tkwi w przekazywaniu argumentów do tejże metody. Próbowałem już kilku rzeczy, ale nic właściwego nie przychodzi mi do głowy.

Z góry dziękuję za pomoc
P-112440
SeaMonster131
» 2014-06-21 12:21:49
Obstawiam, że po ustawieniu rysowania na bitmapie
bufor
, nie zmieniasz ustawienia rysowania z powrotem na "backbuffer".
P-112441
Loodwin
Temat założony przez niniejszego użytkownika
» 2014-06-21 12:28:37
W pętli głównej później zmieniam:
C/C++
while( !al_key_down( & key_state, ALLEGRO_KEY_ESCAPE ) )
{
    al_get_keyboard_state( & key_state );
    al_get_mouse_state( & mouse_state );
   
    al_set_target_bitmap( bufor );
    al_clear_to_color( al_map_rgb( 255, 255, 255 ) );
   
    statek.move( mouse_state.x, mouse_state.y );
   
    statek.draw( bufor );
   
    al_set_target_backbuffer( display );
    al_flip_display();
}

Tylko właśnie nie do końca rozumiem jak to zrobić bo ostatnio dopiero się uczę Allegro 5.
P-112442
Loodwin
Temat założony przez niniejszego użytkownika
» 2014-06-21 12:35:39
Dobra znalazłem gdzie jest błąd tylko nie wiem jak go rozwiązać. Okazuje się, że jest on w samym wywołaniu funkcji:
C/C++
al_draw_bitmap( graphic, x, y, 0 );
P-112444
SeaMonster131
» 2014-06-21 12:47:24
To może inaczej - w jakim celu w ogóle tworzysz dodatkową bitmapę bufor (Allegro5 ma "wbudowane" podwójne buforowanie)?
P-112445
Loodwin
Temat założony przez niniejszego użytkownika
» 2014-06-21 12:55:11
Właśnie tego się obawiałem. Cały czas wiedziałem, że tutaj jest coś na rzeczy. Mam nadzieję, że teraz łatwo to pójdzie. Tylko teraz mam pytanie: Czy w metodzie rysującej jako argument mam podać teraz ekran czyli tak:
ALLEGRO_DISPLAY * display
 i później wywołując ją tak samo jak wcześniej tylko zamiast bufora podawać ekran? Bo tak zrobiłem przed chwilą i jakoś nie chce za bardzo działać.
P-112446
SeaMonster131
» 2014-06-21 13:15:16
Za dużo kombinujesz. Wystarczy tak:

C/C++
al_clear_to_color()

al_draw_bitmap()

al_flip_display()
P-112447
Loodwin
Temat założony przez niniejszego użytkownika
» 2014-06-21 13:19:06
No dobrze, ale jeśli chcę wywoływać
al_draw_bitmap()
 w metodzie klasy. Teraz bardziej chodzi mi o to jak wyświetlić grafikę obiektu na ekran. Bo jeśli sam ekran został stworzony w funkcji main to jak odwołać się do niego w metodzie?
P-112449
« 1 » 2
  Strona 1 z 2 Następna strona