Witam w drugiej części kursu biblioteki allegro. W poprzedniej części omawiałem między innymi, jak zainstalować allegro?
W tej części omówię jak wczytywać i rysować na ekranie bitmap, jak obsługiwać klawiaturę oraz, jak odtwarzać dżwięki?
Bitmapy
Bitmapa to nic innego jak obrazek z rozszerzeniem .bmp. Moźemy go wczytywać do pamięci RAM komputera a potem
obracać, rysować, skalować i co nam się tylko podoba :)
Obiekt BITMAP*
W allegro bitmapę reprezentuje struktura BITMAP* (koniecznie wskażnikowa!). To zawsze nią będziesz się
posługiwał kiedy będziesz chciał wczytać teksturę, tło, sprajta... o tym co to jest SPRAJT powiem póżniej
(jeśli nie moźesz się doczekać zjedż trochę niźej :P). No dobra, dość gadania... teraz postaramy się
wyświetlić na ekranie ten obrazek:

Kod programu wyświetlającego ten obrazek na ekranie podałem tutaj: http://nopaste.gamedev.pl/?id=2269
poniewaź na e-pomocnik.pl kod się rozjeźdźa :P
Tło juź mamy...
Wiem co sobie teraz myślisz
no, tak... tym sposobem moźna narysować tło dla naszej gry, ale co
z potworkami które będą chodzić po naszej mapie. Bitmapa jest prostokątna a mój potworek okrągły,
jak zrobić źeby wszystko wokół potworka było przeżroczyste? To wbrew pozorom wcale nie nie jest takie
trudne. Wystarczy, źe wszystko co ma być przeżroczyste na twojej bitmapie wypełnisz kolorem RGB(255, 0, 255)
czyli bardzo brzydkim róźowym i uźyjesz specjalnej funkcji... czas przejść do rzeczy, to jest nasz potworek:

To jest właśnie
SPRAJT! Teraz czas na kod (oczywiście linkowany z zewnątrz :) ) http://nopaste.gamedev.pl/?id=2270
Jak widać zamiast długiego
blit() uźyliśmy bardzo prostej funkcji
draw_sprite(), istnieją jeszcze inne
funkcje rysujące sparajty na ekranie, ale one są za długie i za trudne, lepiej uźywaj
draw_sprite() :)
Double-Bufering
Gdybyś chciał teraz przesunąć naszego potworka w inne miejsce w czasie rzeczywistym ekran zacząłby migać.
Oczywiście miganie ekranu w grach jest niedopuszczalne więc mądre głowy tego świata wymyśliły specjalną technikę
zwaną
Double-Bufering (po polsku - Podwójne buforowanie), brzmi grożnie, no nie? Pewnie jest trudne? Otóź
wcale nie. Technika ta polega na tym, źe zamiast rysować sprajty bezpośrednio na ekranie rysujemy je na specjalnie
do tego przygotowanej bitmapie wielkości ekranu i dopiero ją rysujemy na ekranie. Prawda, źe proste? :)
Teraz oczywiście kod: http://nopaste.gamedev.pl/?id=2271
OK, ekran nie miga :)
Pętla główna
W poprzednim listingu obiecałem, źe powiem co to jest pętla główna. Nic prostszego. Jest to pętla która trwa
przez cały okres działania naszej gry. W niej zawsze rysujemy nasze sprajty, tekstury, wczytujemy klawisze itp.
Dlaczego uźywamy tej pętli? Jak to dlaczego? Inaczej program sprawdziłbym klawisze i narysował wszystko tylko raz
po czym by się wyłączył. Budowę tej pętli pokazałem w ostatnim kodzie, ale pozostał jeszcze ten tajemniczy warunek :)
Jeśli chcesz wiedzieć co on oznacza - czytaj dalej.
[big]Klawiatura[/big]
Czym byłaby gra bez klawiatury? Nie moźna by było sterować naszymi ludkami ani nawet wyjść z gry!
Ale od czego mamy allegro? Wczytywanie klawiszy to najprostsza rzecz jaka istnieje w całym allegro.
Spotkałeś się juź z tym w przykładowym kodzie w punkcie na temat Double-Buferingu. Przejdżmy do rzeczy.
Za klawisze w allegro odpowiada tablica
key[]. Źeby sprawdzić czy wciśnięto jakiś klawisz musimy zrobić tak:
Kod
if(key[KOD_KLAWISZA]) Zrob_Cos();
W miejsce KOD_KLAWISZA wpisujemy oczywiście kod danego dla nas klawisza. Na przykład Escape ma kod 27.
Kod
if(key[27]) Zrob_Cos(); //Wciśnięto Escape
hmmm... trudno by było spamiętać wszystkie kody na klawiaturze. Na szczęście allegro ma asa w rękawie.
Otóź ma zdefiniowane specjalne FLAGI:
Kod
//Definicja flagi. Tutaj akurat klawisza Escape
#define KEY_ESC 27
Takie flagi o wiele łatwiej zapamiętać niź numery. Najpotrzebniejsze nam flagi to:
Litery od A do Z:
KEY_A... KEY_Z
Cyfry (te nad literami):
KEY_0... KEY_9
Cyfry (na klawiaturze numerycznej):
KEY_0_PAD... KEY_9_PAD
F1, F2 itd:
KEY_F1... KEY_F12
Escape, enter i spacja:
KEY_ESC, KEY_ENTER, KEY_SPACE
Kursory:
KEY_LEFT, KEY_RIGHT, KEY_UP, KEY_DOWN
Chyba nie muszę nic wyjaśniać. Te flagi bardzo łatwo zapamiętać :)
Dżwięk
W dzisiejszych czasach gracze stają się bardzo wymagający. Chcą mieć w grach dobrej jakości muzykę
i dżwięk. W tym tutorialu nie będę mówił jak tworzyć dżwięk tylko jak go odtwarzać w naszej grze.
Allegro oferuje niestety tylko obsługę nieskompresowanych formatów dżwięków typu .way lub .voc.
Źeby obsługiwać skompresowane formaty typu .mp3 lub .ogg trzeba posługiwać się zewnętrzną biblioteką.
Jak ją zainstalować i obsługiwać powiem kiedy indziej.
Obiekt SAMPLE*
Tak jak przy grafice posługiwaliśmy się obiektem BITMAP*, tak i teraz będziemy się posługiwać wskażnikowymi
obiektami SAMPLE*. Deklarujemy go tak samo jak bitmapę. Teraz czas na kod: http://nopaste.gamedev.pl/?id=2272
Wszystko wytłumaczyłem w komentarzach więc wszystko powinno być jasne :)
Koniec!
To juź drugi mój artykuł :) W następnym pokaźę obsługę myszki i pliki .dat.
Pozdrawiam, czytaj dalej moje artykuły :)
W razie jakichkolwiek sugestii pisz na mój e-mail - mikor3[MAłPA]gmail.com, bądż na Gadu-Gadu - 6695321