SDL: Hry nejen pro Linux (24)

11. 8. 2005
Doba čtení: 9 minut

Sdílet

Dvacátý čtvrtý díl je shrnutím celé série o multiplatformní knihovně SDL. Celý text je strukturován podle jednotlivých článků, u každého je uveden úvodní odstavec spolu se seznamem SDL příkazů, které v něm byly probrány. Na konci naleznete také PDF k vytištění.

SDL #1 – Úvod

V této sérii článků se vám představí knihovna SDL, která slouží pro vývoj her a multimediálních programů, její největší předností je možnost zkompilovat zdrojový kód pro všechny běžně používané operační systémy. Ukázkové programy budou napsány v jazyku C/C++ a zkompilovatelné minimálně pod operačními systémy GNU/Linux a MS Windows.

SDL #2 – Instalace SDL

Ve druhé části série si ukážeme, jak nainstalovat SDL, a dále budou uvedeny „step-by-step“ návody na vytvoření SDL projektů v gcc, MS Visual C++ a Dev-C++.

SDL #3 – Inicializace SDL programu

V první části článku se podíváme na konvenci názvů SDL funkcí a speciální datové typy, které SDL přináší. Ve druhé části bude popsána inicializace a deinicializace SDL.

  • SDL_Init()
  • SDL_InitSubSystem()
  • SDL_WasInit()
  • SDL_GetError()
  • SDL_SetError()
  • SDL_ClearError()
  • SDL_Quit()
  • SDL_QuitSubSystem()

SDL #4 – Vytvoření okna

V minulém dílu jsme si dopodrobna vysvětlili inicializaci SDL, ale ještě něco málo zbylo – nastavení vlastností a vytvoření okna. Jak brzy zjistíme, v porovnání s např. Win32 API je tato činnost v SDL mnohem jednodušší.

  • SDL_SetVideoMode()
  • SDL_GetVideoSur­face()
  • SDL_VideoModeOK()
  • SDL_ListModes()
  • Struktura SDL_Rect
  • SDL_GetVideoInfo()
  • Struktura SDL_VideoInfo
  • SDL_VideoDriver­Name()
  • SDL_SetGamma()
  • SDL_SetGammaRamp()
  • SDL_GetGammaRamp()

SDL #5 – Zobrazování grafiky

Dnes se podíváme na grafické funkce poskytované knihovnou SDL. Vzhledem k rozsáhlosti tohoto tématu zde budou uvedeny pouze nejzákladnější věci, podrobnostem se budeme věnovat až v následujících dílech.

  • SDL_LoadBMP()
  • Knihovna SDL_image
  • IMG_Load()
  • SDL_SaveBMP()
  • SDL_FreeSurface()
  • SDL_DisplayFormat()
  • SDL_DisplayFor­matAlpha()
  • SDL_ConvertSur­face()
  • SDL_BlitSurface()
  • SDL_UpdateRect()
  • SDL_UpdateRects()
  • SDL_Flip()

SDL #6 – Operace se surfacem

V tomto dílu budeme dále rozvíjet naše znalosti o SDL grafice. Předvedeme si například, jak vyplnit surface barvou, jak docílit toho, aby určitá barva byla transparentní (průhledná), jak nastavit průhlednost i takového surface, který neobsahuje alfa kanál, a další užitečné věci.

  • SDL_CreateRGBSur­face()
  • SDL_CreateRGBSur­faceFrom()
  • SDL_SetClipRect()
  • SDL_GetClipRect()
  • SDL_MapRGB()
  • SDL_MapRGBA()
  • SDL_GetRGB()
  • SDL_GetRGBA()
  • SDL_FillRect()
  • SDL_SetColorKey()
  • SDL_SetAlpha()
  • SDL_SetColors()
  • SDL_SetPalette()

SDL #7 – Přímý přístup k pixelům, kurzory

Tentokrát se ponoříme trochu více do hloubky, popíšeme si SDL grafické struktury a tyto znalosti následně využijeme k přímému přístupu k pixelům obrázku. V závěru budeme také měnit kurzor myši.

  • Struktura SDL_Surface
  • Struktura SDL_PixelFormat
  • Struktura SDL_Palette
  • Struktura SDL_Color
  • SDL_LockSurface()
  • SDL_UnlockSurface()
  • SDL_MUSTLOCK()
  • SDL_CreateCursor()
  • SDL_FreeCursor()
  • SDL_SetCursor()
  • SDL_GetCursor()
  • SDL_ShowCursor()

