IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 1 - SDL - Úvod a instalace

V tomto seriálu se podíváme na multiplatformní knihovnu SDL (Simple Directmedia Layer), která se nejčastěji využívá ke tvorbě her. Knihovna poskytuje nízkoúrovňový přístup ke vstupně-výstupním zařízením včetně 2D a 3D grafiky. 3D grafika je v SDL řešena voláním OpenGL funkcí. V tomto seriálu se zaměříme pouze na 2D grafiku. Knihovna dokáže pracovat jak nad OpenGL, tak i nad DirectX při stejné syntaxi. Knihovna samotná obsahuje pouze základní funkcionalitu, zbytek najdeme v přídavných knihovnách (SDL_image, SDL_net, SDL_Sound). Více na Wikipedii nebo stránkách knihovny.

SDL je knihovna vytvořena pro C, nevyužívá tedy třídy ale pouze struktury a globální funkce. Z tohoto důvodu později sáhneme po wrapperu pro C++. Díky tomu budeme moci využít objektově orientovaného programování a typové kontroly, která pro binding například pro C# není možná (kvůli problémům s ukazateli). Řešením by bylo využít objektový wrapper pro binding, ale to už situaci poněkud komplikujeme.

Cílem seriálu bude vytvořit jednoduchou RPG hru, kterou budeme postupně rozšiřovat. Ze začátku se podíváme na základy (práce s okny, vykreslování) a poté na samotnou hru. Jak budeme postupovat, bude se projekt několikrát předělávat. Upozorňuji, že je to z důvodů studijních. Při práci na skutečné aplikaci by se architektura měla měnit co nejméně.

Cílem ovšem není naučit programování v C++. V textu budu předpokládat znalost základních konstrukcí C++ (včetně aritmetiky s ukazateli), objektově orientovaného programování a v dalších dílech i znalost STL - standardní šablonové knihovny (Standart Template Library). Tutoriál pro základní konstrukce, pokročilejší konstrukce jako jsou ukazatele a objektově orientované programování.

Ukázky budou ve Visual Studiu 2013, stejně tak instalace bude ukázána jen pro Visual Studio 2013. U každého dílu budou zdrojové kódy, ze kterých se bude vycházet v díle dalším. Ve Visual Studiu 2015 stejný postup použít nelze, protože linker nemůže najít některé funkce. Řešením je zkompilovat si knihovnu ze zdrojových kódů ve Visual Studiu 2015.

Instalace

Nejprve si stáhneme zdrojové kódy ze stránek SDL. Zvolíme verzi pro Visual Studio.

Odkaz ke stažení - SDL

Nyní vytvoříme prázdný projekt File – New – Project – Installed – Templates – Visual C++ - General – Empty Project. Zdrojové kódy poté extrahujeme do složky projektu.

Dále potřebujeme přidat cesty k těmto souborům, abychom je mohli includovat. Pravým tlačítkem myši klikneme na projekt a zvolíme Properties (nebo Alt+Enter). V levém horním rohu zvolíme konfiguraci. Doporučuji nastavit „*All Configurations*“, není nutné poté nastavovat pro Debug a Release zvlášť. V menu Configuration Properties – VC++ Directories přidáme složky, ve kterých jsou zdrojové kódy. Do „*Include Directories*“ dopíšeme složku /include, která se nachází ve stažených souborech. Dále do „*Library Directories*“ zapíšeme složku /lib/x64 (nebo x86, podle vašich preferencí). Doporučuji používat předdefinovaná makra.

Přidání složek - SDL

Nyní bude ještě potřeba přilinkovat SDL knihovny. Opět přejdeme do Configuration Properties – Linker – Input a do „*Additional Dependencies*“ dopíšeme „SDL2.lib“ a „SDL2main.lib“.

Protože jsme zvolili 64-bitové knihovny, musíme i architekturu projektu změnit na x64. Tentokrát rozklikneme Properties celého řešení a v pravém horním rohu klikneme na „*Configuration Manager*“. U projektu vybereme sloupeček Platform a dáme <New…>. Jako novou platformu zvolíme x64. Stejnou operaci opakujeme i pro Release (změna v levém horním rohu). Tyto kroky nejsou nutné pro x86 platformu.

Zvolení platformy - SDL

Poslední věc, kterou musíme nastavit, je SubSystem. Opět nastavíme v Properties projektu – Configuration Properties – Linker – Systém – SybSystem. Máme tři možnosti:

  • Console – Použijeme, pokud budeme chtít mít vedle oken otevřenou i konzoli,
  • Windows – Použijeme, pokud budeme chtít pracovat pouze s okny. Defaultní vstup a výstup bude probíhat do souborů,
  • Native – Použijeme, pokud budeme tvořit knihovnu nebo engine.

My zvolíme Windows. Tady se trochu liší konvence. Pokud použijeme Console, vstupem do programu bude funkce int main(), ve které se musí zavolat funkce SDL_SetMainRe­ady(). Pokud použijeme Windows, vstupní funkce bude int SDL_main(int,char**), ale SDL_SetMainReady už není potřeba volat, protože se volá automaticky. Pokud použijeme Native, vstupní funkce přirozeně není, ale před prací s SDL se musí stále zavolat funkce SDL_SetMainReady. Vybereme možnost Windows a potvrdíme. Pokud chcete mít k dispozici konzoli, nastavte Console a nezapomeňte zavolat SDL_SetMainReady.

SubSystem - SDL

První program

V prvním programu pouze vyzkoušíme, jestli vše funguje, jak má, a zda je možné program zkompilovat. Následující část kódu by neměla vyvolat žádný 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 fungovat, potřebuje připojit svou dynamickou knihovnu (SDL2.dll). Protože budeme mít v pozdějších fázích projektu obsahu více, upravíme si projekt tak, aby automaticky kopíroval obsah do výstupní složky. Bohužel však projekt pro C++ nefunguje stejně jako projekty pro C#, kde můžeme jednoduše nastavit, zda se má obsah kopírovat. Vytvoříme ve složce projektu složku Output, do které budeme dávat všechny soubory, které budeme chtít nakopírovat do výstupní složky. Prozatím tam zkopírujeme pouze SDL2.dll. Nyní opět upravíme vlastnosti projektu Configration Preporties – Build Events – pre-Build Event – Command Line. Zde nastavíme příkaz, který by se standardně vykonal na příkazové řádce. Automaticky budeme kopírovat složku Output do výstupní složky příkazem xcopy “$(ProjectDir)Output” “$(TargetDir)” /e /I /f /y. Tím máme hotovo a můžeme projekt spustit.

Automatické kopírování - SDL

Jediná věc, kterou program udělá je, že otevře a ihned zavře okno v levém horním rohu obrazovky (mělo by pouze probliknout). Pokud máte s projektem problémy, můžete se obrátit na pomoc zde v komentářích nebo na fóru. Na konci článku přikládám fungující projekt.

Příště, v lekci SDL - Vytvoření okna a vstup od uživatele, vytvoříme nezavírající se okno a podíváme se na zpracovávání vstupních událostí.


 

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 1095x (3.34 MB)

 

Všechny články v sekci
SDL
Přeskočit článek
(nedoporučujeme)
SDL - Vytvoření okna a vstup od uživatele
Článek pro vás napsal Patrik Valkovič
Avatar
Uživatelské hodnocení:
10 hlasů
Věnuji se programování v C++ a C#. Kromě toho také programuji v PHP (Nette) a JavaScriptu (NodeJS).
Aktivity