|
dev.gamez.lv Latvian Game Developers Community
|
View previous topic :: View next topic |
Author |
Message |
E13m3nT
Joined: 24 Jan 2006 Posts: 42
|
Posted: Sun Feb 19, 2006 7:03 pm Post subject: DirectDraw |
|
Sveiki!
Kaads vareetu ieteikt kaadu labu tutoriaali par directdraw?
Nevaru nekaadiigi saprast ar ko saakt.
Ja nav gruuti varat luudzu ielikt kaadu paraugu vai arii atsuutiit man vinju uz e-pastu. Piemeeram kur fullscreenaa tiek paraadiita kaada bilde!
Jau ieprieksh paldies. |
|
Back to top |
|
|
elvman Indago Uzvarētājs
Joined: 09 Apr 2003 Posts: 1278 Location: Kuldiga
|
Posted: Sun Feb 19, 2006 7:34 pm Post subject: |
|
Es Rod Of Necropolis taisiiju ar DirectDraw,taka bisk pagaidi.Tulit iemetishu kadu paraugu. _________________ long time; /* know C */ |
|
Back to top |
|
|
elvman Indago Uzvarētājs
Joined: 09 Apr 2003 Posts: 1278 Location: Kuldiga
|
Posted: Sun Feb 19, 2006 7:36 pm Post subject: |
|
Saakumaa tev vajag izdariit shaadas lietas:
Code: |
#define DIRECTDRAW_VERSION 0x0700 //DirectDraw versija
#include <ddraw.h> //standarta DirectDraw include fails
#pragma comment(lib,"ddraw.lib") //DirectDraw library fails
|
Te buus mainiigie kurus naaksies izmantot:
Code: |
IDirectDraw* m_pDD; //galvenais DirectDraw objekts
IDirectDrawClipper* m_pDDClipper; //clippers (tas neljaus ziimeet aarpus ekraana robezhaam)
IDirectDrawSurface* m_pDDSPrimary; //primaara virsma (kuru raadiis uz ekraana)
IDirectDrawSurface* m_pDDSBack; //sekundaaraa virsma uz kuras tu ziimeesi
|
Te buus DirectDraw setups:
Code: |
if (FAILED(DirectDrawCreate(NULL,&m_pDD,NULL))) //ar sho uztaisam galveno DirectDraw objektu
{
return false;
}
if (FAILED(m_pDD->SetCooperativeLevel(hWnd,DDSCL_ALLOWREBOOT|DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN))) //shitais uzliks DirectDraw uz Windows loga
{
return false;
}
if (FAILED(m_pDD->SetDisplayMode(nScreenWidth,nScreenHeight,nScreenDepth))) //shitais uzstaadiis izshkjirtspeeju
{
return false;
}
|
Tagad uztaisam abus buferus (Primary un back) un clipperi:
Code: |
DDSURFACEDESC m_ddsd; //surface descriptor (datur infomaaciju par virsmu,ko gatavojamies taisiit)
ZeroMemory(&m_ddsd, sizeof(m_ddsd));
m_ddsd.dwSize = sizeof(m_ddsd);
m_ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
m_ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_FLIP |
DDSCAPS_COMPLEX;
m_ddsd.dwBackBufferCount = 1;
if (FAILED(m_pDD->CreateSurface(&m_ddsd, &m_pDDSPrimary, NULL))) //uztaisam primaaro virsmu
{
return false;
}
DDSCAPS ddscaps;
ZeroMemory(&ddscaps, sizeof(ddscaps));
ddscaps.dwCaps = DDSCAPS_BACKBUFFER;
if (FAILED(m_pDDSPrimary->GetAttachedSurface(&ddscaps, &m_pDDSBack))) //dabuujam aizmugureejo virsmu (back buffer)
{
return false;
}
RGNDATA region;
region.rdh.dwSize = sizeof(RGNDATAHEADER);
region.rdh.iType = RDH_RECTANGLES;
region.rdh.nCount = 1;
region.rdh.nRgnSize = sizeof(RECT);
region.rdh.rcBound.left = 0;
region.rdh.rcBound.top = 0;
region.rdh.rcBound.right = nScreenWidth; //izshkjirtspeeja
region.rdh.rcBound.bottom = nScreenHeight;
RECT rect={0,0,nScreenWidth,nScreenHeight};
memcpy(region.Buffer,&rect,sizeof(RECT));
if (FAILED(m_pDD->CreateClipper(0,&m_pDDClipper,NULL))) //uztaisam clipperi
{
return false;
}
if (FAILED(m_pDDClipper->SetClipList(®ion,0))) //uzliekam clippera regjionu sarakstu
{
return false;
}
if (FAILED(m_pDDSBack->SetClipper(m_pDDClipper))) //uzliekam clipperi aimugureejam buferim
{
return false;
} |
Tagad notiiram aizmugureejo bufer:
Code: |
DDBLTFX fx;
memset(&fx, 0, sizeof(fx));
fx.dwSize = sizeof(fx);
fx.dwFillColor = dwColor; //kraasa,kaadaa notiiriit
if (FAILED(m_pDDSBack->Blt(NULL, NULL, NULL, DDBLT_COLORFILL|DDBLT_WAIT, &fx))) //ar sho mees notiiram
return false;
|
Ar sho mees apmainam vietaam (flip) buferus:
Code: | if (FAILED(m_pDDSPrimary->Flip(NULL,0))) return false; |
Paskaidrojums:lai objekti,kurus tu ziimee no saakuma uz ekraana nebuutu ilgaak,kaa tie,kurus tu ziimee veelaak ieksh DirectDraw tu taisi 2 buferus (var arii vairaak,bet jau ir cita opera).Viens ir prieksheejais,ko raada uz ekraana,bet otrais aizmugureejais,uz kura tu ziimee.Kad esi pabeidzis ziimeet uz aizmugureejaa bufera,tie jaapmaina vietaam.Un tagad aizmugureejas buferis (uz kura tu ziimeeji) paliek par prieksheejo un prieksheejais par aizmugureejo.Liidz ar to viss,ko tu ziimeeji uz aizmugureejaa bufera tagad redzams uz ekraana.
Tomeer naacaas taisiit atsevishkju postu.
Ielaadeejam tekstuuru (tekstuura taapat kaa prieksheejais un aizmugureejais buferis ir virsma):
Code: |
IDirectDrawSurface* m_pDDSurface; //tekstuura
DDSURFACEDESC m_ddsd; //atkal virsmas apraksts
ZeroMemory(&m_ddsd, sizeof(m_ddsd));
m_ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT |
DDSD_WIDTH | DDSD_CKSRCBLT;
m_ddsd.dwSize=sizeof(m_ddsd);
m_ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
m_ddsd.dwWidth=nSizeX; //tekstuuras lielums
m_ddsd.dwHeight=nSizeY;
m_ddsd.ddckCKSrcBlt.dwColorSpaceLowValue = RGB(255,0,255);
m_ddsd.ddckCKSrcBlt.dwColorSpaceHighValue = RGB(255,0,255);
if (FAILED(m_pDD->CreateSurface(&m_ddsd,&m_pDDSurface, NULL ))) //uztaisam virsmu
{
DeleteTexture(nTexture);
return false;
}
HBITMAP hbm;
HDC hdcImage= NULL;
HDC hdcSurf = NULL;
hbm = ( HBITMAP )LoadImage( NULL, sFilename,
IMAGE_BITMAP, nSizeX,
nSizeY, LR_LOADFROMFILE | LR_CREATEDIBSECTION ); //ar Windows GDI ielaadeejam tekstuuru
if (hbm==NULL)
{
DeleteTexture(nTexture);
return false;
}
hdcImage = CreateCompatibleDC( NULL );
SelectObject( hdcImage, hbm );
if ( FAILED(m_pDDSurface->GetDC( &hdcSurf )))
{
DeleteTexture(nTexture);
return false;
}
if ( BitBlt( hdcSurf, 0, 0, nSizeX, nSizeY, //ziimeejam sho tekstuuru uz DirectDraw tekstuuras virsmas
hdcImage, 0, 0, SRCCOPY ) == FALSE )
{
DeleteTexture(nTexture);
return false;
}
if ( hdcSurf ) m_pDDSurface->ReleaseDC( hdcSurf ); //notiiram visu aiz sevis
if ( hdcImage ) DeleteDC( hdcImage );
if( hbm ) DeleteObject( hbm ); |
Un pats peedeejais:
ziimeejam sho tekstuuru uz back buffer (ti. ziimeejam vienu virsmu uz otras):
Code: |
RECT src;
src.top=0;
src.bottom=m_nSizeY; //tekstuuras izmeeri
src.left=0;
src.right=m_nSizeX;
RECT pos;
pos.top=nY;
pos.bottom=nY+nSizeY; //atkal tekstuuras izmeeri
pos.left=nX;
pos.right=nX+nSizeX;
if (FAILED(m_pDDSBack->Blt(&pos,m_pTextures[nTexture]->m_pDDSurface, &src,DDBLT_WAIT|DDBLT_KEYSRC, NULL))) //ziimeejam tekstuuru uz back buffer
{
return false;
} |
Tagad saliekot visu shito kopaa vari uztaisiit savu nezheeliigi kruto,nenormaali reaalo strateegjiju vai sidescrolleri. _________________ long time; /* know C */
Last edited by elvman on Sun Feb 19, 2006 8:44 pm; edited 4 times in total |
|
Back to top |
|
|
GiGa Indago Uzvarētājs
Joined: 25 Sep 2003 Posts: 887
|
Posted: Sun Feb 19, 2006 7:39 pm Post subject: |
|
Elvman, varbuut, lai nepiesaarnjotu forumu, visu uzraksti vienaa postaa Nevaig nekaadus "tuuliit buus trupinaajums". |
|
Back to top |
|
|
elvman Indago Uzvarētājs
Joined: 09 Apr 2003 Posts: 1278 Location: Kuldiga
|
Posted: Sun Feb 19, 2006 7:41 pm Post subject: |
|
aa _________________ long time; /* know C */
Last edited by elvman on Sun Feb 19, 2006 8:42 pm; edited 2 times in total |
|
Back to top |
|
|
elvman Indago Uzvarētājs
Joined: 09 Apr 2003 Posts: 1278 Location: Kuldiga
|
Posted: Sun Feb 19, 2006 7:48 pm Post subject: |
|
aa _________________ long time; /* know C */
Last edited by elvman on Sun Feb 19, 2006 8:43 pm; edited 2 times in total |
|
Back to top |
|
|
elvman Indago Uzvarētājs
Joined: 09 Apr 2003 Posts: 1278 Location: Kuldiga
|
Posted: Sun Feb 19, 2006 7:52 pm Post subject: |
|
aa _________________ long time; /* know C */
Last edited by elvman on Sun Feb 19, 2006 8:44 pm; edited 2 times in total |
|
Back to top |
|
|
elvman Indago Uzvarētājs
Joined: 09 Apr 2003 Posts: 1278 Location: Kuldiga
|
Posted: Sun Feb 19, 2006 7:54 pm Post subject: |
|
aa _________________ long time; /* know C */
Last edited by elvman on Sun Feb 19, 2006 8:44 pm; edited 2 times in total |
|
Back to top |
|
|
elvman Indago Uzvarētājs
Joined: 09 Apr 2003 Posts: 1278 Location: Kuldiga
|
Posted: Sun Feb 19, 2006 7:56 pm Post subject: |
|
Esmu pabeidzis likt komentaarus.Varbuut kaads moderators vareetu visu salikt vienaa postaa,lai visiem kam rastos shaadi jautaajumi,buutu vieta uz kurieni vinjus suutiit. _________________ long time; /* know C */ |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Sun Feb 19, 2006 8:36 pm Post subject: |
|
Vai tad tu pats nevari salikt visu vienā postā ar labot pogu tagad?
Un pie tam: vai C/C++ autoram der kā piemēra kods? :) |
|
Back to top |
|
|
elvman Indago Uzvarētājs
Joined: 09 Apr 2003 Posts: 1278 Location: Kuldiga
|
Posted: Sun Feb 19, 2006 8:41 pm Post subject: |
|
Varu,bet paliks 4 tukshi posti.Nu labi salikshu,bet lai moderatori tukshos postus peec tam izdzeesh. _________________ long time; /* know C */ |
|
Back to top |
|
|
elvman Indago Uzvarētājs
Joined: 09 Apr 2003 Posts: 1278 Location: Kuldiga
|
Posted: Sun Feb 19, 2006 8:45 pm Post subject: |
|
Nu taa dzeesiet araa visus nevajadziigos postus (ieskaitot sho). _________________ long time; /* know C */ |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Sun Feb 19, 2006 8:52 pm Post subject: |
|
Pēdējo postu jau nu varēji apvienot ar priekšpēdējo :D
Bet nu ok, dzēsiet manus postus arī ārā. |
|
Back to top |
|
|
E13m3nT
Joined: 24 Jan 2006 Posts: 42
|
Posted: Mon Feb 20, 2006 3:34 am Post subject: |
|
Paldies par atbildi!
Tikai vel joprojaam nesaprotu ko dariit...
Meegjinaaju shito visu nokompileet bet shis man izmet kaadus 100 ar kapeikaam errorus
Nevari man atsuutit uz e-pastu kaadu source moshk tad es iebraukshu!
Ja kas lietoju VC++6 |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Mon Feb 20, 2006 9:27 am Post subject: |
|
Īstenībā kļūdu paziņojumos parasti pateikts, kas tieši ir pie vainas. Atliek vien pareizi izlasīt to :) |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|