SDL #8 – OpenGL

Díky přímé podpoře OpenGL umožňuje SDL renderovat i 3D grafické objekty, které se staly nepsaným standardem naprosté většiny dnešních her. Tentokrát se tedy budeme věnovat podpoře OpenGL v SDL.

  • Knihovna OpenGL
  • SDL_GL_SetAttri­bute()
  • SDL_GL_GetAttri­bute()
  • SDL_GL_SwapBuf­fers()
  • SDL_GL_GetPro­cAddress()
  • SDL_GL_LoadLi­brary()

SDL #9 – Výstup textu pomocí SDL_ttf

V dnešním dílu bude popsána knihovna SDL_ttf, která slouží pro výpisy textů do scény. Se zobrazením textů a především s českými znaky bývá někdy potíž, nicméně použití SDL_ttf je velice jednoduché a naprosto bezproblémové.

  • Knihovna SDL_ttf
  • TTF_Init()
  • TTF_Quit()
  • TTF_WasInit()
  • TTF_GetError()
  • TTF_SetError()
  • Struktura TTF_Font
  • TTF_OpenFont()
  • TTF_OpenFontIndex()
  • TTF_OpenFontIn­dexRW()
  • TTF_CloseFont()
  • TTF_RenderTex­t_Solid()
  • TTF_RenderUTF8_So­lid()
  • TTF_RenderUNI­CODE_Solid()
  • TTF_RenderTex­t_Shaded()
  • TTF_RenderUTF8_Sha­ded()
  • TTF_RenderUNI­CODE_Shaded()
  • TTF_RenderTex­t_Blended()
  • TTF_RenderUTF8_Blen­ded()
  • TTF_RenderUNI­CODE_Blended()
  • TTF_RenderGlyp­h_Solid()
  • TTF_RenderGlyp­h_Shaded()
  • TTF_RenderGlyp­h_Blended(
  • TTF_SetFontStyle()
  • TTF_GetFontStyle()
  • TTF_SizeText()
  • TTF_SizeUTF8()
  • TTF_SizeUNICODE()
  • TTF_FontHeight()
  • TTF_FontLineSkip()
  • TTF_FontAscent()
  • TTF_FontDescent()
  • TTF_GlyphMetrics()
  • TTF_ByteSwappe­dUNICODE()
  • TTF_FontFaceFa­milyName()
  • TTF_FontFaceS­tyleName()
  • TTF_FontFaceIs­FixedWidth()
  • TTF_FontFaces()

SDL #10 – Komunikace se správcem oken, úvod do událostí

Seriál se přehoupl do druhé desítky, příště už na počítání přestanou stačit prsty ;-). Ale ještě než se tak stane, probereme si komunikaci aplikace se správcem oken, což v sobě zahrnuje změnu titulku okna, minimalizaci, přepínání do/z fullscreenu a několik dalších věcí. Ke konci bude také přidán lehký úvod do zpracování událostí.

  • SDL_WM_SetCaption()
  • SDL_WM_GetCaption()
  • SDL_WM_SetIcon()
  • SDL_WM_Iconify­Window()
  • SDL_WM_Toggle­FullScreen()
  • SDL_WM_GrabInput()

SDL #11 – Fronta událostí

Na konci minulého dílu jsme nakousli základní práci s událostmi, dnes budeme pokračovat. Tento článek je primárně věnován práci s frontou událostí, ale jelikož ještě nevíme nic o unionu SDL_Event, bude částečně probrán i on.

  • Union SDL_Event
  • SDL_PollEvent()
  • SDL_WaitEvent()
  • SDL_PumpEvents()
  • SDL_PushEvent()
  • SDL_PeepEvents()
  • SDL_EventState()
  • SDL_SetEventFil­ter()
  • SDL_GetEventFil­ter()

SDL #12 – Klávesnice

