Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Autor: 'Rares'
http://rares.tk
Biblioteki C++

Wyświetlanie sprite'ów

[kurs] Rozdział 4. Wczytywanie i wyświetlanie grafiki 2D.

Wyświetlanie sprite'ów

Na poprzedniej lekcji mówiłem Ci, że do wyświetlania okna i grafiki w SDL-u musimy zadeklarować powierzchnię. Jest to zmienna taka jak każda inna, z tym że możemy ją wykorzystywać tylko do pewnych celów. Zmienna typu int służy przedewszystkim do przechowywania liczb i działania na nich, natomiast zmienna typu surface (powierzchnia) może pełnić funkcję związane z grafiką. Jakie to funkcje po części dowiesz się na tej lekcji. Kiedy mamy już taką zmienną możemy np. wyświetlić obrazek. Wczytujemy za pomocą odpowiedniej funkcji obraz do zmiennej i wyświetlamy go za pomocą innej. Obrazki 2D, które wyświetlamy w SDL-u i każdej innej bibliotece 2D nazywane są sprite'ami. Zanim napiszesz program przygotuj sobie obraz o rozdzielczości 640x480. Postaraj się, aby nie był jednokolorowy. Napisz tam coś lub narysuj - ważne, żeby coś było. Możesz skorzystać z pliku, który ściągnąłeś wraz z kursem. Znajduje się w katalogu "Lekcja 3" i nazywa się "obraz.bmp". Kod:

C/C++
#include <SDL.h>
SDL_Surface * ekran = NULL;
SDL_Surface * obraz = NULL;
int main( int argc, char * args[] )
{
    SDL_Init( SDL_INIT_EVERYTHING );
    ekran = SDL_SetVideoMode( 640, 480, 32, SDL_SWSURFACE );
    obraz = SDL_LoadBMP( "obraz.bmp" );
    SDL_BlitSurface( obraz, NULL, ekran, NULL );
    SDL_Flip( ekran );
    SDL_Delay( 2000 );
    SDL_Quit();
    SDL_FreeSurface( obraz );
    return 0;
}

Najpierw dołączamy SDL, potem deklarujemy powierzchnie od ekranu oraz wyświetlanego obrazu. Następnie funkcja główna, instalacja SDL-a, czyli wszystko co już znasz. Następne linijki należy omówić:

ekran = SDL_SetVideoMode( 640, 480, 32, SDL_SWSURFACE );
 - tworzenie okna

obraz = SDL_LoadBMP( "obraz.bmp" );
 - podobnie jak w tworzeniu okna zaczynamy od powierzchni, do której przypisujemy za pomocą znaku "=" funkcję. Nowa funkcja nazywa się SDL_LoadBMP. Jest to łatwe to zapamiętania, gdyż funkcja nosi taką nazwę, jak czynność, którą wykonuje. Load "ang. wczytaj, a BMP" jest to po prostu bitmapa. W nawiasach, czyli w argumencie funkcji podajemy nazwę pliku oraz (po kropce) jego rozszerzenie. W tym programie wczytujemy plik bmp, więc po kropce wpisujemy bmp. Nazwa i rozszerzenie muszą być podane w cudzysłowie.

SDL_BlitSurface( obraz, NULL, ekran, NULL );
 - kolejna nowa funkcja. Ta służy do kopiowania powierzchni na inną powierzchnię. W argumentach podajemy po kolei: obraz Najpierw podajemy, którą powierzchnię chcemy skopiować. NULL - tutaj ustalamy jaki fragment powierzchni chcemy skopiować. W tym programie kopiujemy całą bitmapę, więc wpisujemy NULL (czyli zero). Dokładnie o kopiowaniu fragmentów bitmapy napiszę na innej lekcji. ekran - podajemy miejsce docelowe bitmapy, czyli gdzie chcemy ją skopiować. NULL - w ostatnim argumencie ustalamy gdzie wkleić bitmapę. Kopiujemy i wyświetlamy ją na całym ekranie, więc tutaj wstawiamy NULL.

SDL_FreeSurface( obraz );
 - na koniec funkcja, która usuwa powierzchnię z pamięci. Free surface - oznacza "uwolnij" powierzchnię, czyli po prostu skasuj. W argumencie funkcji, podajemy nazwę powierzchni, której chcemy się pozbyć.

Jeśli jesteś bystry, to zauważyłeś, że definiowaliśmy dwie powierzchnie "ekran oraz obraz, a usunęliśmy tylko jedną z nich" obraz. Cała tajemnica polega na tym, że jest to powierzchnia software'owa. Spójrz tutaj:

C/C++
ekran = SDL_SetVideoMode( 640, 480, 32, SDL_SWSURFACE );
//Chodzi mi o to: SDL_SWSURFACE "po rozwinięciu" SDL_SoftWareSURFACE

Taka powierzchnia jest przechowywana w pamięci i jest automatycznie kasowana przez system, po zakończeniu programu, więc nie musimy się martwić o kasowanie jest z pamięci.
Poprzedni dokument Następny dokument
Pierwszy program Trochę więcej o sprite'ach