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

Wyświetlanie bitmap [allegro]

Ostatnio zmodyfikowano 2010-01-24 00:48
Autor Wiadomość
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.
P-13243
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 :)
P-13256
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...
C/C++
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.
P-13257
malan
» 2010-01-24 00:48:59
Ja tutaj bym zastosował strukturę + std::vector:
C/C++
// Tworzymy strukturę
struct sBitmaps
{
    BITMAP * bmp; // Bitmapa do wyświetlenia
    int pozX; // Pozycja wyświetlenia (x)
    int pozY; // Pozycja wyświetlenie (y)
    // ...ewentualnie
    int szer; // Szerokość bitmapy
    int wys; // Wysokość bitmapy
};

std::vector < sBitmaps > vBitmap; // Dynamiczna tablica
Następnie piszesz funkcję, która doda do tablicy vBitmap element i wyświetlasz mniej więcej tak:
C/C++
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ł :).
P-13259
« 1 »
  Strona 1 z 1