Pravděpodobně nejpoužívanějšími vstupními zařízeními počítače jsou klávesnice a myš, v našem seriálu začneme právě klávesnicí. Podíváme se na ni jak z událostního pohledu, tak „přímým“ přístupem a uděláme první krok k interaktivním hrám.

  • Struktura SDL_KeyboardEvent
  • Struktura SDL_keysym
  • Struktura SDLMod
  • SDL_EnableUNICODE()
  • SDL_EnableKey­Repeat()
  • SDL_GetKeyState()
  • SDL_GetModState()
  • SDL_SetModState()
  • SDL_GetKeyName()

SDL #13 – Myš

Na řadě je další vstupní zařízení, tentokrát se jedná o myš. Opět se budeme věnovat jak událostem, tak přímému přístupu.

  • Struktura SDL_MouseButto­nEvent
  • Struktura SDL_MouseMoti­onEvent
  • SDL_BUTTON()
  • SDL_GetMouseState()
  • SDL_GetRelati­veMouseState()
  • SDL_WarpMouse()

SDL #14 – Joystick

Joysticky, kniply, páky a jiné ovladače bývají nedílnou součástí většiny her, hlavně simulátorů. Tento díl bude věnován právě jim.

  • SDL_NumJoysticks()
  • SDL_JoystickOpen()
  • Struktura SDL_Joystick
  • SDL_JoystickO­pened()
  • SDL_JoystickClose()
  • SDL_JoystickName()
  • SDL_JoystickIndex()
  • SDL_JoystickNu­mAxes()
  • SDL_JoystickNum­Balls()
  • SDL_JoystickNum­Hats()
  • SDL_JoystickNum­Buttons()
  • SDL_JoystickE­ventState()
  • Struktura SDL_JoyAxisEvent
  • Struktura SDL_JoyButtonEvent
  • Struktura SDL_JoyBallEvent
  • Struktura SDL_JoyHatEvent
  • SDL_JoystickUp­date()
  • SDL_JoystickGe­tAxis()
  • SDL_JoystickGet­Button()
  • SDL_JoystickGet­Ball()
  • SDL_JoystickGet­Hat()

SDL #15 – Ostatní události

V dnešním dílu o knihovně SDL dokončíme popis událostního systému. Budeme se mimo jiné věnovat změnám velikosti okna, jeho aktivacím a deaktivacím, posílání uživatelských zpráv a dalším věcem, které ještě zbývá probrat.

  • Struktura SDL_QuitEvent
  • Struktura SDL_ResizeEvent
  • Struktura SDL_ExposeEvent
  • Struktura SDL_ActiveEvent
  • SDL_GetAppState()
  • Struktura SDL_UserEvent
  • Struktura SDL_SysWMEvent

SDL #16 – Časovače a práce s časem

V dnešním dílu se podíváme na systémové časovače a funkce pro práci s časem. Na konci budou také v rychlosti zmíněny rychlostní optimalizace včetně výpočtu FPS.

  • SDL_AddTimer()
  • SDL_RemoveTimer()
  • SDL_Delay()
  • SDL_GetTicks()

SDL #17 – Zvuky a hudba

V dnešním dílu o knihovně SDL začneme nový tematický celek, budou jím zvuky a hudba, které přinesou konec všem tichým aplikacím. Na první pohled by se mohlo zdát, že si musí naprostou většinu funkčnosti napsat programátor sám, nicméně je možné používat již hotový mixer v podobě rozšiřující knihovny SDL_mixer, který odstraní většinu námahy.

  • SDL_AudioDriver­Name()
  • Struktura SDL_AudioSpec
  • SDL_LockAudio()
  • SDL_UnlockAudio()
  • SDL_OpenAudio()
  • SDL_PauseAudio()
  • SDL_GetAudioS­tatus()
  • SDL_CloseAudio()
  • SDL_LoadWAV()
  • SDL_FreeWAV()
  • SDL_MixAudio()

SDL #18 – Konverze zvuků, knihovna SDL_sound

