1. diel - SDL - Úvod a inštalácia
V tomto seriáli sa pozrieme na multiplatformový knižnicu SDL (Simple Directmedia Layer), ktorá sa najčastejšie využíva k tvorbe hier. Knižnica poskytuje nízkoúrovňový prístup ku vstupno-výstupným zariadeniam vrátane 2D a 3D grafiky. 3D grafika je v SDL riešená volaním OpenGL funkcií. V tomto seriáli sa zameriame iba na 2D grafiku. Knižnica dokáže pracovať ako nad OpenGL, tak aj nad DirectX pri rovnakej syntax. Knižnica samotná obsahuje iba základnú funkcionalitu, zvyšok nájdeme v prídavných knižniciach (SDL_image, SDL_net, SDL_Sound). Viac na Wikipédii alebo stránkach knižnice.
SDL je knižnica vytvorená pre C, nevyužíva teda triedy ale iba štruktúry a globálne funkcie. Z tohto dôvodu neskôr siahneme po Wrapper pre C ++. Vďaka tomu budeme môcť využiť objektovo orientovaného programovania a typové kontroly, ktorá pre binding napríklad pre C# nie je možná (kvôli problémom s ukazovateľmi). Riešením by bolo využiť objektový wrapper pre binding, ale to už situáciu trochu komplikujeme.
Cieľom seriálu bude vytvoriť jednoduchú RPG hru, ktorú budeme postupne rozširovať. Zo začiatku sa pozrieme na základy (práca s oknami, vykresľovanie) a potom na samotnú hru. Ako budeme postupovať, bude sa projekt niekoľkokrát prerábať. Upozorňujem, že je to z dôvodov študijných. Pri práci na skutočné aplikácii by sa architektúra mala meniť čo najmenej.
Cieľom však nie je naučiť programovanie v C ++. V texte budem predpokladať znalosť základných konštrukcií C ++ (vrátane aritmetiky s ukazovateľmi), objektovo orientovaného programovania a v ďalších dieloch i znalosť STL - štandardné šablónové knižnice (Standart Template Library). Tutoriál pre základné konštrukcie môžete nájsť tu, pokročilejšie konštrukcie ako sú ukazovatele tu. O objektovo orientovanom programovaním sa pojednáva tu.
Ukážky budú vo Visual Studiu 2013, rovnako tak inštalácia bude ukázaná len pre Visual Studio 2013. U každého dielu budú zdrojové kódy, z ktorých sa bude vychádzať v diele ďalším. Vo Visual Studiu 2015 rovnaký postup použiť nedá, pretože linker nemôže nájsť niektoré funkcie. Riešením je skompilovať si knižnicu zo zdrojových kódov vo Visual Studiu 2015.
Inštalácia
Najprv si stiahneme zdrojové kódy zo stránok SDL. Zvolíme verzii pre Visual Studio.
Teraz vytvoríme prázdny projekt File - New - Project - Installed - Templates - Visual C ++ - General - Empty Project. Zdrojové kódy potom extrahujeme do zložky projektu.
Ďalej potrebujeme pridať cesty k týmto súborom, aby sme ich mohli includovat. Pravým tlačidlom myši klikneme na projekt a zvolíme Properties (alebo Alt + Enter). V ľavom hornom rohu zvolíme konfiguráciu. Odporúčam nastaviť "* All Configurations ", nie je nutné potom nastavovať pre Debug a Release zvlášť. V menu Configuration Properties - VC ++ Directories pridáme zložky, v ktorých sú zdrojové kódy. Do " Include Directories " dopíšeme zložku / include, ktorá sa nachádza v stiahnutých súboroch. Ďalej do " Library Directories " zapíšeme zložku */ lib / x64 (alebo x86, podľa vašich preferencií). Odporúčam používať preddefinované makrá.
Teraz bude ešte potreba prilinkovať SDL knižnice. Opäť prejdeme do Configuration Properties - Linker - Input a do "* Additional Dependencies " dopíšeme "SDL2.lib" a *"SDL2main.lib".
Pretože sme zvolili 64-bitové knižnice, musíme aj architektúru projektu zmeniť na x64. Tentoraz rozkliknite Properties celého riešenia a v pravom hornom rohu klikneme na "* Configuration Manager ". U projektu vyberieme stĺpček Platform a dáme <New ...>. Ako novú platformu zvolíme x64. Rovnakú operáciu opakujeme aj pre *Release (zmena v ľavom hornom rohu). Tieto kroky nie sú nutné pre x86 platformu.
Posledná vec, ktorú musíme nastaviť, je subsystému. Opäť nastavíme v Properties projektu - Configuration Properties - Linker - Systém - subsystém. Máme tri možnosti:
- Console - Použijeme, ak budeme chcieť mať vedľa okien otvorenú aj konzolu,
- Windows - Použijeme, ak budeme chcieť pracovať iba s oknami. Defaultný vstup a výstup bude prebiehať do súborov,
- Native - Použijeme, ak budeme tvoriť knižnicu alebo engine.
My zvolíme Windows. Tu sa trochu líši konvencie. Ak použijeme Console, vstupom do programu bude funkcia int main (), v ktorej sa musí zavolať funkcia SDL_SetMainReady (). Ak použijeme Windows, vstupné funkcie bude int SDL_main (int, char **), ale SDL_SetMainReady už nie je potreba volať, pretože sa volá automaticky. Ak použijeme Native, vstupné funkcie prirodzene nie je, ale pred prácou s SDL sa musí stále zavolať funkcie SDL_SetMainReady. Vyberieme možnosť Windows a potvrdíme. Pokiaľ chcete mať k dispozícii konzolu, nastavte Console a nezabudnite zavolať SDL_SetMainReady.
Prvý program
V prvom programe iba vyskúšame, či všetko funguje, ako má, a či je možné program skompilovať. Nasledujúce časť kódu by nemala vyvolať žiadny error.
#include <SDL.h> int SDL_main(int,char**) //int main() pokud jste použili SubSystem Console { // SDL_SetMainReady(); // pokud jste použili SubSystem Console SDL_CreateWindow("Test",0,0,800,600,0); return 0; }
Aby mohlo SDL fungovať, potrebuje pripojiť svoju dynamickú knižnicu
(SDL2.dll). Pretože budeme mať v neskorších fázach projektu obsahu
viac, upravíme si projekt tak, aby automaticky kopíroval obsah do výstupnej
zložky. Bohužiaľ však projekt pre C ++ nefunguje rovnako ako projekty pre C
#, kde môžeme jednoducho nastaviť, či sa má obsah kopírovať. Vytvoríme v
priečinku projektu zložku Output, do ktorej budeme dávať všetky
súbory, ktoré budeme chcieť nakopírovať do výstupnej zložky. Zatiaľ tam
skopírujeme iba SDL2.dll. Teraz opäť upravíme vlastnosti projektu
Configration Preporties - Build Events - pre-Build Event - Command
Line. Tu nastavíme príkaz, ktorý by sa štandardne vykonal na
príkazovom riadku. Automaticky budeme kopírovať zložku Output do
výstupnej zložky príkazom
xcopy “$(ProjectDir)Output” “$(TargetDir)” /e /I /f /y
.
Tým máme hotovo a môžeme projekt spustiť.
Jediná vec, ktorú program urobí je, že otvorí a ihneď zavrie okno v ľavom hornom rohu obrazovky (malo by iba probliknout). Ak máte s projektom problémy, môžete sa obrátiť na pomoc tu v komentároch alebo na fóre. Na konci článku prikladám fungujúci projekt.
V budúcom dieli vytvoríme nezavírající sa okno a pozrieme sa na spracovanie vstupných udalostí.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkamiStiahnuté 1475x (3.34 MB)