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

Pierwszy program

[kurs] Rozdział 3. Zapoznanie się z biblioteką SDL i jej podstawowymi funkcjami.

Pierwszy program

Po instalacji biblioteki możesz przystąpić do jej nauki. Początki mogą być dla Ciebie trudne i męczące, ale nie przejmuj się, weź się w garść i ucz się dalej, bo naprawdę warto znać taką bibliotekę jak SDL. Nie bój się, nie rzucę Cię od razu na głęboką wodę, więc kilka pierwszych programów będzie prostych - nie będą robiły za wiele. Pierwszy program utworzy okno i po 2 sekundach je zamknie. Oto kod źródłowy programu:

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

Objaśnienie kodu

#include <SDL.h>
  - na początku należy dołączyć do programu plik nagłówkowy biblioteki.

SDL_Surface * ekran = NULL;
 - w tym miejscu deklarujemy powierzchnię (ang. surface). Powierzchnia to fragment pamięci, który służy do operacji na grafice. W każdym programie aby np. wyświetlić jakiś obrazek musimy mieć odpowiednią zmienną tego typu. W każdym programie możemy deklarować tyle powierzchni ile chcemy, ale z umiarem, dlatego że każda zajmuje jakieś miejsce w pamięci. Im ich więcej, tym więcej pamięci zżera nasz program. Jeśli już zadeklarujemy powierzchnię możemy wczytać do niej plik graficzny i wykonywać na nim jakieś operacje (np. wyświetlić go) za pomocą odpowiednich funkcji. Tą powierzchnię nazwaliśmy ekran. W każdym programie powinna się znaleźć taka. Jest to główna powierzchnia, która reprezentuje okno aplikacji. Dobrze jest także na początku inicjować ją wartością 0 (czyli wpisujemy NULL) tak jak w powyższym przykładzie. Zmienna typu surface jest wskaźnikiem, dlatego wstępnie go inicjujemy liczbą 0.

Dalej mamy główną funkcję każdego programu - main(). W argumentach funkcji wpisujemy zmienną typu całkowitego oraz wskaźnik do tablicy. Przyjęło się, że będą nosić takie nazwy jak argc i args. Muszą być zawarte w argumentach funkcji main, gdyż bez tego nie skompilujemy programu. Owe argumenty to parametry wywołania, potrzebne gdy uruchamiamy nasz program z linii poleceń wraz z jakimiś argumentami.

SDL_Init( SDL_INIT_EVERYTHING );
 - tutaj inicjujemy SDL. Aby móc wykonywać funkcje SDL musimy najpierw to zrobić. W SDL-u prawie każda funkcja standardowa dla tej biblioteki ma na początku w nazwie SDL. Potem mamy _Init. Jest to skrót angielskiego słowa initiation, które oznacza inicjuj, więc łatwo to zapamiętać. W argumencie funkcji wpisane jest SDL_INIT_EVERYTHING. Argument ten jest wysyłany po to, aby przekazać programowi co chcemy dołączyć do biblioteki (to znaczy, czy chcemy korzystać z klawiatury, myszki, joysticka, napędu CD lub DVD, itd.). Powyższy argument przekazuje programowi procedurę dołączenia wszystkich możliwych rzeczy, z których można korzystać w programie. Owszem możemy zrezygnować z niektórych rzeczy uruchamiając tylko niektóre. Spójrz na przykład:

C/C++
SDL_Init( SDL_INIT_AUDIO );
//Tutaj pozwalamy korzystać programowi z dźwięku.
SDL_Init( SDL_INIT_CDROM );
//W tym przypadku program będzie korzystał z napędu. Ponieważ są to flagi możemy łączyć kilka wariantów stosując znak '|' tak jak jest to pokazane tutaj:
SDL_Init( SDL_INIT_CDROM | SDL_INIT_AUDIO );

