LECK�K: Directdraw_3 |
�dv�z�llek! Az els� lecke a saj�t k�perny� volt. Most megpr�b�lunk a windows-t�l kikunyer�lni egy teljes k�perny�s ablakot. Ehhez l�trhozunk egy �j f�jl-t, egy �j oszt�llyal. A l�nyeg a j�t�kokban,hogy a b�buk mindig mozognak a k�perny�n,�s ehhez mindig �jra kell rajzolni �ket.Ebb�l k�vetkezik,hogy mik�zben a vidik�rtya b�szen rajzolja a monitorra a k�pet,k�zben a mi progink meg a saj�t b�buj�t a vidik�rty�ra, h�t ebb�l lesz a k�p villodz�sa,feldarabol�d�sa.... Ennek leker�l�s�re kell egy directx fel�letet l�trehozni, �s mindj�rt k�t k�perny�nek kell helyet foglalni. az els� amit l�tunk, �s egy h�ts� amire rajzolunk... ha minden rajzol�ssal k�szen vagyunk,akkor egy v�lt�s, �s m�ris rajzolhatunk a m�sik k�perny�re. ezzel ki van l�ve a k�perny� villog�sa, feldarabol�d�sa.A projecthez adj�l egy �j f�ljt, m�ghozz� a Header mapp�ba. a neve legyenRajz.hpp . A hpp kiterjeszt�s el�nye hogy nem kell k�l�n .h �s .cpp f�jl. ( DEVC++ n�l: msvc6.0 Az �j f�jl-ban hozzuk l�tre az oszt�lyunkat.... //RAJZ OSZT�LY Nos akinek idegen egy oszt�ly, annak idegen a konstruktor �s destruktor fogalma is. A l�nyege: ha az oszt�lyt statikusan hozzuk l�tre,akkor az exe bet�lt�d�sekor, ha dinamikusan,akkor a mem�ria foglal�sakor megh�v�dik a konstruktor..... felfoghat� az oszt�ly inicializ�l� f�ggv�ny�nek,azaz megh�vhat m�s f�ggv�nyeket,lefoglalhat �jabb dinamikus v�ltoz�kat, mindent,amit csak akarunk, vagy �ppen semmit sem. A destruktor akkor aktiviz�l�dik,amikor megsz�nik az oszt�lyunk, de ott nek�nk kell gondoskodni a dinamikus helyfoglal�s felszabad�t�s�r�l.... A dekral�ci�ban tulajdonk�ppen helyet foglalunk a directdraw7 t�pus� mutat�knak,Amelyek sorra megkapj�k az �rt�k�ket a k�l�nb�z� f�ggv�ny h�v�sok ut�n:Kell egy directdraw objektum,amin kereszt�l l�trehozhatjuk az els� �s h�ts� k�perny� fel�leteket,valamint egy klipper objektumot, ez ut�bbi arra kell, hogyha egy k�pet szeretn�nk �trajzolni a h�tt�rre, akkor ha csak egy pixellel is kil�g, akkor m�r nem rajzolja ki a Blt(...) f�ggv�ny. A v�g�objektum n�lk�l. Nos a directx fel�lethez kell az ablakunk hwnd t�pus� v�ltoz�ja,de ez ugye egy m�sik f�jl-ban a main.cpp -ben van. Ha m�r egyszer dekral�ltuk, akkor itt is egyszer�en haszn�lhatjuk,csak mondjuk meg a ford�t�nak,hogy ez egy k�ls� v�ltoz� (majd megkeresi a hely�t) teh�t valahova a #define _RAJZ_ al� kell be�rni: extern HWND hwnd;
Csapjunk bele! hozzunk l�tre egy init() f�ggv�nyt a rajz oszt�lyban: dekral�ci�khoz: bool init(); Az #endif utas�t�s el�tt �p�tj�k ki a megval�s�t�s�t a f�ggv�nyeinknek: //MEGVAL�S�T�SOK: Els�nek a konstruktor, destruktor,majd az init f�ggv�ny: //Megval�s�t�sok: Nos az�rt �rtam hogy ha eddig el�r a progi mert ezzel a f�ggv�nnyel szokott probl�ma lenni:SetDisplayMode( 800, 600, 32,75,0)Vagy a videok�rtya vagy a monitor nem b�rja,akkor �ll�tgatni kell.felbont�s pl 640x 480 sz�nm�lys�g 16 , 8 frekvencia 50 60 75 100 Hertz vagy NULL ekkor a monitor alapfrekvenci�ja lesz a m�rvad�. Menj�l a Main.cpp-be, �s add hozz� a Rajz.hpp-t a f�jl-hoz: #include <Rajz.hpp> ford�t�s.... Hiba�zenet elh�r�t�sa: DEVC++ msvc Marad a ddraw.h �s a ddraw.lib hozz�ad�sa: DEVC++: MSVC: Ha siker�ltek a be�ll�t�sok,akkor a main cpp-ben hozzuk l�tre az �j statikus oszt�lyt: RAJZ rajz; Haszn�lni pedig az egyes tagf�ggv�nyeket a . oper�torral lehet: Irjad be a ShowWindow(hwnd,nFunsterStil); ut�n hogy: if(rajz.init())MessageBox(NULL,"directdraw nem ok�","",0);; ford�t futtat. Ha lett egy teljesk�perny�s sz�rke k�ped,akkor minden ok�. Azonban nem friss�l,de ezt a k�vetkez�ben... itt a kod: Ha nem lenne meg a ddraw.h �s ddraw.lib itt let�lthetitek.
|