U E D R , A S I H C RSS

Direct Draw/DD Util


1. κ°œμš”

TheWarOfGenesis2RνŽ˜μ΄μ§€μ˜ 개μ„에 따라 μ‚¬μš©λ²•μ„ λͺ¨μλ‹ˆλ‹€.

2. DDUtil

DXSDKμ—μ„œ μ œκ³΅ν•˜λŠ” ν•¨μˆ˜ λͺ¨μŒμ§‘.(γ…‘.γ…‘a) (Direct Draw 의 Wrapping Class κ°€ λ˜κ² μ§€μš”.)

생각보닀 μ΄ˆκΈ°ν™”ν•˜κΈ° κΉŒλ‹€λ‘œμš΄ DX의 μ‚¬μš©μ„ κ·Έλ‚˜λ§ˆ νŽΈν•˜κ²Œ ν•΄μ£ΌλŠ” 것듀이닀

DDUtilμ•ˆμ—λŠ” λ‘κ°œμ˜ ν΄λž˜μŠ€κ°€ μžˆλ‹€

2.1. CDisplay

DirectDraw의 생성과 Surface와 연결을 λ‹΄λ‹Ήν•˜λŠ” Class
CDisplay의 ν•¨μˆ˜μ—λŠ” λ‹€μŒκ³Ό 같은 것이 μžˆλ‹€.

1. μ΄ˆκΈ°ν™”
~cpp 
CreateFullScreenDisplay(HWND hWnd, DWORD dwWidth, DWORD dwHeight, DWORD dwBPP) 
DirectDraw μž₯μΉ˜λΌ ν’€μŠ€ν¬λ¦° λͺ¨λ“œλ‘œ μƒμ„±ν•œλ‹€.
  • hWnd : ν˜„μž¬ μœˆλ„μš°μ˜ ν•Έλ“€
  • dwWidth : 생성할 객체의 넓이
  • dwHeight : 생성할 객체의 높이
  • dwBPP : 생성할 객체의 μƒ‰μƒμˆ˜ (8, 16, 24, 32..)

~cpp 
CreateWindowedDisplay HWND hWnd, DWORD dwWidth, DWORD dwHeight) 
μœ„μ™€ 같은 일을 ν•˜μ§€λ§Œ μ°½λͺ¨λ“œλ‘œ μƒμ„±ν•œλ‹€. μƒ‰μƒμˆ˜κ°€ μ—†λŠ” 것은 μœˆλ„μš° λ°”νƒ•ν™”λ©΄μ˜ 색상 μˆ˜λΌ λ”°λΌκ°€κΈ° λ•Œλ¬Έμ΄λ‹€.

2. Surface생성
μ„œν”ΌμŠ€λŠ” 그림을 λ‹΄λŠ” 그릇이닀.

~cpp 
CreateSurface( CSurface **ppSurface, DWORD dwWidth, DWORD dwHeight) 
λ³΄ν†΅μ˜ μ„œν”ΌμŠ€λΌ μƒμ„±ν•œλ‹€.

~cpp 
CreateSurfaceFromBitmap(CSurface** ppSurface, TCHAR* strBMP, DWORD dwDesiredWidth, DWORD dwDesiredHeight) 
λΉ„νŠΈλ§΅μœΌλ‘œλΆ€ν„° μ„œν”ΌμŠ€λΌ μƒμ„±ν•œλ‹€.
  • strBMP : λΉ„νŠΈλ§΅ 파일의 파일λͺ…을 λ„£λŠ”λ‹€.
  • 넓이와 λ†’μ΄λŠ” λΉ„νŠΈλ§΅μ˜ ν¬κΈ°λΌ λ„£μ–΄μ£Όλ©΄ λœλ‹€.

~cpp 
CreateSurfaceFromText( CSurface** ppSurface, HFONT hFont, TCHAR* strText, COLORREF crBackground, COLORREF crForeground) 
λ¬Έμžμ—΄λ‘œλΆ€ν„° μ„œν”ΌμŠ€λΌ μƒμ„±ν•œλ‹€.

3. νŒ”λ ˆνŠΈ
μƒ‰μƒμˆ˜κ°€ 적은 λΉ„νŠΈλ§΅μ˜ κ²½μš°μ—λŠ” νŒ”λ ˆνŠΈλΌ μ§€μ •ν•΄ μ£Όμ–΄μ•Ό ν•œλ‹€.

~cpp 
CreatePaletteFromBitmap( LPDIRECTDRAWPALETTE *ppPalette, const TCHAR *strBMP)
νŠΉμ •ν•œ λΉ„νŠΈλ§΅ νŒŒμΌλ‘œλΆ€ν„° νŒ”λ ˆνŠΈλΌ μ–»μ–΄μ˜¨λ‹€.

