plik


Inicjalizacja i obsługa błędów Pierwsze co musisz zrobić, by skorzystać z biblioteki SDL, to oczywiœcie dołšczyć jej plik nagłówkowy, by zapoznać kompilator z zawartoœciš tej biblioteki: #include Program używajšcy SDL zaczyna się w normalnej, standardowej funkcji main ;-) Jest tak nawet gdy tworzysz projekt dla systemu Windows, bo wtedy SDL realizuje windowsowš funkcję WinMain gdzieœ w swoim wnętrzu. Takie rozwišzanie jest konieczne, by można było przenosić kod pomiędzy różnymi platformami systemowymi bez żadnych zmian [inne systemy niż Windows nie używajš przecież tej niestandardowej funkcji WinMain :-P]. #include //Tu zaczyna się nasz program używajšcy SDL int main() { //Tu będzie jego treœć... } Podsystemy biblioteki SDL Biblioteka SDL składa się z 8 podsystemów, z których każdy odpowiada za coœ innego. Przypomina tym trochę bibliotekę DirectX, jednak jak pewnie wiesz, sš między nimi pewne różnice ;-J Poniżej masz listę tych podsystemów wraz z opisem, czym się zajmuje każdy z nich: VIDEO Podsystem odpowiedzialny za wyœwietlanie grafiki 2D AUDIO Podsystem odpowiedzialny za podstawowš obsługę dŸwięku EVENTS Podsystem odpowiedzialny za obsługę zdarzeń CDROM Podsystem odpowiedzialny za odtwarzanie muzyki CD-Audio i obsługę CD-ROMu JOYSTICK Podsystem obsługi joysticka TIMER Podsystem odmierzania czasu THREADS Podsystem odpowiedzialny za obsługę wštków FILES Podsystem wejœcia/wyjœcia plikowego Prygotowanie do pracy Aby rozpoczšć zabawę z SDL, trzeba jš najpierw zainicjalizować [przygotować do pracy]. Zanim wywołasz jakškolwiek funkcję z biblioteki SDL, musisz więc najpierw wywołać funkcję SDL_Init, której nagłówek prezentuje się tak: int SDL_Init(Uint32 flags); Pozwala Ci ona wybrać podsystemy, z których masz zamiar korzystać i przygotowuje je do pracy. Automatycznie przygotowuje trzy podsystemy: EVENTS, THREADS i FILES. Możesz wybrać dodatkowe podsystemy, podajšc jej odpowiednie parametry, które poznasz lada moment. Jak widzisz, funkcja SDL_Init pobiera tylko jeden parametr, jednak jego typ może wydawać ci się dziwny :-P Biblioteka SDL wprowadza kilka nowych, własnych typów danych, by zapewnić jednakowy rozmiar danych w pamięci na różnych platformach. Typ Uint32 możesz rozumieć jako typ unsigned int z gwarancjš, że zajmie 32 bity w pamięci. Parametr ten służy głównie do wybierania, które podsystemy majš być dodatkowo zainicjalizowane, jednak ma też kilka innych możliwoœci. Możesz w nim przekazać jednš z poniższych stałych: SDL_INIT_VIDEO Podsystem graficzny SDL_INIT_AUDIO Podsystem dŸwięku SDL_INIT_TIMER Podsystem odmierzania czasu SDL_INIT_CDROM Podsystem obsługi CD-ROMu SDL_INIT_JOYSTICK Podsystem obsługi joysticka SDL_INIT_EVERYTHING Inicjalizuje wszystkie podsystemy SDL_INIT_NOPARACHUTE SDL nie będzie za ciebie obsługiwać wyjštków SDL_INIT_EVENTTHREAD Do odbierania zdarzeń zostanie utworzony osobny wštek Powyższe stałe sš flagami bitowymi, więc możesz je łšczyć operatorem |. Przykładowo inicjalizacja podsystemów VIDEO i TIMER mogłaby wyglšdać tak: SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER); Funkcja zwraca 0 gdy inicjalizacja się powiodła. W przeciwnym razie zwraca -1. Włšczanie/wyłšczanie podsystemów Czasami nie da się zainicjalizować od razu wszystkiego. Przykładowo chcesz najpierw wyœwietlić menu gry, z którego użytkownik wybierze czy chce skorzystać z joysticka. Dopiero wtedy można zainicjalizować podsystem joysticka. Co zrobić w takiej sytuacji? Jak uruchomić podsystem JOYSTICK, skoro funkcja SDL_Init była już wywołana?! :-/ Twórcy biblioteki przygotowali jš na takie sytuacje ;-) Możesz włšczyć dodatkowe podsystemy w póŸniejszym czasie. Służy do tego funkcja SDL_InitSubSystem i pobiera ona dokładnie te same parametry, co SDL_Init. Tak wyglšda jej nagłówek: int SDL_InitSubSystem(Uint32 flags); Gdy wszystko poszło dobrze, zwraca 0. W przypadku błędu zwraca -1. Gdy dany podsystem przestaje ci być potrzebny, możesz wyłšczyć tylko ten jeden podsystem, pozostawiajšc resztę. Robi się to funkcjš SDL_QuitSubSystem. Pobiera ona te same parametry, co poprzednie funkcje. Nie zwraca jednak żadnej wartoœci. To zresztš logiczne, bo jeœli chcesz wyłšczyć jakiœ podsystem i miałoby się to nie udać, naraziłoby cię na kolejne błędy :-P Musi się udać zawsze. void SDL_QuitSubSystem(Uint32 flags); Ostateczne zakończenie całego SDL wymaga funkcji SDL_Quit. Nie pobiera ona żadnych parametrów i nic nie zwraca. Zamyka ona wszystkie podsystemy [włšcznie z tymi trzema domyœlnymi] i zwalnia zasoby przydzielone dla SDL. Jej nagłówek to: void SDL_Quit(void); Tš funkcję będziesz wywoływać, gdy zechcesz zakończyć pracę z SDL. Jeœli obawiasz się, że zapomnisz po sobie posprzštać, możesz na przykład ustawić tš funkcję jako handler w wywołaniu atexit gdy tylko inicjalizacja SDL zakończy się sukcesem, np. tak: if ( SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO) < 0 ) { //Coœ poszło nie tak. Wyœwietl komunikat o błędzie i zakończ z kodem błędu cout << "Błšd inicjalizacji SDL!" << endl; return -1; } //Inicjalizacja się powiodła, więc ustawiamy handler atexit() atexit(SDL_Quit); Przy okazji warto zauważyć, że w systemie Windows bibliotka SDL przekierowuje standardowe kanały wyjœciowe do plików majšych nazwy stdout.txt i stderr.txt. Gdyby tak nie robiła, głupawy Windows tworzyłby ci dodatkowe okno konsoli gdy tylko coœ wypiszesz na stdout [ach te Windowsy.. ;-P]. Najdziwniejszš funkcjš inicjalizacji SDL jest SDL_WasInit. Sprawdza ona, które podsystemy zostały zainicjalizowane, a które nie. Oto jej nagłówek: Uint32 SDL_WasInit(Uint32 flags); Co ciekawe, możesz zapytać jš o konkretny zestaw podsystemów, podajšc odpowiednie flagi SDL_INIT_* w parametrze. Funkcja weŸmie te twoje flagi i sprawdzi tylko te podsystemy, o które pytasz. Jako wynik zwróci wartoœć, która jest połšczeniem flag bitowych tylko uruchomionych podsystemów, i tylko spoœród tych, o które pytasz. Najprostszy sposób użycia tej funkcji to pytanie o to, czy jeden konkretny podsystem już działa. Wykorzystujemy wtedy fakt, że jeœli żaden z podanych przez ciebie podsystemów nie pracuje, wynikiem funkcji będzie 0: if ( SDL_WasInit(SDL_INIT_AUDIO) ) //Podsystem AUDIO działa... else //Podsystem AUDIO nie działa... Obsługa błędów Wiele funkcji SDL w przypadku błędu zwraca po prostu -1. Ta wartoœć niewiele jednak mówi o przyczynie błędu. W tym celu istnieje funkcja SDL_GetError. bla bla bla #include #include using namespace std; int main() { cout << "Startujemy SDL..." << endl; // Przygotuj podsystemy: domyœlne, VIDEO i AUDIO. if ( SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO) < 0 ) { cout << "Błšd inicjalizacji SDL: " << SDL_GetError() << endl; return -1; } cout << "SDL gotowy do pracy!" << endl; // Tu będzie normalne działanie programu... cout << "Kończymy pracę SDL..." << endl; // Wyłšczamy wszystkie podsystemy SDL. SDL_Quit(); cout << "Program zakończony" << endl; }

Wyszukiwarka

Podobne podstrony:
BIBLIOGRAFIA
Bibliografia dzieł Włodzimierza Ilicza Lenina
Biblioteka PHP Wysyłanie pliku na serwer
sdl
Bibliotekarka
Biblioterapia bibliografia
czy warto miec biblioteczke krĂłtkie wypracowanie
Posacki A Techniki psychosomatyczne czy duchowe inicjacje
BIBLIOGRAFIE REGIONALNE
SZCZEGUŁOWA INSTRUKCJA OBSŁÓGI ZEGARKÓW CASIO
BIBLIOGRAFIA
Gene Sharp Bibliography
biblio (3)
BIBLIOGRAPHY#2 Ignatius of Antioch & the Church of the Martyrs
bibliografia mp

więcej podobnych podstron