ekran = SDL_SetVideoMode( 640, 480, 32, SDL_SWSURFACE );
 - tutaj robimy pożytek z bitmapy ekran. Możemy tu wczytać obrazek albo ustawić tryb wideo. Bitmapa ekran pełni główną rolę, więc nie wczytujemy tu pliku graficznego tylko ustawiamy tryb wideo, czyli co za tym idzie tworzymy okno. Aby to zrobić przypisujemy do bitmapy ekran tą funkcję. W argumentach funkcji mamy po kolei: szerokość okna (w kodzie jest 640, ale możesz wpisać tu dowolną liczbę, ale jeśli tworzysz grę to lepiej ustawić rozdzielczość zgodną ze standardami) wysokość okna (tak jak wyżej tutaj jest 480, ale możesz to zmienić) głębia kolorów (to zależy od tego jaką grę piszesz lecz większość wykorzystuje 32-bitową głębię) typ okna (w kodzie, który Ci podałem jest SDL_SWSURFACE co oznacza, że wszelkie dane dotyczące okna będą przechowywane w pamięci systemowej, ale oprócz tego są takie typy okna): SDL_HWSURFACE - tworzy okno w pamięci wideo (karty graficznej). SDL_ANYFORMAT - to jest tryb uniwersalny, komputer sam troszczy się o to jaka ma być głębia kolorów i jakie mają być ustawienia okna, jeśli nie wiesz jaki tryb masz wybrać to wybierz ten, ale pamiętaj, że i tak musisz wpisać opcjonalne ustawienie głębi kolorów.

SDL_DOUBLEBUF
 - dzięki temu trybowi możemy korzystać z podwójnego buforowania, co jest przydatne przy animacji i poruszaniu bitmap. SDL_FULLSCREEN - tryb pełnoekranowy, program rozszerza okno do rozmiarów monitora, a jeśli nie będzie to możliwe program wyświetli okno o rozmiarze takim jaki podałeś wcześniej w ustawieniach, lecz umieści je pośrodku ekranu, a po bokach będą znajdować się czarne paski. Przykładowo masz monitor 1280x1024, wpiszesz rozdzielczość - 320x240, a program nie będzie mógł tego rozszerzyć to zobaczysz czarne tło na całym ekranie, a pośrodku okno o rozmiarach 320x240. SDL_OPENGL - być może wiesz, a może i nie, SDL potrafi świetnie współpracować z OpenGL-em, dzięki czemu programowanie w OGL będzie łatwiejsze. Na razie jednak uczysz się SDL-a, a nie OpenGL-a, więc być może pokaże Ci na koniec kursu jak zacząć korzystać z tej funkcji.

SDL_RESIZABLE
 - dzięki temu możemy stworzyć rozszerzalne okno, być może kiedyś Ci się przyda.

SDL_NOFRAME
  - tworzy okno, które nie ma belki z przyciskami (minimalizuj, maksymalizuj, zamknij) i tytułem. W oknie tym nie ma także ramki i bocznych przycisków do przewijania programu i rozszerzania okna. Okno zbudowane jest tylko z obszaru roboczego. Czasami się przydaje.

SDL_Flip( ekran );
 - potem tą funkcją uaktualniamy ekran. Jeśli napiszesz program, który będzie wyświetlał obraz, ale nie użyjesz tej funkcji to nie zobaczysz obrazka. W argumencie funkcji wpisujemy nazwę powierzchni, którą chcemy uaktualnić.

SDL_Delay( 2000 );
 - ta funkcja zatrzymuje program na pewien czas. Gdybyś usunął tą funkcję program by się włączył i od razu wyłączył, przez co nie zobaczyłbyś okna. W argumencie funkcji podajemy czas w milisekundach. Program zatrzyma się na 2000 milisekund, czyli 2 sekundy. Oczywiście możesz wpisać tam co chcesz.

SDL_Quit();
 - tą funkcją kończymy pracę biblioteki.
Po zakończeniu programu zwracamy wartość 0. Zero stosowane jest, aby poinformować system, że program dobrze działał i nie było błędów. No i to wszystko. Następna lekcja będzie jeszcze przyjemniejsza. Nauczysz się wyświetlać obrazki.
Poprzedni dokument Następny dokument
Wstęp Trochę więcej o sprite'ach