Snad ka₧d² programßtor-hrßΦ jednou zatou₧il v∞d∞t, jak se programujφ hry. Jß vßm nevysv∞tlφm p°esn² postup, ale pomohu vßm pochopit zßkladnφ principy programovßnφ 2D grafiky ve Windows pomocφ DirectX. Myslφm, ₧e pokud to s programovßnφm tohoto typu myslφte vß₧n∞, dß vßm tento kurz dobr² zaΦßtek a kdo vφ t°eba jednou budete psßt opravdovΘ hry.
Abyste mohli ihned zaΦφt psßt k≤d musφte znßt objektovΘ programovßnφ ve Visual C++ tzn. vΦetn∞ zßkladnφch t°φd MFC (Microsft Foundation Class) jako CString, CPoint nebo CRect. Programy se sice dajφ psßt pouze ve Win32, ale k≤d psan² v MFC je sna₧Üφ prßv∞ o v²Üe uvedenΘ t°φdy. Programovat grafiku lze samoz°ejm∞ i v jin²ch jazycφch (nap°. Visual Basic Φi Java), ale myslφm si, ₧e C++ je na programovßnφ grafiky nejlepÜφ, jak kv∙li v²konu, tak kv∙li programßtorskΘ volnosti, kterß t°eba ve Visual Basicu nenφ. Dßle musφte mφt na svΘm poΦφtaΦi nainstalovanΘ Visual C++, minimßln∞ verzi 4.0. NejlepÜφ bude, kdy₧ si koupφte verzi 6.0. Pokud vlastnφte verzi ni₧Üφ m∙₧e se stßt, ₧e k≤d nep∙jde zkompilovat. OΦekßvßm, ₧e mßte alespo≥ zßkladnφ znalosti v²vojovΘho prost°edφ Visual C++, nicmΘn∞ soub∞₧n∞ s tφmto kurzem b∞₧φ i kurz prßv∞ o IDE VC++, kter² vßm m∙₧e pomoci. Samoz°ejm∞ musφte mφt nainstalovanΘ DirectX minimßln∞ verzi 8.0. Zkontrolujte si zda-li mßte na disku tyto soubory : ddraw.dll, dxguid.dll, dxerr8.dll. Jako dalÜφ nadstandardnφ Φßst je pot°eba tzv. DirectX SDK 8.1 (Software Development Kit). Ve vaÜem prßv∞ naistalovanΘm VC++ je pravd∞podobn∞ verze SDK 1.0 nebo 2.0 (zßle₧φ na verzi VC++). To by nßm sice staΦilo, ale proΦ psßt program pro starou verzi, kdy₧ mßme k dispozici verzi novou! SDK si bu∩ m∙₧ete stßhnout p°φmo od Microsoftu. Pokud mßte vytßΦenΘ p°ipojenφ p°es modem, m∙₧e tu nastat problΘm, proto₧e SDK mß p°es 40MB (stßhnout se to z vlastnφ zkuÜenosti dß asi za 3 a p∙l hodiny). Po instalaci SDK vßm na poΦφtaΦφ p°ibydou knihovny import∙ pot°ebnΘ pro kompilaci k≤du s DirectX 8.0. Jsou nap°φklad tyto knihovny: ddraw.lib, dxerr8.lib, dxguid.lib a nebo hlaviΦkov² soubor ddraw.h. Uvedl jsem vßm jen ty, kterΘ zatφm budeme pot°ebovat. SDK takΘ obsahuje p°φklady vΦetn∞ zdrojov²ch k≤d∙ a r∙znΘ pom∙cky pro vytvß°enφ multimedißlnφch aplikacφ.
V kurzu jsou barevn∞ odd∞leny n∞ktrerß klφΦovß slova nap°. t°φda (class) CMainFrame
,
funkce (function) InitInstance()
,
prom∞nnß (variable) m_hWnd
a soubor (file) ddraw.h
.
Toto barevnΘ odd∞lenφ jsem zvolil pro vyÜÜφ p°ehlednost v
textu a aby bylo na prvnφ pohled vid∞t co je fuknce a co t°φda. Ostatnφ d∙le₧itß slova budou tuΦn∞
nap°. ClassWizard.
N∞kterΘ nßzvy budou v kurzφv∞ zvlßÜt∞ jsou-li
v textu poprvΘ nap°. MFC a za anglick²m nßzvem bude pokud mo₧no rozepsßno, co nßzev
znamenß v ΦeskΘm p°ekladu.
U zkratek bude uveden v²znam jednotliv²ch pφsmen nap°. MFC (Microsoft Foundation Class).
Funkce poznßte podle zßvorek na konci nßzvu nap°. InitInstance()
.
Obecn∞ platφ, ₧e p°ed ΦlenskΘ prom∞nnΘ (tzn. jsou deklarovßny uvnit°
t°φdy) se dßvajφ znaky m_
(m jako member (Φlen)).
Sna₧ili jste se n∞kdy kreslit do standardnφho okna pomocφ grafickΘho rozhranφ Windows (GDI - Graphics Device Interface) ? Pokud ano, jist∞ dob°e vφte, ₧e slo₧it∞jÜφ scΘny pon∞kud problikßvajφ. Pokud ne, tak to rad∞ji ani nezkouÜejte. Jestli pot°ebujete obΦas nakreslit Φßru nebo obdΘlnφk, pak je samoz°ejm∞ zbyteΦnΘ psßt slo₧it² k≤d DirectX, ale jestli chcete, aby se n∞co opravdu h²balo pak vßm nic jinΘho nezb²vß.
GDI vyu₧φvß tzv. kontext za°φzenφ (DC - device context), co₧ si m∙₧ete p°edstavit jako kousek pam∞ti na vaÜφ grafickΘ kart∞ p°φpadn∞ v RAM. Ka₧dΘ okno ve Windows mß sv∙j kontext za°φzenφ a krom∞ toho m∙₧ete vytvo°it tΘm∞° libovolnΘ mno₧stvφ doΦasn²ch kontext∙ za°φzenφ (vytvo°en²ch podle DC vaÜeho okna v RAM). Do tΘto pam∞ti pak Windows zapisujφ data a vy vidφte nap°φklad Φßru nebo obdΘlnφk na monitoru. Toto opravdu jednoduchΘ °eÜenφ mß, ale jednu zßkladnφ nev²hodu. Jak jist∞ vφte vßÜ monitor se obnovuje mnohokrßt za vte°inu a prßv∞ to je kßmen ·razu, proto₧e Windows mohou zapisovat do DC prßv∞ v okam₧iku, kdy grafickß karta obnovuje obraz a proto monitor zachytφ vykreslovßnφ, kterΘ se projevuje jako problikßvßnφ. Nenφ to v₧dy pravidlem, proto₧e se vykreslovßnφ m∙₧e trefit do kratiΦkΘ doby, kdy se paprsek monitoru p°esouvß z pravΘho dolnφho rohu do levΘho hornφho, ale pravd∞podobnost je velice malß a tak navφc vaÜe aplikace nab²vß dojmu nahodilosti, co₧ nenφ dobrß vlastnost dob°e napsanΘho softwaru. A Φφm je vetÜφ vykreslovanß Φßst, tφm je v∞tÜφ pravd∞podobnost problikßvßnφ. Podrobn∞ji si o GDI povφme v p°φÜtφ lekci, jeliko₧ je dobrΘ znßt, co pou₧φvajφ Windows.
Samoz°ejm∞ tohoto jevu jsi byli v²vojß°i Microsoftu dob°e v∞domi a proto
vytvo°ili standard DirectX (nebo lΘpe DirectDraw), aby bylo mo₧no programovat nßroΦnΘ
grafickΘ aplikace
zejmΘna pak hry. DirectX obsahuje mno₧stvφ mocn²ch nßstroj∙ pro tvorbu multimedißlnφch
aplikacφ ve Visual C++ p°φpadn∞ Visual Basicu nebo Jav∞.
Co obsahuje DirectX ?
StruΦn² popis jednotliv²ch komponent
Jak jste si jist∞ vÜimli vÜechny komponenty obsahujφ sl∙vko Direct neboli P°φmo, co₧ je p°esn∞ to, co DirectX d∞lß. DirectX toti₧ zapisuje p°φmo do grafickΘ pam∞ti a p°φmo do zvukovΘ pam∞ti atd. DirectX opravdu pracuje na nejni₧Üφ ·rovni tzn. na ·rovni hardwaru a prßv∞ proto je o tolik rychlejÜφ ne₧ GDI. Samoz°ejm∞ DirectDraw mß spoustu dalÜφch fint (nap°φklad double buffering nebo je libo tripple buffering?), jak nejlΘpe vyu₧φt vßÜ hardware.
A to je pro tentokrßt vÜe. T∞Üφm se p°φÜt∞ nashledanou.