V tomto dílu konverzemi zvuků dokončíme popis funkcí, které SDL poskytuje pro audio. Druhá část článku bude věnována rozšiřující knihovně SDL_sound, která slouží pro dekódování zvuků z .MP3, .MID, .OGG a dalších běžně rozšířených typů souborů.

  • Struktura SDL_AudioCVT
  • SDL_BuildAudioCVT()
  • SDL_ConvertAudio()
  • Knihovna SDL_sound
  • Sound_Init()
  • Sound_Quit()
  • Sound_GetError()
  • Sound_ClearError()
  • Sound_Available­Decoders()
  • Struktura Sound_DecoderInfo
  • Sound_NewSample()
  • Sound_NewSample­FromFile()
  • Struktura Sound_AudioInfo
  • Struktura Sound_Sample
  • Sound_FreeSample()
  • Sound_Decode()
  • Sound_DecodeAll()
  • Sound_SetBuffer­Size()
  • Sound_Rewind()
  • Sound_Seek()

SDL #19 – Přehrávání zvuků pomocí SDL_mixer

Vše, co se týká SDL audio funkcí, už máme probráno, takže se zkusíme podívat na rozšiřující knihovnu SDL_mixer. Knihovna SDL_mixer poskytuje snadno použitelné funkce pro mixování zvuků a hudby. Je vhodná obzvlášť pro ty, kterým připadá standardní SDL audio API příliš nízkoúrovňové a strohé.

  • Knihovna SDL_mixer
  • Mix_OpenAudio()
  • Mix_CloseAudio()
  • Mix_GetError()
  • Mix_SetError(
  • Mix_QuerySpec()
  • Mix_LoadWAV()
  • Mix_LoadWAV_RW()
  • Mix_QuickLoad_WAV()
  • Mix_QuickLoad_RAW()
  • Mix_FreeChunk()
  • Mix_VolumeChunk()
  • Mix_AllocateChan­nels()
  • Mix_Volume()
  • Mix_PlayChannel()
  • Mix_PlayChannel­Timed()
  • Mix_FadeInChannel()
  • Mix_FadeInChan­nelTimed()
  • Mix_Pause()
  • Mix_Resume()
  • Mix_HaltChannel()
  • Mix_ExpireChannel()
  • Mix_FadeOutChan­nel()
  • Mix_ChannelFi­nished()
  • Mix_Playing()
  • Mix_Paused()
  • Mix_FadingChannel()

SDL #20 – Hudba a efekty

Ve 20. dílu dokončíme popis knihovny SDL_mixer. Budeme se bavit především o hudbě a speciálních efektech, jako je nastavení rozdílné hlasitosti levého a pravého kanálu nebo simulace ztišení vlivem vzdálenosti zdroje zvuku od posluchače.

  • Struktura Mix_Music
  • Mix_LoadMUS()
  • Mix_FreeMusic()
  • Mix_PlayMusic()
  • Mix_FadeInMusic()
  • Mix_FadeInMusic­Pos()
  • Mix_HookMusic()
  • Mix_GetMusicHo­okData()
  • Mix_VolumeMusic()
  • Mix_PauseMusic()
  • Mix_ResumeMusic()
  • Mix_RewindMusic()
  • Mix_SetMusicPo­sition()
  • Mix_SetMusicCMD()
  • Mix_HaltMusic()
  • Mix_FadeOutMusic()
  • Mix_HookMusic­Finished()
  • Mix_GetMusicType()
  • Mix_PlayingMusic()
  • Mix_PausedMusic()
  • Mix_FadingMusic()
  • Mix_SetPanning()
  • Mix_SetDistance()
  • Mix_SetPosition()
  • Mix_SetReverseS­tereo()
  • Mix_RegisterEf­fect()
  • Mix_Unregiste­rEffect()
  • Mix_Unregiste­rAllEffects()
  • Mix_SetPostMix()
  • Mix_ReserveChan­nels()
  • Mix_GroupChannel()
  • Mix_GroupChannels()
  • Mix_GroupCount()
  • Mix_GroupAvai­lable()
  • Mix_GroupOldest()
  • Mix_GroupNewer()
  • Mix_FadeOutGroup()
  • Mix_HaltGroup()

SDL #21 – CD-ROM

Další oblastí knihovny SDL, kterou si popíšeme, bude API pro práci s CD-ROM. Po přečtení tohoto článku byste měli být schopni si vytvořit jednoduchý CD přehrávač, který zahrnuje přehrávání a pauzy, listování a pohyb ve skladbách a také vysouvání mechaniky pro vložení nového disku.

  • SDL_CDNumDrives()
  • SDL_CDName()
  • SDL_CDOpen()
  • SDL_CDClose()
  • SDL_CDStatus()
  • CD_INDRIVE()
  • Struktura SDL_CD
  • Struktura SDL_CDtrack
  • FRAMES_TO_MSF()
  • MSF_TO_FRAMES()
  • SDL_CDPlay()
  • SDL_CDPlayTracks()
  • SDL_CDPause()
  • SDL_CDResume()
  • SDL_CDStop()
  • SDL_CDEject()

SDL #22 – Vícevláknové programování

V dnešním dílu o knihovně SDL se budeme věnovat podpoře tzv. vícevláknového programování. Podíváme se na vytváření nových vláken a samozřejmě také na jejich synchronizaci, která nikdy nesmí chybět.

  • SDL_CreateThread()
  • SDL_WaitThread()
  • SDL_KillThread()
  • SDL_ThreadID()
  • SDL_GetThreadID()
  • Struktura SDL_mutex
  • SDL_CreateMutex()
  • SDL_DestroyMutex()
  • SDL_LockMutex()
  • SDL_mutexP()
  • SDL_UnlockMutex()
  • SDL_mutexV()
  • Struktura SDL_sem
  • SDL_CreateSemap­hore()
  • SDL_DestroySe­maphore()
  • SDL_SemWait()
  • SDL_SemTryWait()
  • SDL_SemWaitTi­meout()
  • SDL_SemPost()
  • SDL_SemValue()
  • Struktura SDL_cond
  • SDL_CreateCond()
  • SDL_DestroyCond()
  • SDL_CondWait()
  • SDL_CondWaitTi­meout()
  • SDL_CondSignal()
  • SDL_CondBroadcast()

SDL #23 – SDL_RWops, SDL_Overlay + vše, na co se zapomnělo

V dnešním, závěrečném dílu o knihovně SDL se pokusím shrnout všechny věci, na které jsem během psaní seriálu pozapomněl, popř. kterým jsem z důvodu své neznalosti nevěnoval pozornost. Mimo jiné se budeme věnovat SDL_RWops, YUV video overlay, nahrávání sdílených knihoven za běhu aplikace a proměnným prostředí.

bitcoin_skoleni

  • SDL_RWFromFile()
  • SDL_RWFromFP()
  • SDL_RWFromMem()
  • SDL_RWFromCon­stMem()
  • SDL_AllocRW()
  • SDL_FreeRW()
  • Struktura SDL_RWops
  • SDL_RWread()
  • SDL_RWwrite()
  • SDL_RWseek()
  • SDL_RWtell()
  • SDL_RWclose()
  • Struktura SDL_Overlay
  • SDL_CreateYUVO­verlay()
  • SDL_FreeYUVOver­lay()
  • SDL_LockYUVOver­lay()
  • SDL_UnlockYUVO­verlay()
  • SDL_DisplayYU­VOverlay()
  • SDL_putenv()
  • SDL_getenv()
  • SDL_LoadObject()
  • SDL_UnloadObject()
  • SDL_LoadFunction()
  • SDL_HasRDTSC()
  • SDL_HasMMX()
  • SDL_HasMMXExt()
  • SDL_Has3DNow()
  • SDL_Has3DNowExt()
  • SDL_HasSSE()
  • SDL_HasSSE2()
  • SDL_HasAltiVec()

SDL #24 – Obsah

Dvacátý čtvrtý díl je shrnutím celé série o multiplatformní knihovně SDL. Text je strukturován podle jednotlivých článků, u každého je uveden úvodní odstavec spolu se seznamem SDL příkazů, které v něm byly probrány.

PDF verze seriálu

Jako bonus na rozloučenou jsem pro všechny, kteří dočetli až sem ;-), vytvořil PDF verzi celého seriálu vhodnou pro tisk. Mimochodem má 110 stránek!

Download

Autor článku

Backend programátor ve společnosti Avast, kde vyvíjí a spravuje BigData systém pro příjem a analýzu událostí odesílaných z klientských aplikací založený na Apache Kafka a Apache Hadoop.