Wyświetlanie bitmap [allegro]
Ostatnio zmodyfikowano 2010-01-24 00:48
Sajan Temat założony przez niniejszego użytkownika |
Wyświetlanie bitmap [allegro] » 2010-01-23 17:02:06 Chciałbym aby po naciśnięciu jakiegoś przycisku wyświetlała się dana bitmapa, a po kolejnym naciśnięciu, wyświetlała się znowu ta sama(w innym miejscu), ale jednocześnie ta pierwsza nie znikała. Do tego chyba trzeba użyć tablic, ale nie wiem dokładnie jak to zrobić do tego przykładu. Proszę o wytłumaczenie lub ewentualnie kawałek kodu. |
|
dmx81 |
» 2010-01-23 21:24:52 czyli kazda bitmapa bedzie osobnym obiektem, ale bedzie pokazywala ten sam obrazek... jesli znasz ilosc obrazkow, jakie chcesz wyswietlic (oczywiscie tych samych) to mozna zadeklarowac kazdy z nich i wczytac do nich bitmape, a pozniej kolejno wyswietlac na bufor, ten z kolei na ekran, ewentualnie od razu na ekran - wiadomo, kodu gotowego nikt nie poda, ewentualnie pomoze w znalezieniu bledow. ja bym proponowal utworzenie petli (z jakims warunkiem wyjscia,np key[KEY_ESC]lub poprostu zakonczyc funkcje po wyswietleniu ostatniego obrazka, a w petli: wyswietl bitmape blit(obrazek1.....), readkey(); blit(obrazek2.....) itd.
BITMAP *ludek111 = NULL; ludek111 = load_bmp("ludek000.bmp",default_palette); BITMAP *ludek222 = NULL; ludek222 = load_bmp("ludek000.bmp",default_palette);
no i blit - w roznych miejscach na ekranie...
itd, w zaleznosci ile potrzeba obiektow, nie probowalem jeszcze z dynamicznym przydzielaniem pamieci - w przypadku, jesli sie nie zna ilosci obiektow, jakie maja sie pokazac. ja nie jestem nauczycielem,lecz uczniem na tym forum ;) wiec jesli cos nie tak napisane, prosze o poprawe :) |
|
Sajan Temat założony przez niniejszego użytkownika |
» 2010-01-23 22:18:33 Ale mi właśnie chodzi o to, abym nie musiał wczytywać każdej bitmapy. A co jak będzie ich kilkadziesiąt? Albo żeby użytkownik sam ustalał ich ilość? Myślałem właśnie żeby to zrobić w tablicy... BITMAP * nazwa[ i ];
nazwa[ i ] = load_bitmap(...); for(...);
if( key[ KEY_...) { blit( nazwa[ i ], screen,...); }
... tylko właśnie nie wiem dokładnie jak czy tak będzie działać. Kolejne bitmapy miałyby nazwy: "nazwa0, nazwa1, nazwa2" itd, ale całość jako tablica byłaby ładowana tylko raz. |
|
malan |
» 2010-01-24 00:48:59 Ja tutaj bym zastosował strukturę + std::vector: struct sBitmaps { BITMAP * bmp; int pozX; int pozY; int szer; int wys; };
std::vector < sBitmaps > vBitmap;
Następnie piszesz funkcję, która doda do tablicy vBitmap element i wyświetlasz mniej więcej tak: for( int i = 0; i < vBitmap.size(); i++ ) masked_blit( vBitmap[ i ].bmp, 0, 0, vBitmap[ i ].pozX, vBitmap[ i ].pozY, vBitmap[ i ].szer, vBitmap[ i ].wys );
Oczywiście wcześniej wczytujesz nazwy bitmap do wyświetlenia (np. z pliku) itp., a tą funkcję dodania elementu do tablicy wywołujesz po naciśnięciu klawisza. pozX i pozY możesz wylosować funkcją rand(). Po wyświetleniu (jeśli nie czyścisz bufora) możesz usunąć wyświetloną bitmapę z tablicy ( erase). ... ale to tylko pomysł :). |
|
« 1 » |