~cpp 
SetPalette( LPDIRECTDRAWPALETTE pPalette)
CDisplay 에 νŠΉμ •ν•œ νŒ”λ ˆνŠΈλΌ μ„ΈνŒ…ν•œλ‹€.

4. μ„œν”ΌμŠ€(κ·Έλ¦Ό)의 좜λ ₯
μ„œν”ΌμŠ€μ˜ 그림을 λ°± λ²„νΌλ‘œ 좜λ ₯ν•œλ‹€.

~cpp 
ShowBitmap(HBITMAP hbm, LPDIRECTDRAWPALETTE pPalette)
HBITMAPν˜•μ˜ λΉ„νŠΈλ§΅μ„ νŠΉμ •ν•œ νŒ”λ ˆνŠΈλΌ ν†΅ν•΄ 화면에 좜λ ₯ν•œλ‹€.

λ‹Ήμ—°νžˆ 전에 있던 그림은 μ§€μ›Œμ§„λ‹€.

~cpp 
ColorKeyBlt(DWORD x, DWORD y, LPDIRECTDRAWSURFACE7 pdds, RECT *prc)
μ»¬λŸ¬ν‚€(투λͺ…색)λΌ κ°€μ§„ 채 화면에 좜λ ₯ν•œλ‹€. prcλŠ” μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€.

~cpp 
Blt(DWORD x, DWORD y, LPDIRECTDRAWSURFACE7 pdds, RECT *prc, DWORD dwFlags)
μ»¬λŸ¬ν‚€λΌ λΊ€μ±„ 화면에 좜λ ₯ν•œλ‹€. λ§Œμ•½ dwFlags에 DDBLTFAST_SRCCOLORKEYλΌ λ„£μ–΄μ€λ‹€λ©΄ ColorKeyBlt와 같은 νš¨κ³ΌλΌ λ‚Έλ‹€.

μ—­μ‹œ prcλŠ” μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€.

~cpp 
Blt(DWORD x, DWORD y, CSurface *pSurface, RECT *prc)
CSurfaceν˜•μ„ 화면에 좜λ ₯ν•œλ‹€. prcλŠ” μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€.
5. ν™”λ©΄μ˜ κ°±μ‹ 
μœ„μ˜ Bltν•¨μˆ˜λ“€μ€ λ°± 버퍼에 좜λ ₯ν•˜λŠ” ν•¨μˆ˜λ“€μ΄λ‹€. λͺ¨λ“  λ‚΄μš©μ„ λ°± 버퍼에 좜λ ₯ν–ˆμœΌλ©΄ λ‹€μŒ ν•¨μˆ˜λ“€μ„ μ‚¬μš©ν•˜μž

~cpp 
Present()
λ°± 버퍼에 좜λ ₯λ˜μ–΄μžˆλŠ” λ‚΄μš©μ„ ν˜„μž¬ ν™”λ©΄μœΌλ‘œ 좜λ ₯ν•œλ‹€. 화면을 λͺ¨λ‘ μ™„μ„±ν•œ 후에 μ‚¬μš©ν•œλ‹€.

~cpp 
Clear()
λ°± λ²„νΌμ˜ λ‚΄μš©μ„ λͺ¨λ‘ μ§€μš΄λ‹€.

~cpp 
UpdateBounds()
CDislpay의 멀버 m_rcWindowλΌ κ°±μ‹ ν•œλ‹€. μ € CRectν˜• λ³€μˆ˜μ—λŠ” μœˆλ„μš°μ˜ 크기가 λ“€μ–΄μžˆλ‹€.





2.2. CSurface

Surface의 생성과 κ΄€λ¦¬λΌ λ‹΄λ‹Ήν•˜λŠ” Class

1. μ΄ˆκΈ°ν™”
~cpp 
 CSurface *surface = NULL;
2. μ»¬λŸ¬ν‚€ μ„ΈνŒ…
~cpp 
 surface->SetColorKey(DWORD dwColorKey);
μ»¬λŸ¬ν‚€(투λͺ…색)으둜 μ‚¬μš©ν•  색을 COLORREF (RGB) ν˜•μ— λ§žμΆ”μ–΄μ„œ μ§‘μ–΄λ„£μœΌλ©΄ λœλ‹€.

λŒ€κ°œ 잘 쓰이지 μ•ŠλŠ” 색을 μ‚¬μš©ν•œλ‹€.
3. λΉ„νŠΈλ§΅μœΌλ‘œ surfaceλΌ λ§Œλ“  κ²½μš°κ°€ μ•„λ‹ˆλΌλ©΄ surface에 직접 그림을 κ·Έλ € λ„£μ–΄μ„ μˆ˜ μžˆλ‹€.
~cpp 
 surface->DrawBitmap(...);

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:08
Processing time 0.0188 sec