À©µµ¿ì ¸ðµå
À©µµ¿ì ¸ðµå·Î DirectX¸¦ ¿òÁ÷ÀÌ·Á¸é , ±â¹ÝÀÌ µÇ´Â À©µµ¿ìÀÇ Á¤Àǵµ
º¯°æÇØ¾ß ÇÕ´Ï´Ù.
Áö±Ý±îÁö ÇÁ·Î±×·¥Àº Ç® ½ºÅ©¸°¿¡ ÀûÀýÇÑ ÇüÅÂÀÇ À©µµ¿ì Á¤Àǰ¡ µÇ¾î ÀÖ¾úÀ¸¹Ç·Î
À̹ø¿¡´Â À©µµ¿ì ¸ðµå¿¡ ÀûÀýÇÑ À©µµ¿ì Á¤ÀǸ¦ ÇÕ´Ï´Ù.
hwnd = CreateWindowEx(
WS_EX_TOPMOST,
"DirectX GamePrograming",
"DirectX GamePrograming",
WS_POPUP
,//À©µµ¿ì ½ºÅ¸ÀÏ
0
,//À©µµ¿ì XÁÂÇ¥ ½ÃÁ¡
0
,//À©µµ¿ì YÁÂÇ¥ ½ÃÁ¡
GetSystemMetrics(SM_CXSCREEN)
,//À©µµ¿ì »çÀÌÁî X
GetSystemMetrics(SM_CXSCREEN)
,//À©µµ¿ì »çÀÌÁî Y
(
HWND)
NULL,
(
HMENU)
NULL,
hInstance,
(L
PVOID)
NULL);
À§´Â À©µµ¿ì¸¦ »ý¼ºÇϴ ó¸®ÀÇ ºÎºÐÀÔ´Ï´Ù.
¿©±â¼ À©µµ¿ì ÇÚµé ¡¸HWND¡¹¿¡ À©µµ¿ìÀÇ ID¸¦ °Ç³×¹Þ´Â ºÎºÐµµ
º¯°æÇØ¾ß ÇÕ´Ï´Ù.(À§ÀÇ ÄÚµå´Â Ç® ½ºÅ©¸°¿¡ ÀûÀýÇÑ ÇüÅÂ)
Á¦4 ÆÄ¶ó¹ÌÅ͸¦ ÀÌÇÏ¿Í °°ÀÌ º¯°æÇÕ´Ï´Ù.
WS_OVERLAPPED |
WS_SYSMENU | WS_CAPTION,
À̰ÍÀº ¡¸¸Þ´º¡¹ ¡¸Å׵θ®¡¹ ¡¸À©µµ¿ì ±âº» ±â´É¡¹µîÀ» Ãß°¡ÇÏ´Â Ç÷¡±×ÀÔ´Ï´Ù.
(Ç÷¡±×ÀÇ Àǹ̴ ÇïÇÁ ÂüÁ¶)
´ÙÀ½À¸·Î º¯°æ ÇØ¾ß ÇÒ °ÍÀº Á¦7, 8 ÆÄ¶ó¹ÌÅÍÀÔ´Ï´Ù.
À̰ÍÀº »ý¼ºÇÏ´Â À©µµ¿ìÀÇ »çÀÌÁî¿¡ ´ëÇÑ ÆÄ¶ó¹ÌÅÍÀÔ´Ï´Ù.
À©µµ¿ì ¸ðµå¿¡¼´Â ¡¸Å׵θ®¡¹¡¸¸Þ´º¡¹µîÀ» °¡Áö¹Ç·Î ±âº» »çÀÌÁî¿¡ ÀÌ ¡¸Å׵θ®¡¹µî
ÀÇ »çÀÌÁ Ç÷¯½ºÇØ¾ß ÇÕ´Ï´Ù.
(À©µµ¿ì ¸ðµå¿¡¼´Â ±× ¶§¹®¿¡ Á¶±Ý Ä¿Áø´Ù(Ŭ¶óÀÌ¾ðÆ®´Â °°Àº »çÀÌÁî))
½Ã½ºÅÛÀÇ ÆøÀ» Á¶»çÇÏ·Á¸é ¡¸GetSystemMetrics ÇÔ¼ö¡¹¸¦ »ç¿ëÇÕ´Ï´Ù.
Å׵θ®µîÀº °æ¿ì¿¡ µû¶ó¼ ÆøÀÌ ¹Ù²ð ¼ö ÀÖÀ¸¹Ç·Î À§ÀÇ ÇÔ¼ö¸¦ »ç¿ëÇØ ±× »çÀÌÁ ÃëµæÇÏÁö ¾ÊÀ¸¸é ¿Ã¹Ù¸¥ °ªÀ» ÃëµæÇÒ ¼ö ¾ø½À´Ï´Ù.
int GetSystemMetrics(
int nIndex
// system metric or configuration setting to retrieve
);
ÆÄ¶ó¹ÌÅÍ´Â ¾î´À ½Ã½ºÅÛÀÇ ÆøÀ» ¸®ÅÏÇÒ±î? ÀÇ Ç÷¡±×·Î ¸®ÅÏ °ªÀº INTÇüÀÔ´Ï´Ù.
SM_CXFIXEDFRAM ¹üÀ§ »çÀÌÁî(´Ù¸¥ ÇÑÂÊ)
SM_CYCAPTION ŸÀÌÆ² ¹ÙÀÇ ³ôÀÌ
SM_CYMENU 1ÇàÀÇ ¸Þ´ºÀÇ ³ôÀÌ
À§´Â Ç÷¡±×ÀÇ ÇϳªÀÇ ¿¹ÀÔ´Ï´Ù.
ÇÔ¼ö¸¦ »ç¿ëÇØ¼ °ÔÀÓ È¸é »çÀÌÁ½Ã½ºÅÛ ÆøÀ» À©µµ¿ì »ý¼ºÀÇ »çÀÌÁî·Î ÇÕ´Ï´Ù.
640+GetSystemMetrics(SM_CXFIXEDFRAME)*2
//°¡·ÎÀÇ ½Ã½ºÅÛÆø
480+GetSystemMetrics(SM_CYCAPTION) +GetSystemMetrics(SM_CYFIXEDFRAME)*2
//¼¼·Î
(ÀÌ °ª¿¡¼ ¸Þ´ºÀÇ ³ôÀÌ´Â Æ÷ÇÔµÇÁö ¾Ê´Â´Ù)
ÀÌ º¯°æÀ¸·Î À©µµ¿ì ¸ðµåÀÇ »ý¼ºÀº Á¾·áÀÔ´Ï´Ù.
À©µµ¿ì ¸ðµåÀÇ Á¦ÇÑ
Ç® ½ºÅ©¸°°ú ´Ù¸£´Ù
Ç® ½ºÅ©¸° ¸ðµå¿¡¼´Â ȸéÀ» µ¶Á¡ÇÏÁö¸¸ À©µµ¿ì ¸ðµå¿¡¼ ±×°ÍÀº ºÒ°¡´ÉÇÕ´Ï´Ù.
À©µµ¿ì ¸ðµå¿¡¼´Â ´Ù¸¥ ¾îÇø®ÄÉÀ̼ǰú °øÁ¸ÇÏÁö ¾ÊÀ¸¸é ¾È µÇ±â ¶§¹®¿¡
Á¦¾àÀÌ ¹ß»ýÇÕ´Ï´Ù.
¨ç£ºÆÈ·¹Æ®ÀÇ Á¦ÇÑ
ÇØ»óµµ°¡ ¡¸256Ä®¶ó¡¹ÀÏ °æ¿ì, À©µµ¿ì ¸ðµå·Î »ç¿ëÇÒ ¼ö ÀÖ´Â ÆÈ·¹Æ®°¡ ÇÑÁ¤µË´Ï´Ù.
ÀÌ °æ¿ì, ÆÈ·¹Æ®ÀÇ ¡¸0~9¹ø¡¹ ¡¸246~255¹ø¡¹Àº À©µµ¿ì ½Ã½ºÅÛÀÌ »ç¿ëÇÏ´Â
½Ã½ºÅÛ Ä®¶ó·Î¼ µî·ÏµÇ¾î ÀÖÀ¸¹Ç·Î ÀÌ ÆÈ·¹Æ®¸¦ º¯°æÇϸé WINDOWS ÀÚ½ÅÀÇ »öÀÌ
ÀÌ»óÇÏ°Ô µÇ¾î ¹ö¸³´Ï´Ù.
¨è£ºÇø³À» ÇÒ ¼ö ¾ø´Ù
Ç® ½ºÅ©¸° ¸ðµå¿¡¼´Â attach µÈ ¹é ¹öÆÛ¿Í Çø³À¸·Î ¹¦È Çϰí ÀÖ¾úÁö¸¸
À©µµ¿ì ¸ðµå¿¡¼´Â attach µÈ ¹é ¹öÆÛ¸¦ ¸¸µé ¼ö°¡ ¾ø½À´Ï´Ù.
À©µµ¿ì ¸ðµå¿¡¼ ¹¦È´Â attachµÇ¾î ÀÖÁö ¾ÊÀº ¼ÆäÀ̽º¿¡¼ ÇÁ¶óÀ̸Ӹ®¿¡ Àü¼ÛÀÌ ¹¦È
󸮰¡ µË´Ï´Ù.
¨é£ºÇÁ¶óÀ̸Ӹ®¼ÆäÀ̽º
ÇÁ¶óÀ̸Ӹ®¼ÆäÀ̽º´Â µð½ºÇ÷¹ÀÌ Àüü°¡ µË´Ï´Ù.
¹¦È ÁÂÇ¥µµ ȸé ÁÂÇ¥ ´ÜÀ§°¡ µË´Ï´Ù.
(Ãʱ⼳Á¤ ÇÑ Å¬¶óÀÌ¾ðÆ® À̿ܿ¡µµ ¹¦È °¡´ÉÇÏ°Ô µÈ´Ù.)
º¸Åë °ÔÀÓ¿¡¼´Â À̰ÍÀ» °í·ÁÇØ ¹¦ÈÇØ¾ß ÇÕ´Ï´Ù.
Draw ÃʱâÈ
if(dd->SetCooperativeLevel(hwnd, DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN)!=DD_OK)
return FALSE;
//À©µµ¿ìÀÇ ¼³Á¤À» º¯°æ
Draw ÃʱâÈÀÇ Çϳª¡¤¡¤¡¤ÇùÁ¶¸¦ Çϰí ÀÖ´Â °÷µµ º¯°æÇØ¾ß ÇÕ´Ï´Ù.
Á¦2 ÆÄ¶ó¹ÌÅͰ¡ ¡¸DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN¡¹°¡ µÇ¾î ÀÖ½À´Ï´Ù.
À̰ÍÀº ¡¸¹èŸ ¶Ç´Â Ç® ½ºÅ©¸°¡¹À̶ó´Â Ç÷¡±×ÀÔ´Ï´Ù.
À̰ÍÀ» ¡¸DDSCL_NORMAL¡¹·Î º¯°æÇÕ´Ï´Ù.
ÀÌ·¸°Ô ÇÔÀ¸·Î ÇùÁ¶ ·¹º§ÀÌ ¡¸À©µµ¿ì ¸ðµå¡¹°¡ µË´Ï´Ù.
SURFACE ÃʱâÈ
¼ÆäÀ̽ºÀÇ ÆÄ¶ó¹ÌÅ͵µ Ç® ½ºÅ©¸°°ú À©µµ¿ì ¸ðµå¿¡¼´Â ´Þ¶óÁý´Ï´Ù.
DDSURFACEDESC2 ddsd;  
//DDSURFACEDESC ±¸Á¶Ã¼
memset((VOID *) &ddsd, 0,
sizeof(ddsd));
ddsd.dwSize=
sizeof(ddsd);
ddsd.dwFlags=DDSD_CAPS|DDSD_BACKBUFFERCOUNT;
ddsd.ddsCaps.dwCaps=DDSCAPS_PRIMARYSURFACE|DDSCAPS_COMPLEX|DDSCAPS_FLIP;
ddsd.dwBackBufferCount=1;
À§¿¡ ÀÖ´Â ºÎºÐÀÌ ÇÁ¶óÀ̸Ӹ® ¼ÆäÀ̽º¸¦ ¼³Á¤ÇÏ´Â ÇàÀÔ´Ï´Ù.
Àû»ö ¹®ÀÚÀÇ ºÎºÐÀº ¡¸À©µµ¿ì ¸ðµå¡¹¿¡¼´Â ÇÊ¿ä¾ø´Â ºÎºÐÀÔ´Ï´Ù.
À©µµ¿ì ¸ðµå´Â attach ÇÒ ¼ö ÀÖ´Â ¹é ¹öÆÛ¸¦ °¡Áú ¼ö ¾ø±â ¶§¹®¿¡
Çø³À» ÇÒ ¼ö°¡ ¾ø´Ù¡¤¡¤¡¤¡¤À̰ÍÀ» °í·ÁÇϸé À§ÀÇ Ç÷¡±×¸¦ Áö¿ì´Â ÀÌÀ¯¸¦ ÀÌÇØÇÒ ¼ö ÀÖ´Ù°í »ý°¢ÇÕ´Ï´Ù
ddsd.dwSize=
sizeof(ddsd);
ddsd.dwFlags=DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
ddsd.ddsCaps.dwCaps=DDSCAPS_OFFSCREENPLAIN;
ddsd.dwWidth = 640;
ddsd.dwHeight = 480;
dd->CreateSurface(&ddsd, &BackSurface,
NULL);
´ÙÀ½Àº º¯°æµÇ´Â ¹é ¹öÆÛÀÇ ¼ÆäÀ̽º¸¦ »ý¼ºÇÕ´Ï´Ù.
¿©±â´Â º¸ÅëÀÇ ¼ÆäÀ̽º¸¦ ¸¸µì´Ï´Ù.
À©µµ¿ì ¸ðµå¿¡¼ÀÇ ¹¦È
À©µµ¿ì ¸ðµå¿¡¼´Â attach µÈ ¹é ¹öÆÛ¸¦ °¡Áú ¼ö°¡ ¾ø±â ¶§¹®¿¡
Çø³ ¸Þ¼Òµå¿¡ ÀÇÇÑ ¹¦È¸¦ ÇÒ ¼ö ¾ø½À´Ï´Ù.
°Å±â¼ À©µµ¿ì ¸ðµåÀÏ ¶§´Â Ŭ¶óÀÌ¾ðÆ® ¿µ¿ª°ú °°Àº »çÀÌÁîÀÇ ¼ÆäÀ̽º¸¦ »ý¼ºÇؼ
¹¦È ÇØ ¹¦È°¡ ³¡³ª¸é ±× ¼ÆäÀ̽ºÀÇ ³»¿ë°ú ÇÁ¶óÀ̸Ӹ® ¼ÆäÀ̽º·Î Àü¼Û ÇÏ´Â
¹æ¹ýÀ¸·Î ¹¦È¸¦ ÇÕ´Ï´Ù.
À©µµ¿ì ¸ðµå¿¡¼ÀÇ ¹¦ÈÀÇ È帧Àº À§¿¡ ±×¸²¿¡ ³ªÅ¸³ ´ë·Î ¹é ¹öÆÛ(Çø³ ºÒ°¡)¿¡¼ ¡¸Blt¡¹¸¦ ÇÕ´Ï´Ù.
±× Àü¼ÛÇÒ °÷ÀÇ ÁÂÇ¥´Â À¯ÀúÀÇ ¼Õ¿¡ ÀÇÇØ Ç×»ó º¯°æ °¡´ÉÇÑ °ÍÀÌ À©µµ¿ì ¸ðµåÀÔ´Ï´Ù.
±× ¶§¹®¿¡ Ç×»ó ¿Ã¹Ù¸¥ À§Ä¡ÀÇ À©µµ¿ì ÁÂÇ¥¸¦ ÃëµæÇØ °Å±â¿¡ ¡¸Blt¡¹ÇØ¾ß ÇÕ´Ï´Ù.
À©µµ¿ì°¡ ¿òÁ÷¿´´Ù°í ÇÏ´Â ¸Þ¼¼Áö 󸮸¦ Ãß°¡ÇÕ´Ï´Ù.
À©µµ¿ì°¡ ¿òÁ÷ÀÌ¸é ¡¸WM£ßMOVE ¸Þ¼¼Áö¡¹°¡ ¹ßÇàµÇ¹Ç·Î ±× 󸮿¡
ÇöÀçÀÇ À©µµ¿ìÀÇ ±¸Çü À§Ä¡¸¦ ¾ò´Â 󸮸¦ ÇÕ´Ï´Ù.
¡¸Blt¡¹´Â À̰ÍÀ¸·Î ±¸ÇÒ ¼ö ÀÖ´ø °ªÀ» ¹ÙÅÁÀ¸·Î ¹¦È ÇÕ´Ï´Ù.
¿ì¼± ¡¸WM£ßMOVE ¸Þ¼¼Áö¡¹·Î À©µµ¿ìÀÇ °ªÀ» ¾ò´Â ó¸®(ÇÔ¼ö)¸¦
»ý°¢ÇØ º¾½Ã´Ù.
À̶ó°í ÇÒ±î, ȸ´äÀÌ ÀÌÇÏÀÔ´Ï´Ù
void GetClientRect(void)
{
POINT clientpos={0,0}
//Ŭ¶óÀÌ¾ðÆ® Æ÷Áö¼Ç
ClientToScreen(hwnd, &clientpos);
 
//À©µµ¿ìÀÇ Á»ó´Ü ÁÂÇ¥¸¦ ȸé ÁÂÇ¥·Î ÇÑ´Ù
 
//ScreenClientRect´Â ±Û·Î¹úÀÇ RECT ±¸Á¶Ã¼
ScreenClientRect.left=clientpos.x
//½ÃÁ¡ XÁÂÇ¥
ScreenClientRect.top=clientpos.y
//½ÃÁ¡ YÁÂÇ¥
ScreenClientRect.right=clientpos.x + _ScreenXsize;
 
//Á¾Á¡ XÁÂÇ¥
ScreenClientRect.bottom=clientpos.y + _ScreenYsize;
 
//Á¾Á¡ YÁÂÇ¥
 
//¡¡_¡¡¾ÕºÎºÐ¿¡ ¼ÂÆÃµÇ¾î ÀÖ´Â ¸ÅÅ©·ÎÀÔ´Ï´Ù.
 
//½ÃÁ¡¿¡ À©µµ¿ì »çÀÌÁîÀÇ ¸ÅÅ©·Î¸¦ Ãß°¡ÇÔÀ¸·Î
 
// Ŭ¶óÀ̾ðÆ®ÀÇ Å©±â¸¦ ¾Ë ¼ö ÀÖ½À´Ï´Ù.
}
±×·³ ó¸®ÀÇ ¼³¸íÀ» ÇÕ´Ï´Ù.
¡¸ClientToScreen ÇÔ¼ö¡¹´Â ÁöÁ¤µÈ À©µµ¿ì ÇÚµé(
HWND)ÀÇ À©µµ¿ìÀÇ Å¬¶óÀ̾ðÆ®
ÁÂÇ¥ÀÇ °ªÀ» ȸéÀÇ ÁÂÇ¥ °ªÀ¸·Î º¯°æÇØ ÁÝ´Ï´Ù.
ÀÌ °æ¿ì Ŭ¶óÀÌ¾ðÆ® °ª ¡¸clientpos¡¹´Â ȸéÀÇ ¡¸0, 0¡¹¸¦ ÀÌ ÇÔ¼ö¿¡ °Ç³×ÁÖ¾î
°á°ú, ¡¸clientpos¡¹¿¡´Â ½ºÅ©¸°(µð½ºÇ÷¹ÀÌÀÇ)ÀÇ ÁÂÇ¥°¡ °Ý³³µË´Ï´Ù.
À§ÀÇ »ùÇà ÄÚµåÀÇ ¡¸ScreenClientRect¡¹´Â
RECT ±¸Á¶Ã¼·Î ¡¸Blt¡¹ÇÒ ¶§ÀÇ
Ç¥½ÃÇÒ °÷ÀÇ °ªÀ» °Ý³³ÇÏ´Â ±Û·Î¹ú ±¸Á¶Ã¼ÀÔ´Ï´Ù.
±× ±¸Á¶Ã¼¿¡¼ ¾òÀ» ¼ö ÀÖ´ø ȸé ÁÂÇ¥¸¦ ¹ÙÅÁÀ¸·Î Ŭ¶óÀ̾ðÆ®ÀÇ °ª(rect)À» °Ç³×ÁÝ´Ï´Ù.
½ÃÀÛÁ¡Àº ¡¸ClientToScreen ÇÔ¼ö¡¹·Î ¾ò´Â °ª°ú °°½À´Ï´Ù.
³¡Á¡Àº ¾òÀº °ª£«Å¬¶óÀ̾ðÆ®ÀÇ »çÀÌÁî·Î ¾òÀ» ¼ö°¡ ÀÖ½À´Ï´Ù.
¹¦È´Â ÀÌ·¸°Ô µÈ´Ù
À©µµ¿ì ¸ðµå¿¡¼´Â ¡¸Çø³¡¹À» ÇÒ ¼ö ¾ø±â ¶§¹®¿¡.
¼Ò½ºÄÚµåÀÇ ¡¸Flip¡¹ÇÔ¼ö(È¸é ¹Ý¿µ ó¸®)´Â À§ÀÇ °ª(rect)À¸·Î ¡¸Blt¡¹µË´Ï´Ù.
void flip(void)
{
 
//MainSurface->Flip(NULL, DDFLIP_WAIT);
 
//À§´Â Ç® ½ºÅ©¸° ¸ðµå¿¡¼¸¸ À¯È¿
 
//À©µµ¿ì ¸ðµå¿¡¼´Â blt¿¡ ÀÇÇÑ Àü¼Û ¹¦È¸¦ ½Ç½ÃÇÑ´Ù
MainSurface->Blt(&ScreenClient
Rect, BackSurface,
NULL, DDBLTFAST_WAIT,
NULL);
}
Çø³ ºÒ°¡´ÉÇÑ ¹é ¹öÆÛ·ÎºÎÅÍ ¡¸Blt¡¹¸¦ »ç¿ëÇϰí Àü¼ÛÇÕ´Ï´Ù.
Àü¼ÛÇÒ °÷ÀÇ rect¿¡´Â ¹æ±Ý Àü À§¿¡¼ ¼³¸íÇÑ
RECT ±¸Á¶Ã¼¸¦ ÁöÁ¤ÇÕ´Ï´Ù.(Á¦1 ÆÄ¶ó¹ÌÅÍ)
À¯Àú°¡ À©µµ¿ìÀÇ À§Ä¡¸¦ º¯°æÇÏ¸é ¹¦ÈÇÒ °÷ÀÇ ÁÂÇ¥µµ ¹Ù²ò´Ï´Ù
ÇÁ¶óÀ̸Ӹ® ¼ÆäÀ̽ºÀÇ Å¬¸³
½ºÅ©¸° Àüü°¡ ¡¸ÇÁ¶óÀ̸Ӹ® ¼ÆäÀ̽º¡¹°¡ µÇ¹Ç·Î À©µµ¿ì ¸ðµåÀÇ DirectDraw´Â
ÀÚ½ÅÀÇ Å¬¶óÀÌ¾ðÆ® ¿µ¿ª ¿Ü¿¡µµ ¹¦È°¡ °¡´ÉÇÕ´Ï´Ù.
(miss´Â ȸé Àüü¸¦ ¹¦È ÇØ ¹ö·Á ´ë´ÜÇÑ ÀÏÀÌ µÇ¾ú½À´Ï´Ù. . .)
À̰ÍÀ» ¸·±â À§ÇØ ¡¸À©µµ¿ì¿¡ Ŭ¸³¡¹ÀÌ ÇÊ¿äÇÕ´Ï´Ù.
À̰ÍÀ» ÇÏÁö ¾ÊÀ¸¸é ȸéÀÌ ÀÌ»óÇÏ°Ô µÇ¾î ¹ö¸°´Ù.
dd->CreateClipper(0, &LpClip,
NULL);
if(LpClip->SetHWnd( 0, hwnd )!= DD_OK)
return FALSE;
if(MainSurface->SetClipper(LpClip) !=DD_OK)
return FALSE//¼ÆäÀ̽º¿¡ Ŭ¸³ ¼¼Æ®
¿©±â¼ Ŭ¸®ÆÛ¸¦ ¼³Á¤ÇÏ´Â °ÍÀÌ ¡¸ÇÁ¶óÀ̸Ӹ®¼ÆäÀ̽º¡¹¶ó°í ÇÏ´Â °Í¿¡ ÁÖÀÇÇϽʽÿÀ.
¹°·Ð, ¹é¼ÆäÀ̽º¿¡µµ ÇÊ¿äÇϰÚÁö¸¸. . .
À©µµ¿ì ¸ðµåÀÇ °æ¿ì, ÇÁ¶óÀ̸Ӹ® ¼ÆäÀ̽ºÀÇ Å¬¸®ÇÎÀº ¹ÝµíÀÌ ÇÊ¿äÇÕ´Ï´Ù.
¹é ¹öÆÛÀÇ Å¬¸³
½ÇÁ¦·Î ¹¦È¸¦ ½Ç½ÃÇÏ´Â ¹é ¹öÆÛ¿¡µµ Ŭ¸³À» SetÇÏÁö ¾ÊÀ¸¸é ȸ鳡¿¡¼ ij¸¯ÅͰ¡ »ç¶óÁö´Â Çö»óÀÌ µÇ¾î ¹ö¸³´Ï´Ù.
±×·¯³ª ÇÁ¶óÀ̸Ӹ® ¼ÆäÀ̽º¿¡ SetÇÔÀ¸·Î¡¤¡¤¡¤
if(LpClip->SetHWnd( 0, hwnd )!= DD_OK)
return FALSE;
ÀÌ·¯ÇÑ Ã³¸®´Â ºÒ°¡´ÉÇÕ´Ï´Ù.
¡¸SetHWnd ¸Þ¼Òµå¡¹´Â ÁöÁ¤ÇÑ À©µµ¿ì Çڵ鿡 Ŭ¸³ ¿µ¿ªÀ» SetÇÔÀ¸·Î
¹é ¹öÆÛ´Â °ü°è°¡ ¾ø´Â ´Ü¼øÇÑ ¸Þ¸ð¸® ¿µ¿ª¿¡ Áö³ªÁö ¾Ê±â ¶§¹®ÀÔ´Ï´Ù.
¡¸GetHWnd ¸Þ¼Òµå¡¹·Î Ŭ¸³ ¿µ¿ªÀ» ¼¼Æ® Çϸé, À©µµ¿ìÀÇ »çÀÌÁî¿Í °°Àº Å©±âÀÇ
Ŭ¸³ ¿µ¿ªÀÌ È¸é ÁÂÇ¥¡¸0, 0¡¹·ÎºÎÅÍ SetµË´Ï´Ù.
ÀÌ °æ¿ì, À©µµ¿ìÀÇ À§Ä¡¸¦ ¡¸0, 0¡¹·Î Çϸé Á¤»óÀûÀ¸·Î µ¿ÀÛÇϰí ÀÖ´Â °Íó·³ º¸ÀÔ´Ï´Ù¸¸
À©µµ¿ì¸¦ ¿òÁ÷ÀÌ¸é ¾ÈµÇ°Ô µË´Ï´Ù.
À̰ÍÀ» ÇØ°áÇÏ·Á¸é ¹é¼ÆäÀ̽º¿¡ ¹¦È ÇÒ ¶§ ÀÚÀÛÀÇ Å¬¸³ 󸮸¦ ¸¸µé±î¡¤¡¤¡¤¡¤
Àû´çÇÑ ¹æ¹ýÀ¸·Î.
if(LpClip->SetHWnd( 0, hwnd )!= DD_OK)
return FALSE;
±×¸®°í Ŭ¸³À» ¼¼Æ® Çϸé À©µµ¿ì ÇÚµéÀÌ °¡¸®Å°´Â À©µµ¿ìÀÇ »çÀÌÁî°¡
½ºÅ©¸°ÀÇ ¡¸0, 0¡¹·ÎºÎÅÍ ¼¼Æ® µÇ±â ¶§¹®¿¡¡¤¡¤¡¤¡¤
À©µµ¿ì ¸ðµå¿¡¼´Â ȸéÀÇ »çÀÌÁî¿Í °°Àº Å©±âÀÇ Å¬¸³ ¿µ¿ªÀ» ¼¼Æ® ÇÕ´Ï´Ù.
typedef struct{
RGNDATAHEADER rdh;
RECT rect[256];
}MYRGNDATA;
MYRGNDATA rgn;
rgn.rdh.dwSize =
sizeof(RGNDATAHEADER);
rgn.rdh.iType = RDH_RECTANGLES;
rgn.rdh.nCount = 1;
rgn.rdh.nRgnSize =
sizeof(
RECT);
rgn.rdh.rcBound.left = 0;
rgn.rdh.rcBound.top = 0;
rgn.rdh.rcBound.right = GetSystemMetrics(SM_CXSCREEN);
rgn.rdh.rcBound.bottom = GetSystemMetrics(SM_CYSCREEN);
rgn.rect[0].left = 0;
rgn.rect[0].top = 0;
rgn.rect[0].right = GetSystemMetrics(SM_CXSCREEN);
rgn.rect[0].bottom = GetSystemMetrics(SM_CYSCREEN);
if(dd->CreateClipper(0, &LpClipBack,
NULL) != DD_OK)
return FALSE;
LpClipBack->SetClipList((RGNDATA*) &rgn, 0);
if(BackSurface->SetClipper(LpClipBack) !=DD_OK)
return FALSE//¼ÆäÀ̽º¿¡ Ŭ¸³ ¼¼Æ®
À§´Â ȸé Àüü¸¦ Ŭ¸³ ¿µ¿ª¿¡ ¼¼Æ® Çϴ ó¸®ÀÔ´Ï´Ù.
¼¼Æ® ÇÏ´Â ¿µ¿ªÀ» °Ý³³Çϴ ó¸®°¡ ´ëºÎºÐÀÔ´Ï´Ù.
¶Ç, ÀÌ Ã³¸®¸¦ ¶§¹®¿¡ ¶Ç ÇϳªÀÇ Å¬¸³ ¿ÀºêÁ§Æ®¸¦ ÇÊ¿ä·Î ÇÕ´Ï´Ù.
¡¸LpClipBack¡¹»õ·Î¿î Ŭ¸®ÆÛ ¿ÀºêÁ§Æ® Æ÷ÀÎÅ͸¦ Á¤ÀÇÇÕ´Ï´Ù.
¡¸SetClipList ¸Þ¼Òµå¡¹´Â MYRGNDATA ±¸Á¶Ã¼¿¡ °Ç³×ÁÖ°í ÀÖ´Â °ªÀ» Ŭ¸®ÆÛ ¿ÀºêÁ§Æ®
¿¡ SetÇÕ´Ï´Ù.
ÀÌ ÈÄ, ¡¸SetClipper¡¹¸¦ ÇÏ¸é ¼³Á¤ÀÌ µË´Ï´Ù.
/////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////
À©µµ¿ì¡¤Ç® ½ºÅ©¸° ¾ç¸ðµå ´ëÀÀ
½ÃÆÇµÇ°í ÀÖ´Â WINDOWS °ÔÀÓÀº Ç® ½ºÅ©¸°, À©µµ¿ì ¸ðµåÀÇ ¾çÂÊ ¸ðµÎ¸¦
´ëÀÀÇϰí ÀÖ´Â °ÔÀÓÀÌ ¸¹½À´Ï´Ù.
À̹øÀº ÇÁ·Î±×·¥À» ¾ç ´ëÀÀÀ¸·Î ¼³Á¤ÇØ º¾´Ï´Ù.
¾ç´ëÀÀÀÇ ÇÁ·Î±×·¥Àº À¯ÀúÀÇ ¸ðµå º¯È¯À» Ç×»ó °Ë»öÇØ ¸ðµåº¯È¯ÀÌ ¹ß»ýÇϸé
À©µµ¿ì Ŭ·¡½º¸¦ ÀçÁ¤ÀÇÇØ¼ ¹¦È(Çø³)¸¦ º¯°æÇÕ´Ï´Ù.
¿£ÅÍ۸¦ ´©¸£¸é ½ºÅ©¸° ¸ðµå°¡ º¯°æµË´Ï´Ù.
¹¦È °èÅëÀ» º¯°æÇÑ´Ù
óÀ½ÀÇ º¯°æÇÒ °÷Àº¡¸Çø³¡¹¡¤¡¤¡¤¡¤¹¦È ó¸®ÀÇ ºÎºÐÀÔ´Ï´Ù.
Ç® ½ºÅ©¸° ¸ðµå¿¡¼´Â ¡¸Çø³¡¹Àº °¡´ÉÇÏÁö¸¸¡¤¡¤¡¤¡¤À©µµ¿ì ¸ðµå¿¡¼´Â
¡¸Çø³¡¹À» ÇÒ ¼ö°¡ ¾ø½À´Ï´Ù.
¶§¹®¿¡ À©µµ¿ì ¸ðµåÀÏ ¶§, Ç® ½ºÅ©¸° ¸ðµåÀÏ ¶§·Î.
µð½ºÇ÷¹ÀÌ¿¡ ¹¦È¸¦ ¹Ý¿µÇϰí ÀÖ´ø 󸮸¦ ³ª´²¾ß ÇÕ´Ï´Ù.
MainSurface->Flip(
NULL, DDFLIP_WAIT);
//Çø³Àº Ç® ½ºÅ©¸° ¸ðµåÀÏ ¶§ ¹Û¿¡ ½ÇÇàÇÒ ¼ö ¾ø´Ù
MainSurface->Blt(
NULL, BackSurface,
NULL, DDBLTFAST_WAIT,
NULL);
//À©µµ¿ì ¸ðµå¿¡¼´Â blt¿¡ ÀÇÇÑ Àü¼Û ¹¦È¸¦ ÇÑ´Ù
¹¦È¿¡´Â ¸ðµå¿¡ ÀÇÇØ À§ÀÇ 2°¡Áö ¹æ¹ýÀÌ ÀÖ½À´Ï´Ù.
À§ÀÇ ¹æ¹ýÀ» ÇöÀçÀÇ ¸ðµå¿¡ ÀÇÇØ ºÐ±â ÇÏ·Á¸é ÇöÀçÀÇ ÇùÁ¶ ·¹º§À» Á¶»çÇÏ´Â °ÍÀ¸·Î °¡´ÉÇÕ´Ï´Ù.
if(dd->SetCooperativeLevel(hwnd, ncoop)!=DD_OK)
return FALSE;
//ÇùÁ¶
À§°¡ ÇùÁ¶·¹º§À» SetÇϰí ÀÖ´Â ºÎºÐÀÔ´Ï´Ù.
Á¦2 ÆÄ¶ó¹ÌÅÍ´Â ÇùÁ¶ Ç÷¡±×¸¦ °Ç³×ÁÝ´Ï´Ù.
ÀÌ ºÎºÐÀ» º¯¼ö·Î ÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.
(¸ðµå¸¦ º¯È¯ÇÒ ¶§´Â ÀÌ º¯¼ö¸¦ ¹Ù²Ù¾î ÇùÁ¶ ·¹º§À» ¼³Á¤À» ´Ù½Ã Çϱâ À§Çؼ »ç¿ëÇÑ´Ù)
DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN
À§ÀÇ ÄÚµå´Â Ç® ½ºÅ©¸°ÀÇ Ç÷¡±×ÀÔ´Ï´Ù.
ƯÈ÷ °Á¶ ¹®ÀÚÀÇ ¡¸DDSCL_FULLSCREEN¡¹Àº ¹Ýµå½Ã Ç® ½ºÅ©¸° ¸ðµåÀÏ ¶§ ÇÊ¿äÇÏ°Ô µË´Ï´Ù.
¡¤¡¤¡¤¡¤·Î ¡¸ncoop º¯¼ö(
WORDÇü)¡¹°¡ ¡¸DDSCL_FULLSCREEN¡¹À϶§
Ç® ½ºÅ©¸° ¸ðµå¶ó´Â °ÍÀ» ¾Ë¼ö ÀÖ½À´Ï´Ù.
¡¸ncoop º¯¼ö¡¹¿¡ ¡¸DDSCL_FULLSCREEN¡¹°¡ ¾øÀ» ¶§´Â À©µµ¿ì ¸ðµå°¡ µË´Ï´Ù.
if(ncoop&DDSCL_FULLSCREEN)
{
if( MainSurface->Flip(
NULL, DDFLIP_WAIT) != DD_OK)
return FALSE;
}
else
{
if( MainSurface->Blt(&rect, BackSurface,
NULL, DDBLT_WAIT,
NULL) != DD_OK)
return FALSE;
}
¹¦È 󸮴 À§Ã³·³ µË´Ï´Ù.
¡¸ncoop º¯¼ö¡¹¸¦ ¡¸DDSCL_FULLSCREEN Ç÷¡±×¡¹¿Í¡¸AND ó¸®(&¿¬»êÀÚ)¡¹ÇÏ´Â °ÍÀ¸·Î
¡¸ncoop º¯¼ö¡¹¾È¿¡ ¡¸DDSCL_FULLSCREEN Ç÷¡±×¡¹°¡ Æ÷ÇԵǴÂÁö¸¦ üũÇÕ´Ï´Ù.
Æ÷ÇԵǴ °æ¿ì´Â ÇöÀçÀÇ ¸ðµå°¡ ¡¸Ç® ½ºÅ©¸° ¸ðµå¡¹°¡ µÇ¹Ç·Î
¡¸Flip ¸Þ¼Òµå¡¹¿¡ ÀÇÇÑ ¹¦È¸¦ ÇÕ´Ï´Ù.
¼ÆäÀ̽º ÆÄ±«¿¡ ´ëÇØ
Ç® ½ºÅ©¸° ¸ðµå¿¡¼ À©µµ¿ì ¸ðµå·Î º¯°æÇÒ ¶§, ¸Þ¸ð¸®»ó¿¡ ÀÖ´Â ¼ÆäÀ̽º´Â ¸ðµÎ
»èÁ¦µË´Ï´Ù.(¹Ý´ëÀÇ °æ¿ìµµ °°´Ù)
Ç® ½ºÅ©¸°Àº ºñµð¿À ¸Þ¸ð¸®¸¦ µ¶Á¡Çϰí ÀÖ´Â ¸ðµåÁö¸¸, À©µµ¿ì ¸ðµå´Â ¸ðµç ¾îÇø®ÄÉÀ̼ÇÀÌ ºñµð¿À¸Þ¸ð¸®¸¦ °øÀ¯Çϰí ÀÖ½À´Ï´Ù.
Ç® ½ºÅ©¸°À¸·ÎºÎÅÍ À©µµ¿ì ¸ðµå·Î º¯°æÇÒ ¶§, Ç® ½ºÅ©¸° ¸ðµå°¡
»ç¿ëÇϰí ÀÖ´ø ºñµð¿À¸Þ¸ð¸®¸¦ ½Ã½ºÅÛ º¹±Í¸¦ À§ÇØ ÇØ¹æÇØ¾ß ÇÏ´Â °ÍÀÔ´Ï´Ù.
¼ÆäÀ̽º°¡ ÆÄ±«µÇ´Â(³»¿ëÀÌ ¼Ò½ÇµÈ´Ù) °ÍÀ¸·Î È¸é ¸ðµå º¯°æ ÈÄ ¼ÆäÀ̽º¸¦
´Ù½Ã »ý¼ºÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.
°³³ä)
ÇÎÅ©»öÀÇ Å©±âÀÇ ¸Þ¸ð¸® °ø°£ÀÌ ÇÊ¿äÇÏ°Ô µË´Ï´Ù.(Àå¼Ò´Â ºÒ¸í)
ºí·çÀÇ À̹ÌÁö¸¦ °Ý³³Çϰí ÀÖ´ø °ø°£Àº ¹æÇذ¡ µÇ¹Ç·Î ÇØ¹æÇÕ´Ï´Ù.
¼ÆäÀ̽º º¹±Í
¼ÆäÀ̽ºÀÇ ³»¿ë¡¤¡¤¡¤À̹ÌÁö´Â ÆÄ±«µÇÁö¸¸, ¼ÆäÀ̽ºÀÇ ÀÎÅÍÆäÀ̽º´Â ¾ÆÁ÷ Á¸ÀçÇϰí ÀÖ½À´Ï´Ù.
È¸é ¸ðµåÀÇ º¯È¯ÀÌ Á¾·áµÇ¾î ¾îÇø®ÄÉÀ̼ÇÀÇ Ã³¸®°¡ °³½ÃµÇ¸é ¼ÆäÀ̽º ¸Þ¼Òµå ¡¸Restore¡¹¸¦ »ç¿ëÇÔÀ¸·Î ¾ø¾îÁø ¼ÆäÀ̽º ¿µ¿ªÀ» ´Ù½Ã È®º¸ÇØ ÁÝ´Ï´Ù.
±×·¯³ª ¸Þ¸ð¸® ¿µ¿ªÀ» È®º¸ÇØ ÁÙ »ÓÀ̹ǷΠ¿µ¿ª¿¡ ´Ù½Ã ¹¦È 󸮸¦ ½Ç½ÃÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.
¡¸Restore ¸Þ¼Òµå¡¹´Â »ý¼ºÇÑ ¸ðµç ¼ÆäÀ̽º¿¡¼ »ç¿ëÇØ¾ß ÇÕ´Ï´Ù.
¼ÆäÀ̽º·Î½ºÆ®ÀÇ °ËÃâ
¼ÆäÀ̽º ÆÄ±«´Â ½ºÅ©¸° ¸ðµå¸¦ º¯°æÇßÀ» ¶§¿¡µµ ¹ß»ýÇÏÁö¸¸ ´Ù¸¥ ¿øÀο¡¼µµ ¹ß»ýÇÕ´Ï´Ù.
¡¸Blt ¸Þ¼Òµå¡¹¸¦ »ç¿ëÇßÀ» ¶§ ¡¸Blt ¸Þ¼Òµå¡¹°¡ ¸®ÅÏ °ªÀ¸·Î ÇØ¼ ¡¸DDERR_SURFACELOST¡¹¸¦ µ¹·ÁÁÖ¾úÀ» ¶§, ¼ÆäÀ̽º°¡ ÆÄ±«µÈ °ÍÀ» ÀǹÌÇÕ´Ï´Ù.
(ÇïÇÁ ÂüÁ¶)
¡¸DDERR_SURFACELOST¡¹°¡ ¸®ÅÏ µÆ´Ù¡¤¡¤¡¤¡¤¡¤Áï, µð½ºÇ÷¹ÀÌ ¸ðµå°¡ º¯°æµÇ¾ú´ÂÁö
ÇϵîÀÇ ÀÌÀ¯·Î ¼ÆäÀ̽º°¡ ÆÄ±«(·Î½ºÆ®)µÈ °ÍÀÌ µË´Ï´Ù.
À̰ÍÀ¸·Î ¼ÆäÀ̽ºÀÇ ÆÄ±«¸¦ °ËÃâÇÒ ¼ö ÀÖ¾úÀ¸¹Ç·Î ³ª¸ÓÁö´Â ´Ù¸¥ ¶§ÀÇ Ã³¸®(Restore ó¸®)¸¦ ½ÇÇà½Ã۸é OK¡¤¡¤¡¤¡¤ÀÏ °ÍÀÔ´Ï´Ù.
¼Ò½ºÄÚµå ÇØ¼³
¿ì¼± Ç® ½ºÅ©¸° ¸ðµå¿Í À©µµ¿ì ¸ðµåÀÇ ¾çÂÊ ¸ðµÎ¸¦ °¡´ÉÇÏ°Ô Çϱâ À§Çؼ ÇöÀç ¾î´À ¸ðµåÀÎÁö¸¦ ¾Ë¾Æ µÑ Çʿ䰡 ÀÖ½À´Ï´Ù.
ncoop=DDSCL_NORMAL;
¡¸ncoop º¯¼ö¡¹´Â µð½ºÇ÷¹ÀÌÀÇ ÇùÁ¶¸¦ ½Ç½ÃÇÏ´Â Ç÷¡±×ÀÔ´Ï´Ù.
ÀÌ º¯¼ö¿¡´Â ¸ðµåÀÇ Ç÷¡±×°¡ µé¾î°©´Ï´Ù.Ãʱ⠰ªÀ» ¡¸DDSCL_NORMAL¡¹·Î ÇϹǷÎ
óÀ½ÀÇ ±âµ¿Àº ¡¸À©µµ¿ì ¸ðµå¡¹°¡ µË´Ï´Ù.
¼Ò½ºÄڵ忡¼´Â ¡¸¿£ÅÍŰ¡¹°¡ ´·ÈÀ» ¶§¿¡ ½ºÅ©¸° ¸ðµå¸¦ º¯°æÇϹǷÎ. . .
ÇöÀç À©µµ¿ì ¸ðµåÀÏ ¶§´Â ¡¸ncoop º¯¼ö¡¹¿¡ ¡¸DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN¡¹¸¦ °Ç³×ÁÖ¸é Ç® ½ºÅ©¸°ÀÌ µË´Ï´Ù.
µ¡ºÙ¿©¼ ¿£ÅÍ۸ÞÅ©·Î´Â ¡¸
VK_RETURN¡¹ÀÔ´Ï´Ù
void changescreen(void);
À§ÀÇ ÇÔ¼ö´Â, ¿£ÅÍ۰¡ ´·ÈÀ» ¶§¿¡ 󸮵Ǵ ÇÔ¼öÀÔ´Ï´Ù.
ó¸®ÀÇ ³»¿ëÀº¡¤¡¤¡¤¡¤
ÇöÀçÀÇ ¸ðµå¸¦ Á¶»çÇØ¼ Ç÷¡±×¸¦ °íÃÄ ¾´´Ù.
À©µµ¿ì Ŭ·¡½º¸¦ °»½Å.
ÇùÁ¶¸¦ ÀçÂ÷ ½Ç½ÃÇÑ´Ù.
BOOL changescreen(void)
{
if(nccop&DDSCL_FULLSCREEN){  
//ÇöÀç Ç® ½ºÅ©¸°
if(DD_OK!=dd->RestoreDisplayMode())
return FALSE;  
//ÇØ»óµµ¸¦ ¹ÙÅÁÀ¸·Î µÇµ¹¸°´Ù
nccop = DDSCL_NORMAL;
 
//Ç÷¡±×¸¦ À©µµ¿ì ¸ðµå·Î ÇÑ´Ù
}
else{  
//ÇöÀç À©µµ¿ì ¸ðµå
ncoop = DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN;
}
return TRUE;
}
À§´Â Ç÷¡±× º¯È¯ ó¸®ÀÔ´Ï´Ù.
¡¸ncoop º¯¼ö¡¹ÀÇ ³»¿ëÀ» ¡¸&(ºñÆ®¸¶´ÙÀÇ AND)¡¹·Î ÇöÀçÀÇ ¸ðµå¸¦ Á¶»çÇÕ´Ï´Ù.
ÇöÀç, Ç® ½ºÅ©¸° ¸ðµåÀ϶§¡¤¡¤¡¤¡¤¡¤¡¸ncoop º¯¼ö¡¹¿¡ ¡¸DDSCL_NORMAL¡¹
À» ³Ö½À´Ï´Ù.(À©µµ¿ì ¸ðµå¸¦ ³ªÅ¸³»´Â Ç÷¡±×)
±× Àü¿¡ µð½ºÇ÷¹ÀÌÀÇ ÇØ»óµµ¸¦ ¹ÙÅÁÀ¸·Î µÇµ¹¸³´Ï´Ù.
¾Æ¸¶ 640¡¿480À̶ó°í ÇÏ´Â »çÀÌÁîÀÇ ÇØ»óµµ°¡ µÇ¾î ÀÖÀ» °ÍÀ̹ǷÎ.
º¯°æÀüÀÇ ÇØ»óµµ·Î ´Ù½Ã µ¹·Á ÁÝ´Ï´Ù.
À̰ÍÀº ¡¸RestoreDisplayMode ¸Þ¼Òµå¡¹·Î °¡´ÉÇÕ´Ï´Ù.(ÆÄ¶ó¹ÌÅÍ ¾øÀ½)
±×·±µ¥¡¤¡¤¡¤¡¤À̰ÍÀ¸·Î ¿øÇÏ´Â ¸ðµå¿¡ Ç÷¡±×¸¦ º¯°æÇÒ ¼ö ÀÖ¾úÁö¸¸.
ÀÌ´ë·Î´Â ¹®Á¦°¡ ÀÖ½À´Ï´Ù.
À©µµ¿ì Ŭ·¡½º¸¦ ÀçÁ¤ÀÇÇØ À©µµ¿ìÀÇ Çü»óÀ» º¯°æÇÏÁö ¾ÊÀ¸¸é
À©µµ¿ì·ÎºÎÅÍ Ç® ½ºÅ©¸°¿¡ º¯°æÇßÀ» °æ¿ì¿¡ Å׵θ®³ª ¸Þ´º°¡ ³²´Â Àϵµ »ý°¢ÇÒ ¼ö ÀÖ½À´Ï´Ù.
¹Ý´ë·Î Ç® ½ºÅ©¸°ÀÇ À©µµ¿ìÀÇ °æ¿ì´Â ¸Þ´º³ª Å׵θ®°¡ Ç¥½ÃµÇÁö ¾Ê´Â °ÍÀÌ µÇ¾î ¹ö¸³´Ï´Ù.
BOOL changescreen(void)
{
if(ncoop&DDSCL_FULLSCREEN){
 
//ÇöÀç Ç® ½ºÅ©¸°-À©µµ¿ì¿¡
if(DD_OK!=dd->RestoreDisplayMode())
 
//ÇØ»óµµ¸¦ ¹ÙÅÁÀ¸·Î µÇµ¹¸°´Ù
return FALSE;
ncoop = DDSCL_NORMAL;
 
//Ç÷¡±×¸¦ À©µµ¿ì ¸ðµå·Î ÇÑ´Ù
}
else{
//ÇöÀç À©µµ¿ì ¸ðµå-Ç® ½ºÅ©¸°¿¡
ncoop = DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN;
}
 
//À©µµ¿ì Ŭ·¡½º¸¦ °»½Å
if(ncoop&DDSCL_EXCLUSIVE)
if(!SetWindowLong(hwnd, GWL_STYLE, WS_POPUP))
 
//Ç® ½ºÅ©¸°¿¡ ÀÖ´ø À©µµ¿ì·Î ÇÑ´Ù
return FALSE;
if(dd->SetCooperativeLevel(hwnd, ncoop)!=DD_OK)
return FALSE;
//ÇùÁ¶
if(ncoop&DDSCL_EXCLUSIVE){
 
//µð½ºÇ÷¹ÀÌ ¸ðµåÀÇ º¯°æ
 
// . . . À̰ÍÀº Ç® ½ºÅ©¸°À¸·Î ÇÒ ¶§¸¸
if(dd->SetDisplayMode(640,480,16)!=DD_OK)
return FALSE;
}
else{
if(!SetWindowLong(hwnd, GWL_STYLE,
 
//À©µµ¿ì ¸ðµå¿¡ ÀÖ´ø À©µµ¿ì¿¡ ÀçÁ¤ÀÇÇÑ´Ù
WS_POPUP | WS_CAPTION |
WS_SYSMENU | WS_BORDER|
WS_MINIMIZEBOX |
WS_VISIBLE))
return FALSE;
RECT rect={0,0,640,480};
AdjustWindowRect(&rect, GetWindowStyle(hwnd),
GetMenu(hwnd)!=
NULL);
 
//À©µµ¿ì¸¦ ¹¦È ÇÏ´Â À§Ä¡¸¦ rect ±¸Á¶Ã¼¿¡ ³Ö½À´Ï´Ù.
 
//¡é£ºÀ©µµ¿ì Ç¥½Ã ÁÂÇ¥¸¦
 
// Set(ÆÄ¶ó¹ÌÅÍ´Â ÇïÇÁ ÂüÁ¶ (WindowsX.h))
SetWindowPos(hwnd,
NULL, 0, 0,
(rect.right - rect.left),
(rect.bottom - rect.top),
SWP_NOMOVE|
SWP_NOZORDER|
SWP_NOACTIVATE);
SetWindowPos(hwnd, HWND_NOTOPMOST, 0,0,0,0,
SWP_NOSIZE |
SWP_NOMOVE | SWP_NOACTIVATE);
}
 
//À§¿¡¼ ½ºÅ©¸° ¸ðµå´Â º¯°æµÇ¾ú´Ù. ±×·¯³ª ¼ÆäÀ̽º´Â ¾ø¾îÁ³´Ù.
return TRUE;
}
À©µµ¿ì Ŭ·¡½ºÀÇ ÀçÁ¤ÀÇ´Â ¡¸SetWindowLong ÇÔ¼ö¡¹·Î °¡´ÉÇÕ´Ï´Ù.
ÁÖ·Î À©µµ¿ì Ŭ·¡½º Á¤ÀÇ¿¡ ¡¸ Á¦4 ÆÄ¶ó¹ÌÅÍ¡¹¡¤¡¤¡¤À©µµ¿ìÀÇ ¸ð½ÀÀ» º¯°æÇÕ´Ï´Ù.
(Ç÷¡±×¿¡ ´ëÇØ¼´Â ÇïÇÁ ÂüÁ¶)
Ç® ½ºÅ©¸°¿¡¼ À©µµ¿ì·Î
ÀÌ ¶§, ÇØ»óµµ¸¦ ¿ø·¡´ë·Î µÇµ¹¸° °Í ¸¸À¸·Î´Â ¾îÇø®ÄÉÀ̼ÇÀÇ À©µµ¿ì ÆøÀº ¿ø·¡´ë·Î
µ¹¾Æ¿ÀÁö ¾Ê½À´Ï´Ù.
¿ø·¡ÀÇ ÇØ»óµµ¡¤¡¤¡¤¡¤ÇÏÁö¸¸ ȸ鿡´Â ÇϳªÀÇ À©µµ¿ì·Î¼ Ç¥½ÃµË´Ï´Ù.
°Å±â¼ À©µµ¿ì ¸ðµå·Î ÀüȯÇÒ ¶§´Â ±× »çÀÌÁî.À§Ä¡µµ ¼³Á¤ÇØ ÁÖÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù
±×°ÍÀÌ »ý¼ºµÇ´Â °ÍÀº ¡¸SetWindowPos ÇÔ¼ö¡¹ÀÔ´Ï´Ù.
À§ÀÇ °æ¿ìÀ϶§ µð½ºÇ÷¹ÀÌ ¸ðµå´Â ±³Ã¼µÇÁö¸¸ ¼ÆäÀ̽ºÀÇ ³»¿ëÀº ÆÄ±«µÇ°í
¡¸Blt ¸Þ¼Òµå¡¹´Â ¡¸DDERR_SURFACELOST¡¹ÀÇ ¹Ýȯ ¹¦È°¡ ¹Ý¿µµÇÁö ¾Ê°Ô µË´Ï´Ù.
¿©±â¼ ¼ÆäÀ̽ºÀÇ º¹¿øÀÌ ÇÊ¿äÇÏ°Ô µÇ´Â °ÍÀÔ´Ï´Ù.
¡¸Restore ¸Þ¼Òµå¡¹¸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀÌ ÀÖÀ¸¸é(À§¿¡¼µµ ´Ù·ç¾úÀ¸³ª)
¼ÆäÀ̽º ·Î½ºÆ®°¡ ¹ß»ýÇßÀ» ¶§´Â ¼ÆäÀ̽º¸¦ ¿ÏÀüÇÏ°Ô ÆÄ±âÇØ ´Ù½Ã »õ·Ó°Ô ¸¸µç´Ù.
¼ÆäÀ̽º ·Î½ºÆ®°¡ ¹ß»ýÇßÀ» ¶§´Â ¡¸initsurface ÇÔ¼ö¡¹¸¦ È£ÃâÇÕ´Ï´Ù(°¿ä´Â ¾Æ´Ô).
ÀÌ ÇÔ¼ö´Â »õ·Ó°Ô ¼ÆäÀ̽º¸¦ »ý¼ºÇÏ´Â ÇÔ¼ö·Î ÁغñµÇ¾î ÀÖ½À´Ï´Ù.
±×¸®°í, ±× ¼±µÎ¿¡¡¤¡¤¡¤¡¤
if(MainSurface){
 
//ÇÁ¶óÀ̸Ӹ® ¼ÆäÀ̽º°¡ »ý¼ºµÇ¾î ÀÖ´Ù¸é ÇØ¹æ
MainSurface->Release();
MainSurface=
NULL;
}
if(mapsurface){
 
// ÇÁ¶óÀ̸Ӹ® ¼ÆäÀ̽º°¡ »ý¼ºµÇ¾î ÀÖ´Ù¸é ÇØ¹æ
mapsurface->Release();
mapsurface=
NULL;
}
if(sprite){ ÇÁ¶óÀ̸Ӹ® ¼ÆäÀ̽º°¡ »ý¼ºµÇ¾î ÀÖ´Ù¸é ÇØ¹æ
sprite->Release();
sprite=
NULL;
}
¸¦ Ãß°¡ÇÕ´Ï´Ù.
º¸¸é ¾Ë ¼ö ÀÖµíÀÌ ¼ÆäÀ̽º°¡ Á¸ÀçÇÏ¸é ÆÄ±âÇÕ´Ï´Ù.
¾îÇø®ÄÉÀ̼ÇÀ» ±âµ¿ÇØ 1ȸ°¿¡ ÀÌ Ã³¸®´Â ½ÇÇàµÇÁö ¾Ê½À´Ï´Ù.(´ç¿¬ ¼ÆäÀ̽º´Â ¾øÀ¸´Ï±î)
±×·¯³ª ¼ÆäÀ̽º·Î½ºÆ®°¡ ¹ß»ýÇØ ÀÌ ÇÔ¼ö¸¦ ºÎ¸£¸é
ÇöÁ¸ ÇÏ´Â ¼ÆäÀ̽º¸¦ ¿ÏÀü ÆÄ±âÇØ ´Ù½Ã »õ·Ó°Ô ¸¸µé¾î ÁÝ´Ï´Ù.
½ºÅ©¸° ¸ðµå¿¡ ÀÇÇØ ¼ÆäÀ̽ºÀÇ ¼Ó¼ºÀÌ ¹Ù²î¹Ç·Î ±× 󸮵µ Ãß°¡Çϰí ÀÖ´Ù.
ÇÁ·Î±×·¥ÀÌ Ä¿Á® °¡¹Ç·Î À§ÀÇ ÇØ¹æ 󸮴 ÇÔ¼öÈ ÇÏ´Â °ÍÀÌ ÁÁÀ»Áöµµ ¸ð¸¥´Ù
±×¸®°í, ÇÔ¼öÀÇ ¸¶Áö¸·¿¡¡¤¡¤¡¤¡¤
if(!(sprite=loadbmp(
"mychr.bmp")))
return FALSE;
if(!(mapsurface=loadbmp(
"map.bmp"))
)//¸Ê Ç¥¸é »ý¼º
return FALSE;
¸¦ Ãß°¡ÇÏ´Â °ÍÀ¸·Î ¼ÆäÀ̽º¸¦ ¿ÏÀüÇÏ°Ô ¿ø·¡´ë·Î µÇµ¹¸± ¼ö°¡ ÀÖ½À´Ï´Ù.
(µ¡ºÙ¿©¼ À§ÀÇ Ã³¸®´Â Áö±Ý±îÁö¡¡¡¸CreateDraw ÇÔ¼ö·Î È£ÃâÇß¾ú½À´Ï´Ù¸¸ ºÎÀûÀýÇÑ °÷ÀÌ µÇ¹Ç·Î Àå¼Ò º¯°æ)
¼ÆäÀ̽ºÀÇ ÆÄ¶ó¹ÌÅÍ
¼ÆäÀ̽ºµµ Ç® ½ºÅ©¸°¡¤À©µµ¿ì¿¡¼´Â ±× ¼ºÁúÀÌ ´Þ¶ó Áý´Ï´Ù.
Ç® ½ºÅ©¸°ÀÏ ¶§´Â ¡¸attach °¡´É¡¹À¸·Î ¡¸Çø³ °¡´É¡¹
À©µµ¿ì ¸ðµåÀÏ ¶§´Â ¡¸attach ºÒ°¡¡¹,¡¸Çø³ ºÒ°¡¡¹ÀÔ´Ï´Ù.
¶§¹®¿¡ ¡¸initsurface ÇÔ¼ö¡¹µµ º¯°æÇÏ°í ½ÍÀº ¸ðµåÀÇ Ç÷¡±×¿¡ ÀÇÇØ
»ý¼º ¶Ç´Â Áö¿ì´Â ±â´ÉÀ» ¼ÆäÀ̽ºÀÇ ÆÄ¶ó¹ÌÅ͸¦ ³ª´©Áö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù.
À©µµ¿ì ¸ðµå·Î ÇÏ°í ½ÍÀ¸¸é¡¤¡¤¡¤¡¤¡¤
¡¸attach °¡´É¡¹ ¡¸¹é ¹öÆÛ ÀÖÀ½¡¹ ¡¸Çø³ °¡´É¡¹ÀÇ ¼ÆäÀ̽º¸¦
¸¸µé¾î¾ß ÇÕ´Ï´Ù.
Áö±Ý±îÁöÀÇ ¡¸initsurface ÇÔ¼ö¡¹´Â ¾î´À ÂÊÀÎÁö ´Ù¸¥ ÇÑÂÊÀÇ ¼ÆäÀ̽º »ý¼º¸¸ÀÇ Ã³¸®¿´½À´Ï´Ù.
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
À©µµ¿ì ¸ðµåÀÇ ¹¦È
Áö±Ý±îÁöÀÇ À©µµ¿ì ¸ðµåÀÇ »ùÇÃÀº ȸéÀÌ ÀǵµÇÏÁö ¾Ê´Â ÇüÅ·ΠȮ´ëµÇ°í ÀÖÁö ¾Ê¾Ò½À´Ï±î?
±×°ÍÀº ¡¸flip ÇÔ¼ö¡¹¿¡ ¹®Á¦°¡ Àֱ⠶§¹®ÀÔ´Ï´Ù.
void flip(void)
{
if(ncoop&DDSCL_FULLSCREEN){
MainSurface->Flip(
NULL, DDFLIP_WAIT);
}
else{
MainSurface->Blt(
NULL, BackSurface,
NULL,
DDBLTFAST_WAIT,
NULL);
}
}
ÀÌ ºÎºÐÀÌ Çø³(¹¦ÈÀÇ È¸é ¹Ý¿µ) ó¸®ÀÔ´Ï´Ù.
Ç® ½ºÅ©¸° ¸ðµåÀÇ °æ¿ì´Â ÁÂÇ¥°¡ º¯ÇÔ¾ø±â ¶§¹®¿¡ ¹®Á¦ ¾ø½À´Ï´Ù.
À©µµ¿ì ¸ðµåÀÇ °æ¿ì´Â ¹¦ÈÇÒ °÷ÀÇ ÁÂÇ¥´Â ¡¸È¸é ÁÂÇ¥¡¹¡¤¡¤¡¤¡¤
Áï µð½ºÇ÷¹ÀÌ ´ÜÀ§ÀÇ ÁÂÇ¥ °ªÀ¸·Î ¹¦ÈÇÒ °÷À» °Ç³×ÁÖÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù.
MainSurface->Blt(
NULL, BackSurface,
NULL, DDBLTFAST_WAIT,
NULL);
À§´Â À©µµ¿ì ¸ðµåÀÏ ¶§ÀÇ Çø³ ó¸®ÀÔ´Ï´Ù.
Á¦1 ÆÄ¶ó¹ÌÅÍ´Â Àü¼ÛÇÒ °÷ÀÇ ³×¸ð¸¦ ³ªÅ¸³»´Â °ªÀÔ´Ï´Ù. °Å±â¸¦ Áö±Ý±îÁö´Â
NULL·Î Çß¾ú½À´Ï´Ù.
À̰ÍÀº ȸé Àüü¿¡ ¹¦ÈÇ϶ó´Â Àǹ̰¡ µË´Ï´Ù.
´ëºÎºÐÀÇ »ç¶÷Àº µð½ºÇ÷¹ÀÌÀÇ ÇØ»óµµ¸¦ ¡¸640¡¿480¡¹º¸´Ù ³ô°Ô ¼³Á¤Çϰí ÀÖÀ» °ÍÀ̹ǷÎ
Ŭ¶óÀÌ¾ðÆ® ¿µ¿ª¿¡´Â È®´ëµÈ À̹ÌÁö°¡ Ç¥½ÃµÇ°í ÀÖÀ» °ÍÀÔ´Ï´Ù.
(±×·¡ÇÈ Ä«µå¿¡ µû¶ó¼´Â Èñ¹ÌÇØÁöµçÁö¡¤¡¤¡¤¡¤)
È®´ëÇÏÁö ¾Ê°í Á¦´ë·Î µÈ »çÀÌÁî·Î ¹¦È ÇÏ·Á¸é, ¡¸Àü¼ÛÇÒ °÷¡¹À» °ªÀ» ¿Ã¹Ù¸£°Ô ¾òÀ» Çʿ䰡 ÀÖ½À´Ï´Ù.
À©µµ¿ì´Â À¯ÀúÀÇ ¼Õ¿¡ ÀÇÇØ Ç×»ó À̵¿ÀÌ °¡´ÉÇØ¼ À̵¿ÀÌ ¹ß»ýµÇ¸é
¡¸Àü¼ÛÇÒ °÷ÀÇ °ª¡¹¸¦ º¯°æÇϵµ·Ï ÇÁ·Î±×·¡¹Ö ÇÏÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù.
À©µµ¿ì°¡ ÀÛµ¿µÇ¸é¡¤¡¤¡¤¡¤¡¤
¡¸
WM_MOVE¡¹¸Þ¼¼Áö°¡ ¹ß»ýµË´Ï´Ù.
ÀÌ ¸Þ¼¼Áö¸¦ ÃëµæÇØ Àü¼ÛÇÒ °÷ÀÇ °ªÀ» º¯°æÇϴ ó¸®¸¦ Ãß°¡ÇսôÙ.
¸Þ¼¼Áö ó¸®
LRESULT WINAPI WndProc(
HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
{
switch(message){
case WM_KEYDOWN:
switch(wParam)
{
case VK_ESCAPE:
releaseobject();
PostMessage(hwnd,
WM_CLOSE, 0,0);
break;
case VK_RETURN:
 
//½ºÅ©¸° ¸ðµå º¯°æ
changescreen();
break;
}
break;
case WM_MOVE:
GetClientRect();
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, message, wParam, lParam);
}
return 0;
}
À§¿Í °°ÀÌ ¡¸WM£ßMOVE ¸Þ¼¼Áö¡¹¿¡ ´ëÇÑ ¸Þ¼¼Áö¸¦ Ãß°¡ÇÕ´Ï´Ù.
¡¸GetClient
Rect ÇÔ¼ö¡¹´Â ÇöÀçÀÇ Å¬¶óÀÌ¾ðÆ® ¿µ¿ªÀÇ À§Ä¡¸¦ ¾ò´Â ÇÔ¼öÀÔ´Ï´Ù.
(Ãß°¡Çß½À´Ï´Ù)
void GetClientRect(void)
{
POINT clientpos={0,0};
//Ŭ¶óÀÌ¾ðÆ® Æ÷Áö¼Ç
ClientToScreen(hwnd, &clientpos);
 
//À©µµ¿ìÀÇ Á»ó ÁÂÇ¥¸¦ ȸé ÁÂÇ¥·Î ¾ò´Â´Ù
 
//ScreenClientRect ´Â ±Û·Î¹ú RECT ±¸Á¶Ã¼
ScreenClientRect.left=clientpos.x
//½ÃÀÛÁ¡ XÁÂÇ¥
ScreenClientRect.top=clientpos.y
//½ÃÀÛÁ¡ YÁÂÇ¥
ScreenClientRect.right=clientpos.x + _ScreenXsize
//³¡Á¡ XÁÂÇ¥
ScreenClientRect.bottom=clientpos.y + _ScreenYsize
//³¡Á¡ YÁÂÇ¥
 
//½ÃÀÛÁ¡¿¡ À©µµ¿ì »çÀÌÁîÀÇ ¸ÅÅ©·Î¸¦ °¡»êÇÏ´Â °ÍÀ¸·Î //Ŭ¶óÀ̾ðÆ®ÀÇ Å©±â¸¦ ¾Ë ¼ö ÀÖ½À´Ï´Ù.
}
ÇöÀçÀÇ À©µµ¿ìÀÇ ÁÂÇ¥¸¦ Ŭ¶óÀÌ¾ðÆ® ÁÂÇ¥·Î ÃëµæÇϴ ó¸®ÀÔ´Ï´Ù.
󸮴 °£´ÜÇÕ´Ï´Ù.
¡¸ClientToScreen ÇÔ¼ö¡¹·Î À©µµ¿ìÀÇ Á»óÀÇ ÁÂÇ¥¸¦ ȸé ÁÂÇ¥°è·Î ¾òÀ» ¼ö°¡ ÀÖÀ¸¹Ç·Î
±×·¡¼ ¾òÀº °ªÀ»
RECT ±¸Á¶Ã¼¿¡ °Ç³×ÁÝ´Ï´Ù.
½ÃÀÛÁ¡(Á»ó ÁÂÇ¥)°ú ³¡Á¡(¿ìÇÏ ÁÂÇ¥)À» ¾ò½À´Ï´Ù.
±×¸®°í
RECT ±¸Á¶Ã¼¸¦ ¹¦È ÇÒ ¶§, ¡¸Blt ¸Þ¼Òµå¡¹ÀÇ Á¦1 ÆÄ¶ó¹ÌÅÍ¿¡ °Ç³×ÁÝ´Ï´Ù.
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
Z¼ÒÆ®
Z¼ÒÆ®´Â ±íÀ̸¦ Ç¥ÇöÇÒ ¶§¿¡ »ç¿ëµË´Ï´Ù.
ÀÏÁ¤ÇÑ °ÔÀÓ¡¤¡¤¡¤¡¤2DÁö¸¸ ¡¸±íÀÌ(ZÃà)¡¹ÀÇ °³³äÀÌ ÀÖ´Â °ÔÀÓÀ»
¸¸µé ¶§¿¡ »ç¿ëÇÏ¸é ½ºÇÁ¶óÀÌÆ®ÀÇ ¹¦È°¡ ºñ±³Àû °£´ÜÇÏ°Ô µË´Ï´Ù.
Áö±Ý±îÁöÀÇ »ùÇà ÇÁ·Î±×·¥Àº ȸ鿡 ¹¦È ÇÒ ¶§¡¤¡¤¡¤¡¤
1.¡¸¹è°æÀÇ ¹¦È¡¹
2.¡¸Ä³¸¯ÅÍÀÇ ¹¦È¡¹
etc¡¤¡¤¡¤
µîÀ¸·Î ¾ÈÂÊ¿¡ ÀÖÀ¸¸é ÀÖ´Â Â÷·Ê·Î ¹¦ÈÇϵµ·Ï ÇÁ·Î±×·¥ ÇØ ¿Ô½À´Ï´Ù.
¹¦È ¼ø¼°¡ ¹Ý´ë¶ó¸é,¡¸Ä³¸¯ÅÍ À̹ÌÁö¡¹´Â ¹è°æ¿¡ °¡·ÁÁö±â ¶§¹®¿¡
º¸ÀÌÁö ¾ÊÀ» °ÍÀÔ´Ï´Ù.
2D¿¡¼´Â ¡¸¹¦È ÇÏ´Â Â÷·Ê¡¹·Î ±íÀ̸¦ Ç¥ÇöÇÕ´Ï´Ù.
Z¼ÒÆ®°¡ ÇÊ¿äÇÑ °ÔÀÓÀÌ ¿¹¸¦ µé¸é(ÀÚ)¡¤¡¤¡¤¡¤¡¤¡¸µð¾Æºí·Î¡¹
µî ¸Ê¿¡ ¡¸¾Õ°ú ¾ÈÂÊ¡¹ÀÇ °³³äÀÌ ÀÖ´Â °æ¿ìÀÔ´Ï´Ù.
ij¸¯ÅÍ´Â ¸ÊÀÇ ¾ÈÂÊÀ¸·Î °¡¸é ¾ÕÀÇ Ä³¸¯ÅÍÀÇ µÚ·Î ¼û¾î ¹ö¸³´Ï´Ù.
¾ÈÂÊÀ¸·Î °¬À¸´Ï±î ´ç¿¬ÇÕ´Ï´Ù¸¸,
ÀÌ ÄÚ³ÊÀÇ Áö±Ý±îÁö ¹æ¹ý¿¡¼´Â À̰ÍÀº ÇÒ ¼ö ¾ø½À´Ï´Ù.
1.¡¸¹è°æÀÇ ¹¦È¡¹
2.¡¸Ä³¸¯ÅÍ AÀÇ ¹¦È¡¹
2.¡¸Ä³¸¯ÅÍ BÀÇ ¹¦È¡¹
etc¡¤¡¤¡¤
󸮸¦ ¸¸µé°í ÀÖÀ¸¸é ¡¸Ä³¸¯ÅÍ B¡¹´Â Ç×»ó ¡¸Ä³¸¯ÅÍ A¡¹ÀÇ ¾Õ¿¡ ¹¦È µÇ°í.
¸ÊÀÇ ¾ÈÂÊÀ¸·Î À̵¿Çß´Ù°í ÇØµµ ¸ÊÀÇ ¾Õ¿¡ ÀÖ´Â ¡¸Ä³¸¯ÅÍ A¡¹ÀÇ µÚ¿¡ ¼û´Â ÀÏÀº ¾ø½À´Ï´Ù.
´Â ±× ¿¹¡¤¡¤¡¤¡¤¡¸Àû»ö È»ó¡¹Àº ¡¸Ã»»ö Ȼ󡹺¸´Ù µÚ·Î ¹¦È ÇÏ°í ½Í¾îµµ
ÇÒ ¼ö ¾ø½À´Ï´Ù.
À̰ÍÀº ¡¸¹¦ÈÀÇ Â÷·Ê¡¹¿¡ ¹®Á¦°¡ Àֱ⠶§¹®ÀÔ´Ï´Ù.
Z¼ÒÆ®¿¡¼´Â ½ºÇÁ¶óÀÌÆ®¿¡ ¡¸ZÃàÀÇ °ª¡¹À» °¢°¢ °®°ÔÇÏ°í ±× °ª¿¡ ÀÇÇØ ¹¦È ÇÏ´Â Â÷·Ê¸¦
º¯°æÇϴ ó¸®ÇÕ´Ï´Ù.
¡¸ZÃàÀÇ °ª¡¹Àº ¡¸¾ó¸¶³ª ¾ÈÂÊ¿¡ ÀÖÀ»±î?¡¹¶ó°í ÇÏ´Â °ªÀ¸·Î ¡¸0¡¹À̶ó¸é Á¦ÀÏ ¾Õ ¡¸¥á¡¹À̶ó¸é ¾ÈÂÊÀ̶ó »ý°¢ÇÕ´Ï´Ù.
¥á°ªÀÌ ³ôÀ» ¼ö·Ï 󸮿¡ ½Ã°£ÀÌ °É¸®Áö¸¸ º¸´Ù Á¤¹Ðµµ°¡ ³ôÀº ¿ø±Ù°¨À» Ç¥ÇöÇÒ ¼ö ÀÖ´Ù
±×¸®°í ¡¸ZÃàÀÇ °ª¡¹ÀÌ ¡¸Å«(ÀÛÀº ¼ø¼·Îµµ °¡´É) Â÷·Ê¡¹·Î ¹¦È ÇØ ³ª°¡¸é OKÀÔ´Ï´Ù.
ó¸®ÀÇ È帧
5°³ÀÇ ½ºÇÁ¶óÀÌÆ®¸¦ Z¼ÒÆ®¿¡ ÀÇÇÑ ¹¦È¸¦ ½Ç½ÃÇÑ´Ù
5°³ÀÇ ½ºÇÁ¶óÀÌÆ®´Â ¸ðµÎ ´Ù¸¥ À̹ÌÁö¸¦ »ç¿ëÇÕ´Ï´Ù.
±× À̹ÌÁöµéÀº ¸ðµÎ ÇϳªÀÇ ¼ÆäÀ̽º¿¡ ¸ðÀ» ¼ö ÀÖ½À´Ï´Ù.
Ç¥½ÃÇÏ´Â ¡¸5°³¡¹ÀÇ ½ºÇÁ¶óÀÌÆ®¿¡ ±¸Á¶Ã¼¸¦ ¸¸µì½Ã´Ù.
½ºÇÁ¶óÀÌÆ® ±¸Á¶Ã¼¿¡µµ Ãß°¡ÇØ¾ß ¸â¹ö´Â ÀÌÇÏ¿Í °°Àº °ÍÀ̶ó »ý°¢µË´Ï´Ù.
¡á½ºÇÁ¶óÀÌÆ®°¡ ÀÖ´Â ¼ÆäÀ̽ºÀÇ ÁÖ¼Ò
¼Ò½ºÄڵ忡¼´Â ¡¸ÇϳªÀÇ ¼ÆäÀ̽º¡¹°¡ µÇ°í ÀÖÁö¸¸ ³ªÁß¿¡ È®ÀåÇÒ ¶§¿¡
¾î´À ¼ÆäÀ̽º·ÎºÎÅ͵µ °¡´ÉÇϵµ·Ï À̰ÍÀ» ¸â¹ö¿¡ ³Ö½À´Ï´Ù.
¹¦È 󸮴 ÀÌ ¸â¹ö°¡ ÁöÁ¤ÇÏ´Â ¼ÆäÀ̽ººÎÅÍ ¹¦È¸¦ ÇÕ´Ï´Ù.
¡áÇ¥½ÃÇÒ °÷ÀÇ ±¸¿ª
¡¸blt¡¹·Î ¹¦È ÇÒ ¶§, 2°³ÀÇ
RECT ±¸Á¶Ã¼·Î Àü¼ÛÇÒ °÷°ú Àü¼ÛÇØ¿Ã °÷ÀÇ ±¸¿ªÀÌ
ÇÊ¿äÇϹǷΠÀ̰͵µ ¸â¹ö¿¡ ³Öµµ·Ï ÇսôÙ.
X¡¤YÀÇ À§Ä¡¸¸À¸·Îµµ ¹¦È¸¦ ó¸®ÇÏ´Â ÂÊ¿¡ 󸮸¦ Ãß°¡ÇÏ´Â ÀÏ·Î °¡´É
¡áZ°ª
±× ½ºÇÁ¶óÀÌÆ®°¡ ¾ó¸¶³ª ¾ÈÂÊÀ¸·Î Á¸ÀçÇÏ´ÂÁö¸¦ ³ªÅ¸³»´Â °ªÀÔ´Ï´Ù.
¡á¾Õ°ú ´ÙÀ½ÀÇ ±¸Á¶Ã¼ÀÇ ÁÖ¼Ò
¾ç¹æÇâÀ» üÀÎ ¸®½ºÆ®·Î ¼ÒÆ®¸¦ ÇÒ ¶§¿¡ À̰ÍÀÌ ÇÊ¿äÇÕ´Ï´Ù.
½ºÇÁ¶óÀÌÆ®°¡ Áõ°¡ÇÒ ¶§, ±¸Á¶Ã¼¸¦ µ¿ÀûÀ¸·Î »ý¼ºÇØ Ã¼ÀÎ ¾È¿¡ Â¥³Ö¾î °¡´Â °ÍÀÌ
Á¦ÀÏ ÁÁ´Ù°í »ý°¢ÇÕ´Ï´Ù.
±×·¯³ª ÀÌ ¼Ò½º¿¡¼´Â üÀÎ ¸®½ºÆ®¿¡¼µµ ¼ÒÆ®´Â Çϰí ÀÖÁö ¾Ê½À´Ï´Ù.
´Ù¸¸ ¹è¿À» Á¤ÀÇÇØ °Å±â¼ ¼ÒÆ® Çϰí ÀÖ½À´Ï´Ù.
»ùÇÃÀ» ±×´ë·Î »ç¿ëÇϸ顤¡¤¡¤¡¤È¸é¿¡ ³ª¿À´Â ½ºÇÁ¶óÀÌÆ®ÀÇ ÃÖ´ëºÐ·®ÀÇ ±¸Á¶Ã¼°¡
Ç×»ó ¸Þ¸ð¸®¿¡ ÇÊ¿äÇϱ⠶§¹®¿¡ ÃÖÀûÀ̶ó°í´Â ÇÒ ¼ö ¾ø½À´Ï´Ù.
ÇÒ ¼ö ÀÖÀ¸¸é üÀÎ ¸®½ºÆ®¿¡¼ÀÇ Z¼ÒÆ®¿¡ 縰ÁöÇÏ´Â ÆíÀÌ ´õ¿í È¿À²ÀûÀÔ´Ï´Ù.
±¸Á¶Ã¼ÀÇ Á¤ÀÇ
±¸Á¶Ã¼¸¦ Á¤ÀÇÇսôÙ.
typedef struct
{//Z¼ÒÆ® ±¸Á¶Ã¼ Á¤ÀÇ
DWORD LpSurface;  
//¼ÆäÀ̽º¿¡ÀÇ Æ÷ÀÎÅÍ
RECT Trect;  
//Àü¼ÛÇÒ °÷ÀÇ ³×¸ð
RECT Nrect;  
//Àü¼ÛÇØ¿Ã °÷ÀÇ ³×¸ð
int Zs;  
//Z°ª
}Zsort, *LpZsort;
À̹ø »ùÇÃÀº ij¸¯ÅÍ 5°³¿Í ¸Ê 1°³ÀÇ ¡¸6°³¡¹ÀÇ ±¸Á¶Ã¼ ¹è¿ÀÌ ÇÊ¿äÇÕ´Ï´Ù.
±¸Á¶Ã¼ÀÇ »ý¼ºÀ» Çϸé ÃʱâÀÇ ¼ÒÆ® °ªÀ» °Ý³³ÇÏ´Â ÇÔ¼ö¸¦ 1ȸ¸¸ È£ÃâÇϵµ·Ï ÇØ µÓ´Ï´Ù.
void ZsortInit(void)
{
 
//¸Ê À̹ÌÁöÀÇ Z¼ÒÆ® ÃʱâÈ
sort[5].LpSurface = (
DWORD) mapsurface;
sort[5].Zs = _ZLAST
//¸ÊÀº Á¦ÀÏ ¾ÈÂÊ¿¡ SetÇÑ´Ù
SetRect(&sort[5].Nrect, 0,0,256,240);
SetRect(&sort[5].Trect, 0,0,640,480);
 
//ij¸¯ÅÍ 5°³ÀÇ ÃʱâÈ
for(
int cnt=0;cnt<=4;cnt++){
sort[cnt].LpSurface = (
DWORD) sprite;
sort[cnt].Zs = cnt;
//¸ÊÀº Á¦ÀÏ ¾ÈÂÊ¿¡ SetÇÑ´Ù
SetRect(&sort[cnt].Nrect, cnt*32, 0, cnt*32+32, 32);
 
//Àü¼ÛÇØ¿Ã °÷ ÁÂÇ¥
SetRect(&sort[cnt].Trect, cnt*32, 200, (cnt*32)+32, 232);
 
//Àü¼ÛÇÒ °÷ ÁÂÇ¥
}
 
//ij¸¯ÅÍ´Â ³ªÁß¿¡ ¹¦È ÇÑ´Ù
 
//ij¸¯ÅÍ A¸¸ ¿òÁ÷ÀÓÀ¸·Î. . . ¡¡Z°ªÀ» º¯°æÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù.
}
Ãʱâ Z°ªÀº ¸ÊÀÇ Á¦ÀÏ ¾ÈÂÊ¿¡¼ ij¸¯ÅͰ¡ 0¡¤1¡¤2¡¤3¡¤4·Î Z °ªÀ» ÇÒ´çÇϰí ÀÖ½À´Ï´Ù.
¿òÁ÷ÀÏ ¼ö Àִ ij¸¯ÅÍ´Â ¡¸A(Ãʱâ Z°ª£º0)¡¹¸¸À¸·Î ±âµ¿ÇßÀ» ¶§´Â ij¸¯ÅÍ A´Â
¾î´À ij¸¯Åͺ¸´Ù ¾Õ¿¡ Àֱ⠶§¹®¿¡ µÚ·Î ¼û´Â ÀÏÀº ¾ø½À´Ï´Ù.
Z°ªÀÇ ÃʱâÈ(ij¸¯ÅÍÀÇ ÁÂÇ¥ ÃʱâÈ)´Â ¾Æ¹«·± Ư»öµµ ¾ø´Â °ªÀ» ³Ö´Â ó¸®À̹ǷÎ
¼³¸íÀº »ý·«ÇÕ´Ï´Ù.
´ÙÀ½¿¡¡¤¡¤¡¤¡¤¡¸Z¼ÒÆ®¿¡ ÀÇÇÑ ¹¦È¡¹ÀÔ´Ï´Ù.
ÀÌ Ã³¸®´Â ¡¸
void Zsortrender(void)¡¹¿¡¼ 󸮵˴ϴÙ.
for(cnt=_ZLAST;cnt>=0;cnt--)
//¾ÈÂʺÎÅÍ °Ë»ö
{
for(x=0;x<=5;x++
)//Z°ªÀÌ ³ôÀº °ÍºÎÅÍ ¹¦È ÇÑ´Ù
{
if(sort[x].Zs == cnt)
//Z½Éµµ¿Í µ¿ÀÏÇϴϱî
BackSurface->Blt(&sort[x].Trect,
(IDirectDrawSurface*) sort[x].LpSurface,
&sort[x].Nrect,
DDBLTFAST_WAIT | DDBLT_KEYSRC, &ddbltfx);
}
}
±â¼úÀûÀ¸·Î´Â ÀǿܷΠªÀº ó¸®ÀÔ´Ï´Ù.
·çÇÁ 󸮷Π¾ÈÂʺÎÅÍ Â÷·Ê·Î ¹¦ÈÇϴ ó¸®°¡ µÇ¾î ÀÖ½À´Ï´Ù.
¹Ù±ùÂÊÀÇ ·çÇÁ(for(cnt=_ZLAST;cnt>=0;cnt--)
¡¸cnt¡¹´Â ¡¸Z°ª¡¹À» ³ªÅ¸³»°í ÀÖ¾î ¡¸ZÄ¡ÀÇ ÃÖ´ë°ª ¸ÅÅ©·Î_ZLAST¡¹ºÎÅÍ Â÷·Ê·Î °Ë»öÇØ °¥ °ÍÀÔ´Ï´Ù.
¡¸0¡¹ÀÌ µÇ¸é Â÷·Ê·Î ¹¦È ´Ù ÇÑ °ÍÀÌ µÇ¹Ç·Î 󸮴 Á¾·á°¡ µË´Ï´Ù.
¾ÈÂÊÀÇ ·çÇÁ(for(x=0;x<=5;x++)
´Â ½ºÇÁ¶óÀÌÆ® ±¸Á¶Ã¼ÀÇ °Ë»öÀÔ´Ï´Ù.
ÇÁ·Î±×·¥Àº ¹æÇâ Ű·Î ij¸¯ÅÍ À̵¿ÀÌ °¡´ÉÇÕ´Ï´Ù.
ZŰ·Î Z °ªÀ» Ç÷¯½º ÇØ¡¤¡¤¡¤XŰ·Î ¡¸Z°ª¡¹À» ¸¶À̳ʽº ÇÕ´Ï´Ù
¾îµð±îÁö³ª ¹è¿ Å×À̺íÀ» »ç¿ëÇÑ Z¼ÒÆ®ÀÇ ¹æ¹ý(º¸Ãæ)
»õ·Ó°Ô ¡¸½ºÇÁ¶óÀÌÆ® ±¸Á¶Ã¼ Æ÷ÀÎÅÍ ¹è¿¡¹(±¸Á¶Ã¼¿¡ÀÇ Æ÷ÀÎÅ͸¸À» ¸ðÀº ¹è¿)À» ¸¸µé¾î µÓ´Ï´Ù.
ÇÁ·Î±×·¥ ½ÇÇàÁß¿¡ ¡¸Z°ª¡¹ÀÇ º¯°æÀÌ ÀÖ¾úÀ» ¶§ ¸¸ ¡¸½ºÇÁ¶óÀÌÆ® ±¸Á¶Ã¼¡¹¿¡ µ¥ÀÌÅ͸¦ °Ý³³ÇÕ´Ï´Ù.
¡¸½ºÇÁ¶óÀÌÆ® ±¸Á¶Ã¼¡¹¸ðµÎ¸¦ ¼ÒÆ®³ª ¿À¸§Â÷¼ø, ³»¸²Â÷¼øÀ¸·Î ¡¸½ºÇÁ¶óÀÌÆ® ±¸Á¶Ã¼ Æ÷ÀÎÅÍ ¹è¿¡¹ÀÇ Å×À̺í¸ðµÎ¸¦ °»½ÅÇÕ´Ï´Ù.
À̹ÌÁöÀÇ ¹¦È´Â ÀÌ ¡¸½ºÇÁ¶óÀÌÆ® ±¸Á¶Ã¼ Æ÷ÀÎÅÍ ¹è¿¡¹ÀÇ Â÷·Ê·Î ¹¦È ÇØ ³ª°©´Ï´Ù.
¼ÒÆ®´Â ¹è¿ÀÇ ³»¿ëÀ» ¼ø¼¿¡ ¸ÂÃß¾î ¹Ù²Ù´Â °ÍÀ» ¸»ÇÑ´Ù
À̹ø ¼Ò½ºÀÇ ¿äÁ¡Àº¡¸Z°ªÀ» ½ºÇÁ¶óÀÌÆ®¸¶´Ù °®°ÔÇÑ´Ù¡¹¸¦ ¾Ë ¼ö ÀÖ¾ú´Ù¸é µÈ´Ù°í »ý°¢ÇÕ´Ï´Ù.
´ÙÀ½ ¼Ò½º´Â ¹è¿À» ÀÌ¿ëÇÑ Z¼ÒÆ®ÀÔ´Ï´Ù.
//////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////
Z¼ÒÆ®ÀÌ
Àüȸ¿¡¼ °£´ÜÇÑ(?) Z¼ÒÆ® °°Àº °ÍÀ» ÇßÀ¸¹Ç·Î À̹øÀº ±×°ÍÀ» ¹ßÀü(?) ½ÃÄÑ
º¼±îÇÏ°í »ý°¢ÇÕ´Ï´Ù.
¸ñÇ¥´Â ½ºÇÁ¶óÀÌÆ®ÀÇ µ¥ÀÌÅ͸¦ ¸Þ¸ð¸®¿¡ µ¿ÀûÀ¸·Î »ý¼ºÇØ ±×°ÍÀ» üÀÎÀ¸·Î ¹¾î
¼ÒÆ®¡¤¹¦È¿¡ ÀÌ¿ëÇÑ´Ù¡¤¡¤¡¤¡¤ÀÔ´Ï´Ù.
üÀÎ ¸®½ºÆ®ÀÇ ¿¬½Àµµ Æ÷ÇÔÇÑ´Ù
üÀÎ ¸®½ºÆ®Ã¼ÀÎ ¸®½ºÆ®ÀÇ °³³äÀ» ¸ð¸£´Â ºÐÀ» À§ÇØ¡¤¡¤¡¤¡¤
°ÔÀÓÀÇ À帣¿¡ µû¶ó¼´Â ȸ鿡 Ç¥½ÃµÇ´Â À̹ÌÁöÀÇ ¼ø¼°¡ Á¤ÇØÁ® ÀÖÁö ¾ÊÀº °æ¿ì°¡ ÀÖ´Ù°í ÇÕ´Ï´Ù.
Á¤ÇØÁ® À־ µÈ´Ù.
ÀÌ ¶§, À̹ÌÁöÀÇ ¼ö¸¸Å ±×°ÍÀ» °ü¸®ÇÏ´Â ¡¸ÁÂÇ¥ º¯¼ö¡¹¸¦ ÁغñÇØ¾ß ÇÕ´Ï´Ù.
ȸ鿡 ³ªÅ¸³»´Â À̹ÌÁöÀÇ ¡¸ÃÖ´ë¼ö¡¹ÀÇ º¯¼ö¸¦ ¡¸Ã³À½¿¡ Á¤ÀÇÇϸ项¡¤¡¤¡¤¡¤
Á¡¤¡¤
int x[256];
int y[256];
¶ó°í ÇÁ·Î±×·¥ÀÇ Ã³À½À¸·Î ÇÊ¿äÇÑ ÃÖ´ë¾çÀ» Á¤ÀÇÇÏ´Â °ÍÀÔ´Ï´Ù.
À§ÀÇ °æ¿ì´Â ȸ鿡 À̹ÌÁö 256°³¸¦ °ü¸®ÇÒ ¼ö ÀÖ´Â ÁÂÇ¥¸¦ Á¤ÀÇÇÑ °ÍÀÌ µÇ´Â±º¿ä.
±×·¯³ª ȸ鿡 À̹ÌÁö°¡ Çϳª ¹Û¿¡ Ç¥½ÃµÇ¾î ÀÖÁö ¾ÊÀº °ÍÀ» »ý°¢ÇØ º¸¼¼¿ä!
ÀÌ °æ¿ì¡¤¡¤¡¤¡¤256°³ÀÇ °ü¸®¿ë º¯¼ö¸¦ º¸°ü À¯ÁöÇÏ´Â ¸Þ¸ð¸® ¿µ¿ªÁß¡¤¡¤¡¤
1°³ ¹Û¿¡ »ç¿ëÇÏÁö ¾Ê±â ¶§¹®¿¡ ³ª¸ÓÁöÀÇ 255°³ ºÐÀÇ ¸Þ¸ð¸® ¿µ¿ªÀº ¡¸³¶ºñ¡¹°¡ µÇ°í ÀÖ½À´Ï´Ù.
°Å±â¼¡¤¡¤¡¤¡¤ÇÊ¿äÇÑ ¾ç¸¸Å ±×¶§ ±×¶§ »ý¼ºÇØ °Å±â¿¡ µ¥ÀÌÅ͸¦ º¸°üÇÏÀÚ°í ÇÏ´Â °ÍÀÌ
üÀÎ ¸®½ºÆ®ÀÔ´Ï´Ù.
À̰ÍÀ̶ó¸é ÇÊ¿äÇÑ ¾ç¸¸Å ¸Þ¸ð¸®¸¦ ¼ÒºñÇϹǷΠ³¶ºñ°¡ ¾ø½À´Ï´Ù.
¾î´À ÇÔ¼ö(³ªÁß¿¡ ³ª¿Ã ÇÔ¼ö)¿¡¼ ¸Þ¸ð¸®¿¡ ÇÊ¿äÇÑ »çÀÌÁîÀÇ ¿µ¿ªÀ» »ý¼ºÇÕ´Ï´Ù.
(ÇÁ·Î±×·¥ ·çÇÁ³»¿¡¼)
ÀÌ ¶§ »ý¼ºµÈ º¯¼ö¡¤±¸Á¶Ã¼µîÀÇ ¸Þ¸ð¸® À§Ä¡´Â ¾îµð°¡ µÉ±î °áÁ¤ÇÏ´Â ÀÏÀº ±âº»ÀûÀ¸·Î
ºÒ°¡´ÉÇØ¼ ÄÄÇ»ÅͰ¡ ÀÚµ¿À¸·Î ÀûÀýÇÑ À§Ä¡¿¡ ¿µ¿ªÀ» È®º¸ÇØ ÁÝ´Ï´Ù.
À§ ±×¸²°ú °°ÀÌ ¸Þ¸ð¸®¿¡ »Ô»ÔÀÌ Èð¾îÁö°Ô µ¥ÀÌÅͰ¡ ¹èÄ¡µË´Ï´Ù.
ÀÌ »óÅ·δ ÇÊ¿äÇÑ µ¥ÀÌÅÍÀÇ ¾ï¼¼½º¸¦ ÇÒ ¼ö°¡ ¾ø½À´Ï´Ù¡¤¡¤¡¤¡¤°Å±â¼ µ¿ÀûÀ¸·Î »ý¼ºµÈ
µ¥ÀÌŸ¿¡ ¡¸´ÙÀ½ÀÇ ¿ä¼Ò¿Í ÀüÀÇ ¿ä¼Ò¡¹ÀÇ ¡¸ÁÖ¼Ò(address)¡¹¸¦ °¡Áö´Â º¯¼ö¸¦ °®°ÔÇÕ´Ï´Ù.
¸Þ¸ð¸®»óÀÇ Ã¼ÀÎÀÇ °³³äÀº ±×¸²¿¡ ³ªÅ¸³ ´ë·Î
¾ÕÀÇ ¿ä¼Ò¿Í ´ÙÀ½ÀÇ ¿ä¼ÒÀÇ ÁÖ¼Ò¸¦ °¡Á® ¿À´Â °ÍÀ¸·Î ¡¸Ã¼ÀÎ(¼è»ç½½)¡¹°ú °°ÀÌ ¿¬°áµÇ¾î °©´Ï´Ù.
ÁÖ¼Ò·Î ¿¬°áÇϹǷΠ¸Þ¸ð¸®»óÀÇ À§Ä¡´Â °ü°è¾ø´Ù!
¶Ç ¿ä¼ÒÀÇ Ãß°¡ »èÁ¦µµ üÀÎÀ» ¿¬°áÇØ¼ ¹Ù²Ù´Â °ÍÀ¸·Î °£´ÜÇÏ°Ô ÇÒ ¼ö ÀÖ°í Å×À̺í 󸮿¡¼´Â Çϱ⠾î·Á¿î(󸮰¡ ¹«°Å¿öÁø´Ù) ¡¸µµÁß¿¡ Ãß°¡¡¤»èÁ¦¡¹µîµµ °£´ÜÇÏ°Ô °í¼ÓÀ¸·Î ½Ç½ÃÇÒ ¼ö ÀÖ½À´Ï´Ù.
¾Æ¹«Æ° ÁÖ¼ÒÀÇ ¾ÕÀ» º¯°æÇÏ´Â °Í¸¸À¸·Î °¡´ÉÇϱ⶧¹®¿¡.
µ¡ºÙ¿©¼ üÀÎ ¸®½ºÆ®´Â ¡¸³ëº§ °ÔÀÓ¡¹À̳ª RPG¿¡¼ÀÇ À̺¥Æ® ¸Þ¼¼Áö 󸮿¡
»ç¿ëÇϸé ÁÁÀº ¾Ë°í¸®ÁòÀ̶ó°í ÇÒ ¼ö ÀÖ½À´Ï´Ù.
°³³äÀûÀÎ ¹°°Ç
¿ì¼±Àº ½ºÇÁ¶óÀÌÆ® µ¥ÀÌÅÍÀÇ ±¸Á¶Ã¼¸¦ Á¤ÀÇÇÕ´Ï´Ù.
ÀÌ ±¸Á¶Ã¼¸¦ µ¿ÀûÀ¸·Î »ý¼ºÇØ ÀÌ ±¸Á¶Ã¼¿¡ °Ý³³µÇ°í ÀÖ´Â À̹ÌÁö¸¦ ¹¦ÈÇϵµ·Ï ÇÕ´Ï´Ù.
¿ì¼± ÇÊ¿äÇÑ °ÍÀº ¡¸¾ÕÀÇ ¿ä¼Ò¡¹¿Í¡¸´ÙÀ½ÀÇ ¿ä¼Ò¡¹ÀÇ Æ÷ÀÎÅÍ º¯¼öÀÔ´Ï´Ù.
»ùÇÃÀº ¾ç¹æÇâÀÇ Ã¼ÀÎÀ̹ǷΠÀÌ µÎ °³ÀÇ Æ÷ÀÎÅͰ¡ ÇʼöÀÔ´Ï´Ù.
¡¸Ã¼ÀÎ ¸®½ºÆ®¡¹ÀÇ ¼³¸íÀ» º¸¸é ¾Ë ¼ö ÀÖ´Ù°í »ý°¢ÇÕ´Ï´Ù.
À§ÀÇ Æ÷ÀÎÅÍ´Â Çʼö·Î¼¡¤¡¤¡¤³ª¸ÓÁöÀÇ ÇÊ¿äÇÑ °ÍÀ» »ý°¢Çϸé.
À̹ÌÁö°¡ ³ª¿À¹Ç·Î ¡¸¼ÆäÀ̽ºÀÇ Æ÷ÀÎÅÍ¡¹³ª ¡¸Ç¥½Ã¸¦ ³ªÅ¸³»´Â
RECT ±¸Á¶Ã¼¡¹µîÀ¸·Î
ÇϳªÀÇ ½ºÇÁ¶óÀÌÆ® µ¥ÀÌÅÍ ±¸Á¶Ã¼·Î Çϸé ÁÁ´Ù°í »ý°¢ÇÕ´Ï´Ù.
Z½Éµµ
±íÀ̸¦ Ç¥ÇöÇϹǷΠ´ç¿¬È÷ ¡¸Z½Éµµ¡¹¸¦ ³ªÅ¸³»´Â ¡¸°ª¡¹ÀÌ ÇÊ¿äÇÏ°Ô µË´Ï´Ù.
ÀÌ µ¥ÀÌÅ͸¦ ¡¸½ºÇÁ¶óÀÌÆ® ±¸Á¶Ã¼¡¹¸¶´Ù °®°ÔÇϸ顤¡¤¡¤¡¤
À§¿Í °°ÀÌ µË´Ï´Ù.
ÀϹÝÀûÀΠüÀÎÀ̶ó°í ÇÒ ¼ö ÀÖ½À´Ï´Ù.
±×¸®°í À̹ÌÁö Ç¥½Ã°¡ ÇÊ¿äÇÏ°Ô µÇ¸é ¸®½ºÆ®¿¡ ¸ðµÎ Ãß°¡ÇÕ´Ï´Ù.
Ãß°¡¡¤»èÁ¦ À§Ä¡¿¡ ´ëÇØ¼´Â °Ë»ö 󸮸¦ ÇØ¾ß ÇÕ´Ï´Ù.
µ¥ÀÌÅÍ´Â ³»¸²Â÷¼ø¿¡ ÁÙÁö¾î ÀÖÀ¸¹Ç·Î ¡¸Â÷·ÊÂ÷·Ê °Ë»ö¡¹¸¸À¸·Î
¾Æ´Ñ ¡¸¼ø¼´ë·ÎÀÇ °Ë»ö¡¹À» È¿À²ÀûÀ̶ó°í »ý°¢µË´Ï´Ù.
¸Þ¸ð¸®ÀÇ µ¿Àû »ý¼ºÀÇ ¹æ¹ý
C¾ð¾î º£À̽º¶ó¸é ¡¸malloc ÇÔ¼ö¡¹·Î C£«£«º£À̽º¶ó¸é ¡¸new¡¹°¡ ÀÖ½À´Ï´Ù.
¿©±â´Â C¾ð¾î º£À̽ºÀ̹ǷΡ¤¡¤¡¤¡¸malloc ÇÔ¼ö¡¹¿¡ ´ëÇØ.
¿ì¼±, ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇÏ·Á¸é , stdlib.h ¿Í malloc.h¸¦ ÀÎŬ·çµåÇØ¾ß ÇÕ´Ï´Ù.
void *
malloc(
size_t size );
ÀÌ ÇÔ¼öÀÇ ÆÄ¶ó¹ÌÅÍ´Â 1°³·Î ¡¸¾î´À ¸Þ¸ð¸®¿¡ È®º¸ÇÒ±î?¡¹ÀÔ´Ï´Ù.
¸®ÅÏ °ªÀº È®º¸ÇÑ ¿µ¿ªÀÇ ¸Ç ¾ÕÀÇ ÁÖ¼ÒÀÔ´Ï´Ù.
È®º¸¿¡ ½ÇÆÐÇßÀ» °æ¿ì´Â
NULLÀÌ ¸®ÅÏ µË´Ï´Ù.
»ç¿ëÇÏ´Â °æ¿ì´Â ±¸Á¶Ã¼ÀÇ ¹ÙÀÌÆ® ¼ö¸¦ ÆÇ´ÜÇÏ´Â ÇÔ¼ö ¡¸sizeof¡¹µîÀ¸·Î º´¿ëÇØ¼ µ¿ÀûÀ¸·Î È®º¸ÇÕ´Ï´Ù.
üÀÎ ¸®½ºÆ®ÀÇ Æ÷ÀÎÅÍ =
malloc(
sizeof(SpriteStruct));
¿µ¿ªÀÌ ºÒÇÊ¿äÇÏ°Ô µÇ¾úÀ» °æ¿ì´Â ÇÁ·Î±×·¥ÂÊ¿¡¼ ¸í½ÃÀûÀ¸·Î ÇØ¹æ 󸮸¦ ½Ç½ÃÇÏÁö ¾ÊÀ¸¸é
¸Þ¸ð¸®¿¡ ³²¾Æ ÀÖ½À´Ï´Ù.
¡¸free ÇÔ¼ö¡¹¿¡ ÀÇÇØ È®º¸ÇÑ ¿µ¿ªÀ» °³¹æÇÕ´Ï´Ù.
void free(
void *memblock );
ÆÄ¶ó¹ÌÅÍ´Â ÇØ¹æÇÏ°í ½ÍÀº ÁÖ¼Ò¸¦ °Ç³×ÁÝ´Ï´Ù.
malloc·Î È®º¸ÇÑ ¼±µÎ ÁÖ¼Ò¸¦ °Ç³×ÁÝ´Ï´Ù.
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
¼ÆäÀ̽ºÀÇ Á¶ÀÛ
À̹øÀº ¡¸¼ÆäÀ̽ºÀÇ Á¶ÀÛ¡¹À» ÇØ º¾½Ã´Ù.
°£´ÜÇÏ°Ô À̹ÌÁö°¡ º¸°üµÇ°í ÀÖ´Â ¸Þ¸ð¸®¸¦ ¸¶±¸ ÁÖ¹«¸¥´Ù´Â ÀǹÌÀÔ´Ï´Ù.
1ȸ·Î¼ ¡¸Blt¡¹¸¦ »ç¿ëÇÏÁö ¾Ê´Â À̹ÌÁöÀÇ ¹¦È¸¦ ÇØ º¾½Ã´Ù.
ÀÌ¡¸¼ÆäÀ̽ºÀÇ Á¶ÀÛ¡¹ÀÇ ´ëÇ¥ÀûÀ¸·Î¡¸¹ÝÅõ¸í 󸮡¹µîÀ» µé ¼ö ÀÖ½À´Ï´Ù.
¶Ç, ¡¸¼±¡¹À» ±ß°Å³ª ¡¸Á¡¡¹À» ¹¦È ÇÑ´Ù¸é ²Ï ÁÁÀº ¹æ¹ýÀÌ ¾Æ´Ò±î¿ä?
°³³äºÎÅÍ ¿ì¼± ¹æ¹ýÀº ´ÙÀ½¿¡ ¼Ò°³ÇÑ´Ù°í ÇÏ°í °³³äºÎÅÍ ¼³¸íÇÕ´Ï´Ù.
¿ì¼±, À̹ÌÁö°¡ º¸°ü À¯ÁöµÇ°í ÀÖ´Â ¸Þ¸ð¸® ¿µ¿ªÀ» DirectX¿¡¼´Â ¡¸¼ÆäÀ̽º¡¹¶ó°í
ºÎ¸£°í ÀÖ¾ú½À´Ï´Ù.
¹«¾ùÀΰ¡ ¾î·Á¿ï °Í °°Áö¸¸, °á±¹ ¸Þ¸ð¸®¿¡ ¡¸À̹ÌÁöÀÇ Á¤º¸¡¹°¡ °Ý³³µÇ°í ÀÖ´Â °ÍÀÏ»Ó
ÀÔ´Ï´Ù.
16ºñÆ® Ä®¶ó ÀÌ»óÀ¸·Î ¼³¸íÇÕ´Ï´Ù.
¿¹¸¦ µé¸é 16ºñÆ® Ä®¶ó´Â À̹ÌÁöÀÇ 1 µµÆ®¸¦ ¡¸16ºñÆ®¡¹·Î Ç¥ÇöÇϰí ÀÖ½À´Ï´Ù.
¡¸2¹ÙÀÌÆ®¡¹±º¿ä. (8ºñÆ®=1¹ÙÀÌÆ®)
¸Þ¸ð¸®ÀÇ ¡¸2¹ÙÀÌÆ®¡¹¿¡´Â ¡¸R ¡¤ G ¡¤ B ¡¤ ±× ¿Ü(?)¡¹ÀÇ Á¤º¸°¡ °Ý³³µÇ°í
´ÙÀ½ÀÇ ¹øÁöÀÇ ¸Þ¸ð¸®¿¡´Â ´ÙÀ½ µµÆ®ÀÇ Á¤º¸°¡ °Ý³³µÇ°í ÀÖ½À´Ï´Ù.
ÇÁ·Î±×·¥¿¡¼ ¾î´À ¹øÁöÀÇ Ä®¶óÁ¤º¸ÀÇ Ã³¸®(°»½Åµî)°¡ ¾î¶»°Ô µÉ±î¿ä?
´ç¿¬È÷ ¼ÆäÀ̽ºÀÇ À̹ÌÁö ±× ÀÚü°¡ º¯ÈµË´Ï´Ù.
¹ÝÅõ¸íÀÇ Ã³¸®¸¦ ½Ç½ÃÇÑ´Ù¸é ¡¸Àü¼ÛÇÒ °÷ÀÇ À̹ÌÁöÀÇ 1 µµÆ®¡¹ ¡¸Àü¼ÛÇØ¿Ã °÷ À̹ÌÁöÀÇ 1 µµÆ®¡¹ÀÇ Ä®¶óÁ¤º¸¸¦ ºñ±³ÇØ ¡¸Àü¼ÛÇÒ °÷ÀÇ ¸Þ¸ð¸®¸¦ ´Ù½Ã ±âÀÔÇϸ项¹ÝÅõ¸í ó¸®ÀÇ ¿Ï¼ºÀÔ´Ï´Ù.
(¹ÝÅõ¸íµµÀÇ Á¤µµ¿¡ ÀÇÇØ °è»ê½Äµµ ¹Ù²ð °ÍÀÌ´Ù)
¿©±â¿¡¼ ¡¸Àü¼ÛÇØ¿Ã °÷ÀÇ ¼ÆäÀ̽º¡¹ÀÇ À̹ÌÁö¸¦ ¡¸Blt ¸Þ¼Òµå¡¹¸¦ »ç¿ëÇÏÁö ¾Ê°í
¡¸Àü¼ÛÇÒ °÷¡¹¿¡ ¹¦È ÇÕ´Ï´Ù.
È帧Àº À§ÀÇ °°½À´Ï´Ù.
¾ÆÁÖ ´Ü¼øÇϰԡ¸Àü¼ÛÇØ¿Ã °÷¡¹ÀÇ Á¤º¸¸¦ Àо¤¡¤¡¤±×°ÍÀ» ¡¸Àü¼ÛÇÒ °÷¡¹¿¡ º¸³»¸é µË´Ï´Ù.
±×·³ ±× ¹æ¹ýÀ̶õ!
¼ÆäÀ̽º¸¦ Á÷Á¢ Á¶ÀÛÇÏ·Á¸é?
»ç½Ç ÀÌ ±â´ÉÀ» DirectDraw´Â °¡Áö°í ÀÖ½À´Ï´Ù.
°£´ÜÈ÷ ¸»Çϸé, ¸Þ¸ð¸®¶ó´Â °ÍÀ» ±×´ÙÁö ÀǽÄÇÏÁö ¾Ê¾Æµµ °¡´ÉÇÏ´Ù°í ÇÒ ¼ö ÀÖ½À´Ï´Ù.
¼ÆäÀ̽ºÀÇ ·Ï
¼ÆäÀ̽º¿¡ Á÷Á¢ ¾ï¼¼½º¸¦ ÇÏ·Á¸é ¡¸DirectDraw ¿ÀºêÁ§Æ®¡¹ÀÇ ¡¸Lock ¸Þ¼Òµå¡¹
¸¦ »ç¿ëÇØ¼ ¼ÆäÀ̽º¸¦ ¡¸·Ï¡¹ÇÕ´Ï´Ù.
Àá±×´Â °ÍÀ¸·Î ´Ù¸¥ ¾îÇø®ÄÉÀ̼ÇÀÌ ¡¸¼ÆäÀ̽º¡¹¿¡ÀÇ ¾ï¼¼½º°¡ ºÒ°¡´ÉÇÏ°Ô µÇ¾î
ÀÚ½ÅÀÇ ¾îÇø®ÄÉÀ̼ÇÀº ¼ÆäÀ̽º¿¡ ¾ï¼¼½º ÇÒ ¼ö ÀÖµµ·Ï µË´Ï´Ù.
(¸Þ¸ð¸®³»ÀÇ µ¥ÀÌŸÀÇ Á¤ÇÕ¼ºÀ» À¯ÁöÇϱâ À§ÇØ ·ÏÀ» ½Ç½ÃÇϰÚÁö¿ä.)
HRESULT Lock(
LP
RECT lpDest
Rect,
LPDDSURFACEDESC lpDDSurfaceDesc,
DWORD dwFlags,
HANDLE hEvent
);
·Ï ¸Þ¼Òµå´Â À§¿¡ Àִ´ë·ÎÀÔ´Ï´Ù.
¿©±â¼ ÁöÁ¤ÇÏ´Â ¼ÆäÀ̽ºÀÇ ÀϺΠ¿µ¿ª(¶Ç´Â Àü¿ª)À» Àá±Û ¼ö ÀÖ½À´Ï´Ù.
Á¦1 ÆÄ¶ó¹ÌÅÍ£º
À̰ÍÀº Àá±×´Â ¿µ¿ªÀ» ÁöÁ¤ÇÏ´Â
RECT ±¸Á¶Ã¼ÀÔ´Ï´Ù.
¼ÆäÀ̽ºÀÇ ³»¿ëÀ» º¯°æÇÏ°í ½ÍÀº ¿µ¿ªÀ» ¹Ì¸®
RECT ±¸Á¶Ã¼¿¡ Set ÇÏ°í ³ª¼
°Ç³×ÁÝ´Ï´Ù.¡¸null¡¹¸¦ °Ç³×ÁÖ¸é ¼ÆäÀ̽º Àü¿ªÀ̶ó´Â Àǹ̰¡ µË´Ï´Ù.
Á¦2 ÆÄ¶ó¹ÌÅÍ£º
·ÏÇÏ´Â ¼ÆäÀ̽ºÀÇ Á¤º¸¸¦ °Ý³³ÇÏ´Â ±¸Á¶Ã¼ ¡¸LPDDSURFACEDESC¡¹ÀÔ´Ï´Ù.
À§ÀÇ ¼³¸í ´ë·Î ·ÏÇÑ ÈÄ ¼ÆäÀ̽ºÀÇ Á¤º¸°¡ °Ý³³µË´Ï´Ù.
lpSurface ¼ÆäÀ̽ºÀÇ ¸Þ¸ð¸®»óÀÇ ÁÖ¼Ò
dwWidth, dwHeight ¼ÆäÀ̽ºÀÇ Æø°ú ³ôÀÌ
lPitch ¼ÆäÀ̽ºÀÇ °¡·Î¶óÀÎÀÇ ¹ÙÀÌÆ®ÀÇ ÆøÀÔ´Ï´Ù.(Áß¿ä)
ddpfPixelFormat Çȼ¿ Æ÷¸Ë(ÀÌÇÏ ¼³¸í)
¶ó°í À§¿Í °°Àº ¸â¹ö¸¦ °¡Áö´Â ±¸Á¶Ã¼¿¡ µ¥ÀÌŸ°¡ ÁÖ¾îÁý´Ï´Ù.
Á¦3 ÆÄ¶ó¹ÌÅÍ£º
Àá±Û ¶§ÀÇ µ¿ÀÛÀ» °áÁ¤ÇÏ´Â Ç÷¡±×, ÀÌÇÏÀÇ Ç÷¡±×°¡ ÀÖ½À´Ï´Ù.
DDLOCK_EVENT
ÇöÀç, ÀÌ Ç÷¡±×´Â ½ÇÀåµÇÁö ¾Ê¾Ò´Ù.
DDLOCK_NOSYSLOCK
°¡´ÉÇϸé Win16Lock ¸¦ »ç¿ëÇÏÁö ¾Ê´Â´Ù. ÇÁ¶óÀ̸Ӹ® Ç¥¸éÀ» Àá±Û ¶§ ÀÌ Ç÷¡±×´Â ¹«½ÃµÈ´Ù.
DDLOCK_READONLY
Àá±×´Â Ç¥¸éÀº Àо±â Àü¿ëÀÎ °ÍÀ» ³ªÅ¸³»´Â Ç÷¡±×.
DDLOCK_SURFACEMEMORYPTR
ÁöÁ¤ÇÑ ¹üÀ§ÀÇ ¼±µÎÀÇ À¯È¿ÇÑ ¸Þ¸ð¸®Æ÷ÀÎÅ͸¦ µ¹·ÁÁÖÁö ¾ÊÀ¸¸é ¾È µÇ´Â °ÍÀ» ³ªÅ¸³»´Â Ç÷¡±×.
¹üÀ§°¡ ÁöÁ¤µÇÁö ¾Ê´Â °æ¿ì, ¸Ç À§ÀÇ Ç¥¸éÀÇ Æ÷ÀÎÅͰ¡ ¸®ÅϵȴÙ.
µðÆúÆ®·Î´Â ÀÌ Ç÷¡±×¸¦ ÁöÁ¤ÇÑ´Ù.
DDLOCK_WAIT
ºí·Ï Àü¼Û ó¸®ÁßÀÌ¾î¼ ·ÏÀ» ȹµæÇÒ ¼ö ¾ø´Â °æ¿ì, ÀÌ ¸Þ¼Òµå´Â ·ÏÀ» ȹµæÇÒ ¼ö ÀÖ´ÂÁö
¶Ç´Â DDERR_SURFACEBUSY µîÀÇ ´Ù¸¥ ¿¡·¯°¡ »ý±æ ¶§±îÁö ½ÃµµÇÑ´Ù.
DDLOCK_WRITEONLY
Àá±×´Â Ç¥¸éÀº ±âÀÔ Àü¿ëÀÎ °ÍÀ» ³ªÅ¸³½´Ù.
Á¦4 ÆÄ¶ó¹ÌÅÍ£º
Ç×»ó
NULL
ÇÁ·Î±×·¥Àº ¡¸Blt¡¹¸¦ »ç¿ëÇÏÁö ¾Ê°í À̹ÌÁö Àü¼ÛÀ» ½Ç½ÃÇÕ´Ï´Ù.
¡¸Ä³¸¯ÅÍ¡¹¿Í¡¸¹é ¹öÆÛ¡¹¸¦ Àá±×¾î 1 µµÆ®¾¿ ¸Þ¸ð¸®¸¦ µ¿ÀÏÇÏ°Ô ÇØ °¥ °ÍÀÔ´Ï´Ù.
Àü¼ÛÇØ¿Ã °÷ÀÇ ¼ÆäÀ̽º´Â 32¡¿32 µµÆ®ÀÔ´Ï´Ù.
BYTE *pPixel;
//Çȼ¿(µµÆ®)ÀÇ µ¥ÀÌŸ¸¦ °Ý³³ÇÏ´Â ÁÖ¼Ò¸¦ ¾ò´Â´Ù
BYTE *pPixels;
//½ºÇÁ¶óÀÌÆ®¿ë Æ÷ÀÎÅÍ
DDSURFACEDESC ddsd;
//·ÏÇÒ ¶§ÀÇ µ¥ÀÌŸ¸¦ °Ý³³ÇÏ´Â ±¸Á¶Ã¼
DDSURFACEDESC ddsds;
//·ÏÇÒ ¶§ÀÇ µ¥ÀÌŸ¸¦ °Ý³³ÇÏ´Â ±¸Á¶Ã¼
ZeroMemory(&ddsd,
sizeof(ddsd));
//µ¥ÀÌÅÍÀÇ º¸°ü, À¯Áö±¸Á¶Ã¼¸¦ Á¦·Î Ŭ¸®¾î
ddsd.dwSize =
sizeof(ddsd);
//±¸Á¶Ã¼ÀÇ »çÀÌÁ °Ç³×ÁØ´Ù
ZeroMemory(&ddsds,
sizeof(ddsds));
//µ¥ÀÌÅÍÀÇ º¸°ü, À¯Áö ±¸Á¶Ã¼¸¦ Á¦·Î Ŭ¸®¾î
ddsds.dwSize =
sizeof(ddsds);
//±¸Á¶Ã¼ÀÇ »çÀÌÁ °Ç³×ÁØ´Ù
if(BackSurface->Lock(
NULL, &ddsd, DDLOCK_WAIT| DDLOCK_SURFACEMEMORYPTR,
NULL) == DD_OK)
{
if(sprite->Lock(
NULL, &ddsds, DDLOCK_WAIT | DDLOCK_SURFACEMEMORYPTR ,
NULL) == DD_OK)
{
pPixel = (
BYTE*) ddsd.lpSurface;
//ÁÖ¼Ò¸¦ Ãëµæ(Àá±Ù ¹é ¹öÆÛÀÇ)
pPixels = (
BYTE*) ddsds.lpSurface;
 
//ÁÖ¼ÒÀÇÃëµæ(Àá±Ù ¿ÀÇÁ¼ÆäÀ̽ºÀÇ)
for(
int y=0;y<32;y++){
for(
int x=0;x<32;x++){
pPixel[y*ddsd.dwWidth+x] =
pPixels[(y*ddsds.dwWidth) +x];
}
}
}
else
return FALSE;
}
else
return FALSE;
//¼ÆäÀ̽ºÀÇ ·ÏÀ» Ǭ´Ù
if(BackSurface->Unlock(
NULL)!=DD_OK)
return FALSE;
if(sprite->Unlock(
NULL)!=DD_OK)
return FALSE;
À§ÀÇ Ã³¸®´Â ¹é ¹öÆÛ¿Í ½ºÇÁ¶óÀÌÆ® ¼ÆäÀ̽º¸¦ ·ÏÇØ¼ ½ºÇÁ¶óÀÌÆ®ÀÇ ¸Þ¸ð¸®ÀÇ ³»¿ëÀ» ¹é ¹öÆÛÀÇ ¸Þ¸ð¸® °ø°£¿¡ º¹»çÇϴ ó¸®ÀÔ´Ï´Ù.
BYTEÇü º¯¼ö¿¡ ¼ÆäÀ̽ºÀÇ ÁÖ¼Ò¸¦ °Ý³³ÇØ¡¤¡¤¡¤
pPixel = (
BYTE*) ddsd.lpSurface;
//ÁÖ¼Ò¸¦ Ãëµæ(Àá±Ù ¹é ¹öÆÛÀÇ)
pPixels = (
BYTE*) ddsds.lpSurface;
//ÁÖ¼ÒÀÇ Ãëµæ(Àá±Ù ¿ÀÇÁ¼ÆäÀ̽ºÀÇ)
¸Þ¸ð¸® °ø°£Àº ¿¬¼ÓÇÏ´Â 1 Â÷¿øÀûÀÎ ¸Þ¸ð¸®À̹ǷΡ¤¡¤¡¤¡¤
for(
int y=0;y<32;y++)
{
for(
int x=0;x<32;x++)
{
pPixel[y*ddsd.dwWidth+x] =
pPixels[(y*ddsds.dwWidth) +x];
}
}
¶ó°í ÇÏ´Â ½ÄÀ¸·Î ÀÓÀÇÀÇ µµÆ®¿¡ ¾ï¼¼½º ÇÏ´Â °ÍÀÌ °¡´ÉÇÕ´Ï´Ù.
¿¹)
pPixel[10]
¶ó¸é, Àá±Ù ¿µ¿ªÀÇ ¼±µÎ µµÆ®ºÎÅÍ 10 µµÆ®Â°ÀÇ ÁÖ¼Ò¸¦ °¡¸®Åµ´Ï´Ù.
pPixel[y*ddsd.dwWidth+x]
¶ó°í ¼Ò½º´Â ±â¼úÇϰí ÀÖ½À´Ï´Ù.
¡¸dwWidth ¸â¹ö¡¹´Â ¼ÆäÀ̽ºÀÇ °¡·Î µµÆ®¼ö¸¦ °¡Áö°í ÀÖ½À´Ï´Ù.
y¡¡¡¿¡¡¼ÆäÀ̽º °¡·Î µµÆ®¼ö¡¡£«¡¡x
·Î ÇÔÀ¸·Î ÀÓÀÇÀÇ »çÀÌÁ ºÐ¸íÇÏ°Ô Àü¼Û ÇÒ ¼ö ÀÖ½À´Ï´Ù.
for(
int y=0;y<32;y++)
{
for(
int x=0;x<32;x++)
{
µ¡ºÙ¿©¼ ·çÇÁ°¡ À§¿Í °°ÀÌ µÇ°í ÀÖ´Â °ÍÀº ½ºÇÁ¶óÀÌÆ® ¼ÆäÀ̽º ÂÊÀÇ »çÀÌÁî°¡ 32¡¿32ÀÎ °Í°ú Àü¼Û ÇÏ°í ½ÍÀº »çÀÌÁî°¡ 32¡¿32À̱⠶§¹®ÀÔ´Ï´Ù.
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
¹ÝÅõ¸í ó¸®
¡¸¹ÝÅõ¸í¡¹À̶ó°í ÇÏ´Â ¹¦È 󸮴 ¡¸¼ÆäÀ̽º·Ï¡¹À» ¼ÆäÀ̽º ¸Þ¸ð¸®¸¦
ÀÚÀ¯·Ó°Ô Á¶ÀÛÇÏ´Â ÀÏ·Î °¡´ÉÇÏ°Ô µË´Ï´Ù.
ÀÌ ÀåÀº ÀüÀåÀÇ ÀÀ¿ëÀÔ´Ï´Ù.
°ÔÀÓ¿¡¼´Â ¡¸½Çü°¡ ¾ø´Â ¡¤ ¼û¾î ÀÖ´Â ÄÉ·ºÅ͵À» Ç¥ÇöÇÒ ¶§¿¡ »ç¿ëµÉ °Í °°½À´Ï´Ù.
¿¹¸¦ µé¸é, À¯·ÉÀ̶óµçÁö¡¤¡¤¡¤¡¤¡¤Ä³¸¯ÅÍÀÇ ÀÜ»óµîÀ¸·Î¼ »ç¿ëµÇ°í Àֳ׿ä.
¾Ë°í¸®Áò
±×·³ ¹ÝÅõ¸íÀº ¾î¶² ¾Ë°í¸®ÁòÀϱî?
¼ÆäÀ̽ºÀÇ ·ÏÀÌ µÇ°í ºñµð¿À¸Þ¸ð¸®ÀÇ ÁÖ¼ÒÀÇ ³»¿ë(Çȼ¿ µ¥ÀÌŸ)À»
ÃëµæÇÒ ¼ö°¡ ÀÖÀ¸¸é °£´ÜÇÕ´Ï´Ù.
¹è°æÀÌ µÇ´Â ¡¸¸Ê¼ÆäÀ̽º¡¹ÀÇ ¡¸Çȼ¿ µ¥ÀÌŸ¡¹¿Í
°Å±â¿¡ ¹¦ÈµÇ´Â ¡¸Äʸ¯ÅͼÆäÀ̽º¡¹ÀÇ ¡¸Çȼ¿ µ¥ÀÌŸ¡¹¸¦ ¾ò½À´Ï´Ù.
À§ÀÇ ±×¸²°ú °°ÀÌ ¡¸¹ÝÅõ¸í ¹¦È¿¡ ÇÊ¿äÇÑ ¿µ¿ª¡¹ÀÇ Çȼ¿ µ¥ÀÌŸ¸¦ ÃëµæÇÕ´Ï´Ù.
¾Æ¸¶ ¡¸RGB¡¹¶ó°í ÇÏ´Â µ¥ÀÌŸ°¡ ±× ÁÖ¼Ò¿¡ °Ý³³µÇ¾î ÀÖÀ» °ÍÀÔ´Ï´Ù.
(256 ÀÌÇÏÀÇ Ä®¶óÀÇ È»óÀ» Á¦¿Ü)
ÃëµæÇÑ ¡¸2°³(ÀÌ»ó)ÀÇ RGB µ¥ÀÌŸ¡¹¸¦ ¹ÙÅÁÀ¸·Î ¡¸°è»ê¡¹À» ÇàÇÑ
°è»ê °á°úÀÇ ¡¸RGB µ¥ÀÌŸ¡¹¸¦ Àü¼ÛÇÒ ¼ÆäÀ̽ºÀÇ ÁÖ¼Ò¿¡ Àü¼ÛÇÕ´Ï´Ù.
50% 50%ÀÎ ¹ÝÅõ¸í
À̰ÍÀº °¡Àå °£´ÜÇÑ °è»êÀ̹ǷΠÀ̰ÍÀ» ¼Ò°³ÇÕ´Ï´Ù.
¡¸¹è°æÀÇ Ä®¶ó¡¹ ¡¸Ä³¸¯ÅÍÀÇ Ä®¶ó¡¹ ¾çÂÊ ¸ðµÎ 50%ÀÇ Ä®¶ó¸¦ ȸ鿡 Ç¥ÇöÇÏ´Â °ÍÀÔ´Ï´Ù.
¾î´À Çȼ¿ µ¥ÀÌŸÀÇ ³»¿ëÀÌ ÀÌÇÏ¿Í °°¾Ò´Ù°í ÇսôÙ.
RGB: 125 50 40 ¹è°æÂÊ
RGB: 10 80 255 ij¸¯ÅÍÂÊ
ÀÌ µÎ °³ÀÇ µ¥ÀÌŸ¸¦ ´Ü¼øÇÏ°Ô Ç÷¯½ºÇÕ´Ï´Ù.
RGB: 135 130 255
¿À¹ö Ç÷¯±×¸¦ Á¶½É!
±×¸®°í ¡¸2¡¹·Î ³ª´©¾î º¾½Ã´Ù.
RGB: 67 65 127
°á°ú, Ä®¶ó´Â ÀÌ¿Í °°ÀÌ µÇ¾ú½À´Ï´Ù.
ÀÀ~ÀÌ·²²¨¶ó »ý°¢ÇÕ´Ï´Ù ºÐ¸í!
ÇÁ·Î±×·¥¿¡¼´Â ¡¸50%ºê·£µå¡¹ÀÎ ¹ÝÅõ¸í 󸮸¦ Çϰí ÀÖ½À´Ï´Ù.
ó¸® ÄÚµå ¼Ò°³
󸮷Π¿ì¼± ÁÖÀÇÇØ¾ß ÇÒ °ÍÀº Ä®¶ó ¸ðµå¿¡ ÀÇÇØ Çȼ¿ Æ÷¸ËÀÌ ´Ù¸¥ °ÍÀÔ´Ï´Ù.
16Ä®¶óÀÇ °æ¿ì¡¤¡¤¡¤¡¤256Ä®¶óÀÇ °æ¿ì, 16ºñÆ® Ä®¶óÀÇ °æ¿ì, 32ºñÆ®ÀÇ °æ¿ìµî
(¿äÁò24ºñÆ®´Â Àß »ç¿ëÀÌ ¾È ÇϹǷΠ»ý·«ÇÕ´Ï´Ù. 3¹ÙÀÌÆ®ÀÌ°í º¹ÀâÇÑ Ã³¸®°¡ µÈ´Ù)
Ä®¶ó ¸ðµå¿¡ ÀÇÇØ Æ÷¸ËÀÌ ´Ù¸£¹Ç·Î °¢°¢ÀÇ ¸ðµå¿¡ ´ëÇØ¼ Äڵ尡 ÇÊ¿äÇÏ°Ô µË´Ï´Ù.
±× ¶§¹®¿¡ ¿ì¼± ½Ç½ÃÇØ¾ß ÇÏ´Â °ÍÀº ¡¸¼ÆäÀ̽º¡¹ÀÇ ¡¸Çȼ¿ Æ÷¸Ë¡¹À» ÃëµæÇÏ´Â °ÍÀÔ´Ï´Ù.
¡¸Çȼ¿ Æ÷¸Ë¡¹À» ¾òÀ¸·Á¸é ¿ì¼± DDPIXELFORMAT ±¸Á¶Ã¼¸¦ Á¤ÀÇÇÕ´Ï´Ù.
ÀÌ ±¸Á¶Ã¼´Â DirectDrawSurfaceÀÇ ¡¸GetPixelFormat ¸Þ¼Òµå¡¹¸¦ »ç¿ëÇØ¼ ¡¸Çȼ¿ Æ÷¸Ë Á¤º¸¡¹¸¦ ¾òÀ» ¶§¿¡ ÇÊ¿äÇÑ ±¸Á¶Ã¼ÀÔ´Ï´Ù.
(DDPIXELFORMAT ±¸Á¶Ã¼¿¡ Çȼ¿ Æ÷¸Ë Á¤º¸°¡ °Ý³³µË´Ï´Ù. )
DDPIXELFORMAT pixel;
pixel.dwSize=
sizeof(pixel);
if(DrawSurface->GetPixelFormat(&pixel)! =DD_OK)
return FALSE;
À§ÀÇ ÄÚµå¿Í °°ÀÌ ±â¼úÇÏ¸é ¡¸DrawSurface(¼ÆäÀ̽º)¡¹ÀÇ Çȼ¿ Æ÷¸ËÀ» ¾òÀ» ¼ö°¡ ÀÖ½À´Ï´Ù.
¡¸DDPIXELFORMAT ±¸Á¶Ã¼¡¹ÀÇ ¡¸dwRGBBitCount ¸â¹ö¡¹¿¡´Â ¼ÆäÀ̽ºÀÇ Ä®¶ó ¸ðµå Á¤º¸
°¡ °Ý³³µË´Ï´Ù.
(4, 8, 16, 24, ¶Ç´Â 32)ÀÇ °ªÀÌ ÀÌ ¸â¹ö¿¡ °Ý³³µË´Ï´Ù.
¿ì¼± ¿©±â¼ Ä®¶ó ¸ðµå¿¡ ÀÇÇÑ ¹ÝÅõ°úó¸®(¾ËÆÄºí·»µù)ÀÇ Ã³¸®ÀÇ ³ª´©±â¸¦ ½Ç½ÃÇÕ´Ï´Ù.
if(pixel.dwRGBBitCount == 4) Alpha_4();
//16Ä®¶óÀÏ ¶§ÀÇ ¾ËÆÄ ºê·£µå ó¸® ÇÔ¼ö
if(pixel.dwRGBBitCount == 8) Alpha_8();
//256Ä®¶óÀÏ ¶§ÀÇ ¾ËÆÄ ºê·£µå ó¸® ÇÔ¼ö
if(pixel.dwRGBBitCount == 16) Alpha_16();
//16ºñÆ® Ä®¶óÀÏ ¶§ÀÇ ¾ËÆÄ ºê·£µå ó¸® ÇÔ¼ö
if(pixel.dwRGBBitCount == 24) Alpha_24();
//24ºñÆ® Ä®¶óÀÏ ¶§ÀÇ ¾ËÆÄ ºê·£µå ó¸® ÇÔ¼ö
if(pixel.dwRGBBitCount == 32) Alpha_32();
//32ºñÆ® Ä®¶óÀÏ ¶§ÀÇ ¾ËÆÄ ºê·£µå ó¸® ÇÔ¼ö
ÀÌ·¸°Ô ³ª´©¾î ó¸®ÇÏ´Â °ÍÀÌ È¿À²ÀûÀÔ´Ï´Ù.
º¸ÃæÀ¸·Î 256Ä®¶óÀÇ °æ¿ì´Â Ä®¶ó°¡ ÆÈ·¹Æ®¿¡ °ü¸®µÇ±â¶§¹®¿¡ À§¿¡¼ ¼³¸íÇϰí ÀÖ´Â °Í °°Àº Çȼ¿ÀÇ Ä®¶ó Á¤º¸¸¦ ¾ò¾î ±×°ÍÀ» °è»êÇÑ´Ù¡¤¡¤¡¤¾à°£ ¹æ¹ýÀÌ ´Ù¸¨´Ï´Ù.
±×·³, Ä®¶ó ¸ðµå¿¡ ÀÇÇÑ Ã³¸® ³ª´©±â·Î ¡¸16ºñÆ® ¸ðµå 󸮡¹·Î ÁøÇàµÇ¾ú´Ù°í ÇսôÙ.
1 Çȼ¿(1 µµÆ®)À» Ç¥ÇöÇϴµ¥ ¡¸16ºñÆ®¡¹ÀÇ ¸Þ¸ð¸®¸¦ »ç¿ëÇØ¼.
±× Áß¿¡ ¡¸R¡¤G¡¤B¡¹ÀÇ ¿ä¼Ò°¡ °Ý³³µÇ°í ÀÖ´Â °ÍÀÔ´Ï´Ù.
¾ËÆÄ ºê·£µåÀ̱⠶§¹®¿¡ °è»êÇÏ·Á¸é¡¤¡¤¡¤¡¤16ºñÆ® ¾È¿¡¼ ¡¸R¡¤G¡¤B¡¹¸¦ °³º°ÀûÀ¸·Î »Ì¾Æ³¾
Çʿ䰡 ÀÖ½À´Ï´Ù.
±× ¶§¹®¿¡¡¸¸¶½ºÅ© ÇÁ·Î¼¼½Ì¡¹À̶ó°í ÇÏ´Â ºñÆ® ´ÜÀ§°¡ Àִ ó¸®¸¦ ½Ç½ÃÇÕ´Ï´Ù.
°Å±â¿¡ ÇÊ¿äÇÑ¡¸¸¶½ºÅ©¡¹¸¦ ¡¸DDPIXELFORMAT ±¸Á¶Ã¼¡¹ÀÇ ¡¸lBBitMask¡¹ ¡¸lGBitMask¡¹ ¡¸lRBitMask¡¹¸â¹ö´Â °¡Áö°í ÀÖ½À´Ï´Ù.
¸¶½ºÅ© ÇÁ·Î¼¼½ÌÀÇ ÇϳªÀÇ ¿¹
¾î´À ¼ÆäÀ̽ºÀÇ Çȼ¿ Æ÷¸ËÀÌ ÀÌÇÏÀÇ ±×¸²´ë·Î¿´´Ù°í ÇսôÙ.
±× Æ÷¸ËÀÎ Çȼ¿ÀÌ ÀÌÇÏÀÇ °°Àº Ä®¶ó µ¥ÀÌŸ¸¦ °¡Áö°í ÀÖ¾ú´Ù°í ÇÕ´Ï´Ù.
ÀÌ ¶§, G(green)ÀÇ Ä®¶ó °ª¸¸À» ¾òÀ¸·Á¸é? ¾î¶»°Ô Çϸé ÁÁÀ»±î¿ä?
¿ª½Ã Á¦ÀÏ ÁÁ´Ù°í »ý°¢µÇ´Â °ÍÀÌ ¡¸¸¶½ºÅ© ÇÁ·Î¼¼½Ì¡¹ÀÔ´Ï´Ù.
¡¸¸¶½ºÅ© ÇÁ·Î¼¼½Ì¡¹Àº ºñÆ® ´ÜÀ§·Î ¡¸AND¡¹ ¡¸OR¡¹ ¡¸XOR¡¹µîÀ» ÃëÇØ ÀÓÀÇÀÇ À§Ä¡ÀÇ
ºñÆ®¸¸À» Á¶ÀÛÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù.
ÀÌ °æ¿ì,¡¸ÀÖ´Â ºÎºÐ¸¸À» ³²±ä´Ù¡¹¶ó´Â ó¸®À̹ǷÎ.
¡¸GetPixelFormat ¸Þ¼Òµå¡¹´Â ¡¸GÁ¤º¸¡¹ÀÇ ºñÆ® À§¿¡¸¸ ¡¸1¡¹·Î ¡¸¸¶½ºÅ©¡¹¸¦
ÁغñÇϰí ÀÖÀ» °ÍÀÔ´Ï´Ù.
ÁغñµÈ ¸¶½ºÅ© µ¥ÀÌŸ¿Í Ä®¶ó µ¥ÀÌŸ¸¦ ¡¸AND¡¹ÇÏ¸é ¡¸Gµ¥ÀÌŸ¡¹¸¸ÀÌ ºñÆ®¿¡ ³²½À´Ï´Ù.
¡¸AND¡¹´Â ¾çÂÊ ¸ðµÎÀÇ ºñÆ®°¡ ¡¸1¡¹À̾úÀ» °æ¿ì, ºñÆ®ÀÇ °á°ú°¡¡¸1¡¹ÀÌ µÈ´Ù.
±× Àܴ̿ ¡¸0¡¹(
true,
falseÀÇ °³³ä)
GreenÀÇ Ä®¶ó µ¥ÀÌŸ¸¸ ºñÆ®°¡ ÀÖ½À´Ï´Ù.
±× ÈÄÀÇ Ã³¸®·Î¼ ºñÆ® ½¬ÇÁÆ®µîÀ» ½Ç½ÃÇÏ¸é ¿Ã¹Ù¸¥ °ªÀ¸·Î ÇØ¼ Ä®¶ó °ªÀ» ¾òÀ» ¼ö°¡ ÀÖ½À´Ï´Ù.
DWORD Rmask;
DWORD Bmask;
DWORD Gmask;
Rmask=pixel.dwRBitMask;
Bmask=pixel.dwBBitMask;
Gmask=pixel.dwGBitMask;
¸¶½ºÅ© µ¥ÀÌŸ¸¦ º¸°üÇÑ´Ù¸é º¸°üÇØ µÓ½Ã´Ù.
¡á󸮿¡ ÇÊ¿äÇÑ º¯¼ö¸¦ ÁغñÇÑ´Ù
WORD *LpBg;
//¹è°æÀÇ ¸Ê(¹é ¹öÆÛ)ÀÇ Æ÷ÀÎÅÍ
WORD *LpCha;  
//¹è°æ¿¡ °ÅµìÇÏ´Â Äɸ¯ÅÍ ¼ÆäÀ̽ºÀÇ Æ÷ÀÎÅÍ
À̰ÍÀº ¼ÆäÀ̽º¸¦ ¡¸·Ï¡¹ÇÒ ¶§(Àá±Û ¶§)¿¡ ÇÊ¿äÇÕ´Ï´Ù.
Çȼ¿ÀÇ Ä®¶ó Á¤º¸¸¦ ¾ò±â À§Çصµ ´ë»ó ¼ÆäÀ̽ºÀÇ ÁÖ¼Ò°¡ ÇÊ¿äÇϱ⠶§¹®ÀÔ´Ï´Ù.
ÀÌ Æ÷ÀÎÅÍ¿¡´Â ¡¸·Ï¡¹ÇÒ ¶§¿¡ À̹ÌÁö µ¥ÀÌŸÀÇ ¼±µÎ ÁÖ¼Ò°¡ °Ý³³µË´Ï´Ù.
BYTE *Chatop;
BYTE *Bgtop;
»ùÇÿ¡¼´Â 32¡¿32ÀÇ ¹üÀ§¸¦ ¾ËÆÄ ó¸®ÇÕ´Ï´Ù.
±× ¡¸ÇࡹÀÇ ¼±µÎ Çȼ¿ÀÇ ÁÖ¼Ò¸¦ º¸°üÇÏ´Â º¯¼öÀÔ´Ï´Ù.
DDSURFACEDESC ddsd;
//·ÏÇÒ ¶§ÀÇ µ¥ÀÌŸ¸¦ °Ý³³ÇÏ´Â ±¸Á¶Ã¼
DDSURFACEDESC ddsds;
//·ÏÇÒ ¶§ÀÇ µ¥ÀÌŸ¸¦ °Ý³³ÇÏ´Â ±¸Á¶Ã¼
¼ÆäÀ̽º¸¦ Àá±×·Á¸é, ¡¸Lock ¸Þ¼Òµå¡¹¸¦ »ç¿ëÇÕ´Ï´Ù.
±× ¶§, ÆÄ¶ó¸ÞŸ·Î¼ ¡¸DDSURFACEDESC¡¹°¡ ÇÊ¿äÇÏ°Ô µÇ¹Ç·Î ÁغñÇÕ´Ï´Ù.
DWORD red_1, red_2, red_3
DWORD green_1, green_2, green_3;
DWORD blue_1, blue_2, blue_3;
ºñÆ®¿ °è»ê¿¡ »ç¿ëÇÏ´Â º¯¼öÀÔ´Ï´Ù.
***_1¿¡´Â¡¤¡¤¡¤¹è°æÂÊ Çȼ¿ÀÇ Ä®¶ó Á¤º¸ÀÇ ºñÆ®¿
***_2¿¡´Â¡¤¡¤¡¤¹¦ÈÂÊ Çȼ¿ÀÇ Ä®¶ó Á¤º¸ÀÇ ºñÆ®¿
***_3¿¡´Â¡¤¡¤¡¤°è»ê ó¸® ÈÄÀÇ Ä®¶ó Á¤º¸ ºñÆ®¿À» °Ý³³ ÇÕ´Ï´Ù.
ó¸®
--------------------------------------------------------------------------------
A
if(BackSurface->Lock(
NULL, &ddsd, DDLOCK_WAIT |
DDLOCK_SURFACEMEMORYPTR,
NULL) == DD_OK)
{
if(sprite->Lock(
NULL, &ddsds, DDLOCK_WAIT |
DDLOCK_SURFACEMEMORYPTR ,
NULL) == DD_OK)
{
 
//¾ç¼ÆäÀ̽º¸¦ Àá±Ù´Ù
LpBg = (
WORD*) ddsd.lpSurface;
 
//ÁÖ¼Ò¸¦ Ãëµæ(Àá±Ù ¹é ¹öÆÛ)
LpCha = (
WORD*) ddsds.lpSurface;
 
//ÁÖ¼Ò¸¦ Ãëµæ(Àá±Ù ¿ÀÇÁ¼ÆäÀ̽º)
 
// Ppixel¿¡´Â Àá±Ù ¼ÆäÀ̽ºÀÇ Á»ó ù¹øÂ°ÀÇ
 
// µµÆ® Á¤º¸ÀÇ ÁÖ¼Ò°¡ µé¾î°£´Ù
for(
int y=0;y<32;y++)
{
Chatop = (
BYTE*) LpCha;
Bgtop = (
BYTE*) LpBg;
for(
int x=0;x<32;x++)
{
 
//ij¸¯ÅÍ »çÀÌÁî°¡ 32*32(·çÇÁ)
 
//¾ËÆÄ ºê·£µå ó¸®
red_1 = *LpBg & Rmask;
red_2 = *LpCha & Rmask;
red_3 = ((red_1 + red_2)/2);
blue_1 = *LpBg & Bmask;
blue_2 = *LpCha & Bmask;
blue_3 = ((blue_1 + blue_2)/2);
green_1 = *LpBg & Gmask;
green_2 = *LpCha & Gmask;
green_3 = ((green_1 + green_2)/2);
*LpBg = (
WORD)((red_3 & Rmask)|
(green_3 & Gmask)|(blue_3 & Bmask));
LpBg++;
LpCha++;
 
//¸¶Áö¸·
}
LpBg = (
WORD*)(Bgtop+ddsd.lPitch);
LpCha = (
WORD*)(Chatop+ddsds.lPitch);
}
}
else
return FALSE;
}
else
return FALSE;
//¼ÆäÀ̽ºÀÇ Unlock
if(BackSurface->Unlock(
NULL)! =DD_OK)
return FALSE;
if(sprite->Unlock(
NULL)! =DD_OK)
return FALSE;
¾ËÆÄ ºê·£µåÀÇ Ã³¸®´Â À§¿¡ ÀÖ´Â ´ë·ÎÀÔ´Ï´Ù.
¼ÆäÀ̽º¸¦ Àá±×°í ±× ¼±µÎ Çȼ¿ÀÇ ÁÖ¼Ò¸¦ ¾ò´Â ºÎºÐÀº ÀüÀå°ú °°¾Æ¼ »ý·«ÇÕ´Ï´Ù.
·çÇÁ°¡ À§¿Í °°ÀÌ µÇ¾î ÀÖ´Â °ÍÀº 32¡¿32 Çȼ¿ÀÇ Äɸ¯Å͸¦ ¾ËÆÄ ó¸®Çϱ⠶§¹®ÀÔ´Ï´Ù
for(
int y=0;y<32;y++)
{
Chatop = (
BYTE*) LpCha;
Bgtop = (
BYTE*) LpBg;
¿ì¼± À§ÀÇ Ã³¸®ÀÔ´Ï´Ù.
YÃàÀÇ ·çÇÁ°¡ ó¸®ÀÇ Á¾·á Á¶°ÇÀÌ µÇ¾î ÀÖ½À´Ï´Ù.
1¿ ¸¶´Ù
Chatop = (
BYTE*) LpCha;
Bgtop = (
BYTE*) LpBg;
Çϴ ó¸®¸¦ ¹Ýº¹ÇÏ´Â °ÍÀÌ µË´Ï´Ù.
·çÇÁ¿¡ µé¾î°¡±â Àü¿¡ LpCha¡¤LpBgÀÇ Æ÷ÀÎÅÍ º¯¼ö(
WORDÇü)¿¡´Â ¼ÆäÀ̽º¸¦ ·ÏÇÒ ¶§ÀÇ ¼±µÎ
Çȼ¿ÀÇ ÁÖ¼Ò°¡ ´ëÀԵǾî ÀÖ½À´Ï´Ù.
·çÇÁ ó¸®ÀÇ 1ȸ°¿¡ ¡¸Chatop¡¤Bgtop¡¹¿¡´Â ¼±µÎ Çȼ¿ ÁÖ¼Ò°¡ °Ý³³µË´Ï´Ù.
±× ÈÄ LpCha¡¤LpBg´Â ¡¸++¿¬»êÀÚ¡¹·Î ´ÙÀ½ ÁÖ¼Ò·Î ³»¿ëÀÌ º¯ÈÇÕ´Ï´Ù.
¡¸Chatop¡¤Bgtop¡¹¿¡´Â °¢ ¿ÀÇ ¼±µÎ Çȼ¿ ÁÖ¼Ò°¡ ´ëÀÔµÇ¾î °£´Ù
Çȼ¿ÀÇ ¹ÝÅõ¸í ó¸®
 
//¾ËÆÄ ºê·£µå ó¸®
red_1 = *LpBg & Rmask;
red_2 = *LpCha & Rmask;
red_3 = ((red_1 + red_2)/2);
blue_1 = *LpBg & Bmask;
blue_2 = *LpCha & Bmask;
blue_3 = ((blue_1 + blue_2)/2);
green_1 = *LpBg & Gmask;
green_2 = *LpCha & Gmask;
green_3 = ((green_1 + green_2)/2);
·çÇÁ³»¿¡¼ À§ÀÇ Ã³¸®¸¦ ¹Ýº¹ÇØ ½Ç½ÃÇϵµ·Ï µÇ¾î ÀÖ½À´Ï´Ù.
À̰ÍÀÌ ¹ÝÅõ¸í ó¸®ÀÇ Áß½ÉÀ̶ó°í ÇÒ ¼ö ÀÖ´Â ¿¬»ê ó¸®ÀÔ´Ï´Ù.
À§¿¡¼µµ ¼³¸íÇϰí ÀÖ´Â °Íó·³, ¸¶½ºÅ©¿Í Çȼ¿ÀÇ ºñÆ® ¿À» ¡¸AND¡¹¿¬»êÇØ¼ Ä®¶óÁ¤º¸¸¸À» »Ì¾Æ³»¼ ¡¸***_*¡¹ÀÇ º¯¼ö·Î À¯ÁöÇϰí ÀÖ´Â °ÍÀÔ´Ï´Ù.
***_1¡¡ÀÇ Ã³¸®¿¡´Â ¹è°æ(¹é ¹öÆÛ)ÀÇ ´ëÀÀ Çȼ¿ÀÇ Ä®¶óÁ¤º¸¸¦ ¾ËÆÄ ó¸®
***_2¡¡ÀÇ Ã³¸®¿¡¼´Â ½ºÇÁ¶óÀÌÆ®(ij¸¯ÅÍ)ÀÇ ´ëÀÀ Çȼ¿ÀÇ Ä®¶óÁ¤º¸¸¦ ¾ËÆÄ ó¸®
***_3¡¡ÀÇ Ã³¸®¿¡¼´Â 1°ú 2·Î ¾òÀ» ¼ö ÀÖ´ø Ä®¶ó µ¥ÀÌÅ͸¦ ´õÇØ¼ 2·Î ³ª´©°í ÀÖ½À´Ï´Ù.
2·Î ³ª´©¸é 50%Åõ¸íµµÀÇ ¾ËÆÄ ºê·£µå°¡ µË´Ï´Ù.
¹é ¹öÆÛ¡¤½ºÇÁ¶óÀÌÆ®ÀÇ ¾ç¼ÆäÀ̽ºÀÇ Çȼ¿Ä®¶ó¿ä¼Ò¸¦ ¹Ý¹ÝÀ̶ó°í ÇÏ´Â ¿¬»ê °á°ú°¡ µÇ±â ¶§¹®ÀÔ´Ï´Ù
*LpBg = (
WORD)((red_3 & Rmask) | (green_3 & Gmask) | (blue_3 & Bmask));
LpBg++;
LpCha++;
ÀÌ Ã³¸®´Â R¡¤G¡¤BÀÇ Ä®¶óÀÇ ¿ä¼Ò¸¶´Ù °è»êµÈ Ä®¶óµ¥ÀÌŸ¸¦ Çϳª¿¡ ¸ðÀ¸°í
¡¸LpBg¡¹(¹é ¹öÆÛ¿¡ÀÇ Æ÷ÀÎÅÍ)°¡ °¡¸®Å°´Â ÁÖ¼Ò¿¡ µ¥ÀÌŸ¸¦ Àü¼Û ÇÕ´Ï´Ù.
¿©±â±îÁöÀÇ Ã³¸®·Î ¾ËÆÄ ºê·£µåÀÇ 1 µµÆ®ÀÇ Ã³¸®°¡ ³¡³ °ÍÀÌ µË´Ï´Ù.
´ÙÀ½ µµÆ®¿¡ 󸮸¦ ¿Å±â±â À§Çؼ ¡¸LpBg ¡¤ LpCha¡¹ÀÇ Æ÷ÀÎÅÍ º¯¼ö¿¡ ¡¸++¡¹ÇÕ´Ï´Ù.
ÀÌ·¸°Ô ÇÔÀ¸·Î Æ÷ÀÎÅÍ º¯¼ö´Â 1 ÁÖ¼Ò·Î ³ª¾Æ°©´Ï´Ù. (¿À¸¥ÂÊÀÇ µµÆ®¿¡)
LpBg = (
WORD*)(Bgtop + ddsd.lPitch);
LpCha = (
WORD*)(Chatop + ddsds.lPitch);
}
ÀÌ Ã³¸®´Â ÀÏÇà(¿· 32°³)ÀÇ Ã³¸®°¡ ³¡³µÀ» ¶§¿¡ ½ÇÇàµÇ´Â ó¸®ÀÔ´Ï´Ù.
À̰ÍÀº ¡¸LpBg ¡¤ LpCha¡¹Æ÷ÀÎÅÍ º¯¼ö¿¡ ´ÙÀ½ÀÇ ÇàÀÇ ÁÖ¼Ò¸¦ °Ç³×ÁÖ°í ÀÖ½À´Ï´Ù.
À̰ÍÀÌ ¾øÀ¸¸é »ç°¢Çü¿¡ Àü¼Û µÇÁö ¾Ê½À´Ï´Ù.
ddsd.lPitch¿¡´Â ±× ¼ÆäÀ̽ºÀÇ °¡·ÎÀÇ Çȼ¿¼ö°¡ °Ý³³µÇ°í ÀÖ½À´Ï´Ù.
¡¸Bgtop ¡¤ Chatop¡¹¿¡ ±× °ªÀ» ´õÇϸ顤¡¤¡¤¡¤°á°ú, ÁÖ¼Ò´Â ´ÙÀ½ÀÇ ÇàÀÇ ¼±µÎ¿Í µ¿ÀÏÇØÁý´Ï´Ù.
»ùÇÿ¡¼´Â, 32¡¿32ÀÇ ½ºÇÁ¶óÀÌÆ® À̹ÌÁö¸¦ ¹é ¹öÆÛÀÇ 0, 0 ÁÂÇ¥¿¡ Àü¼ÛÇϰí ÀÖ½À´Ï´Ù.
Åõ°ú 󸮸¦ ÇÏÁö ¾Ê±â ¶§¹®¿¡ ½ºÇÁ¶óÀÌÆ®ÀÇ ¹è°æµµ ¹ÝÅõ¸í µÇ°í ÀÖ½À´Ï´Ù.
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
½ºÇÁ¶óÀÌÆ® ¹ÝÅõ¸í ó¸®
Àü¹øÀÇ ¹ÝÅõ¸í 󸮿¡¼´Â ij¸¯ÅÍ¿¡¼ Åõ¸íÇÏ°Ô ¸¸µé°í ½ÍÀº »öÀ» ¹ÝÅõ¸í ó¸®Çß½À´Ï´Ù.
À̹ø¿¡´Â ±× Á¡À» ÇØ¼ÒÇØ ¡¸½ºÇÁ¶óÀÌÆ®¿ë ¹ÝÅõ¸í ¹¦È¡¹¸¦ ÇÕ´Ï´Ù.
Àü¹ø¿¡´Â À§ÀÇ Ä³¸¯ÅÍ À̹ÌÁöÀÇ ÇÎÅ©ÀÇ ºÎºÐ±îÁö ¹¦È µÇ¾ú½À´Ï´Ù.
¡á¾Ë°í¸®Áò
±âº»ÀûÀÎ ºÎºÐÀº Àü¹ø°ú Å« Â÷ÀÌ´Â ¾ø½À´Ï´Ù.
Ãß°¡ 󸮷μ ¼ÆäÀ̽ºÀÇ Æ÷ÀÎÅͰ¡ °¡¸®Å°´Â Çȼ¿ÀÇ »öÀÌ ¡¸ÇÎÅ©¡¹¶ó¸é
±× »öÀ» ¾ËÆÄ ºê·£µå ó¸®ÀÇ ´ë»óÀ¸·Î ÇÏÁö ¾Ê°í, ¡¸¹é ¹öÆÛ(¹è°æ)¡¹ÀÇ »öÀ»
100%¹Ý¿µ½Ãŵ´Ï´Ù.
¡¸Åõ°ú ½ÃŰ´Â °ª°ú ºñ±³¡¹Çϴ ó¸®°¡ Ãß°¡ µÇ¹Ç·Î ÀÌ ÂÊÀÇ ½ºÇÁ¶óÀÌÆ® ¾ËÆÄ ºê·£µå°¡
¾à°£ ¹«°Å¿î 󸮰¡ µË´Ï´Ù.
¡áÅõ°ú »öÀÇ Ä®¶ó °ª(ºñÆ® ¿)
À̰ÍÀ» °áÁ¤ÇÏ·Á¸é ´Ù¾çÇÏ°Ô ¹æ¹ýÀÌ ÀÖ½À´Ï´Ù.
ÀϹÝÀûÀÎ °ÍÀÌ ¡¸Black¡¹À» Åõ°ú»öÀ¸·Î ÇÏ´Â ¹æ¹ýÀÔ´Ï´Ù(¹°·Ð ¹ÝµíÀÌ BlackÀÏ ÇÊ¿ä´Â ¾ø´Ù).
±× ÀÌÀ¯´Â ¾Æ¸¶µµ ¡¸Black¡¹ÀÇ Ä®¶ó °ªÀº ¡¸00000000...¡¹À̹ǷΠ°áÁ¤ÇÏ´Â °ÍÀÌ °£´ÜÇÕ´Ï´Ù.
ÀÌ °æ¿ì´Â ´ç¿¬È÷ ½ºÇÁ¶óÀÌÆ® ±× ÀÚü¿¡ ¡¸00000...BlackÀ» »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù¡¹
ÀÌ ¼Ò½º¿¡¼´Â Àü¼ÛÇÏ´Â ½ºÇÁ¶óÀÌÆ®ÀÇ ¹üÀ§·Î¡¤¡¤¡¤Á¦ÀÏ Á»ó Çȼ¿·Î »ç¿ëµÇ°í ÀÖ´Â »öÀ»
¸¶½ºÅ© Ä®¶ó·Î ÇÕ´Ï´Ù.
ÀÌ °æ¿ì´Â ij¸¯ÅÍ À̹ÌÁöÀÇ Á¦ÀÏ Á»óÀÇ Çȼ¿Àº ¸¶½ºÅ© Ä®¶ó¿©¾ß ÇÏ´Â Á¦¾àÀÌ
µû¸¨´Ï´Ù. ¡¤¡¤ÇÏÁö¸¸, °Å±â±îÁö Äɸ¯ÅÍ À̹ÌÁö°¡ µÉ ÀÏÀº Àû±â ¶§¹®¿¡ ¿ì¼± ±¦Âú½À´Ï´Ù.
¡áÁ¦ÀÏ Á»ó Çȼ¿ÀÇ Ä®¶ó °ªÀ» ¾òÀ¸·Á¸é?
À̰ÍÀº °£´ÜÇÕ´Ï´Ù.
¼ÆäÀ̽º¸¦ Àá±×°í ¡¸DDSURFACEDESC ±¸Á¶Ã¼ lpSurface ¸â¹ö¡¹ÀÇ ÁÖ¼ÒÀÇ ³»¿ëÀ» ÃëµæÇÕ´Ï´Ù.
DDSURFACEDESC ddsd;
memset(&ddsd, 0,
sizeof(ddsd));
ddsd.dwSize =
sizeof(ddsd);
//¼ÆäÀ̽º¸¦ Àá±Þ´Ï´Ù
surface->Lock(
NULL, &ddsd, DDLOCK_WAIT |
DDLOCK_SURFACEMEMORYPTR,
NULL);
char *p=(
char *) ddsd.lpSurface;
//Á»ó°¢ÀÇ »öÀ» Åõ°ú »öÀ¸·Î ÇÕ´Ï´Ù
DWORD transparent=*(
DWORD *) p;
¼Ò½º´Â ÀÌ·¸°Ô µÇ°ÚÁö¿ä.
¡áó¸®ÀÇ È帧
LPBgp =(
WORD*) ddsds.lpSurface
//Á»ó°¢ÀÇ »öÀ» Åõ°ú»öÀ¸·Î ÇÕ´Ï´Ù
for(
int y=0;y<32;y++)
{
Chatop = (
BYTE*) LpCha;
Bgtop = (
BYTE*) LpBg;
for(
int x=0;x<32;x++)
{//ij¸¯ÅÍ »çÀÌÁî°¡ 32*32À̹ǷΠ±× ·çÇÁ
if(*LPBgp != *LpCha)
{
 
//¾ËÆÄ ºê·£µå ó¸®
red_1 = *LpBg & Rmask;
red_2 = *LpCha & Rmask;
red_3 = ((red_1 + red_2)/2);
blue_1 = *LpBg & Bmask;
blue_2 = *LpCha & Bmask;
blue_3 = ((blue_1 + blue_2)/2);
green_1 = *LpBg & Gmask;
green_2 = *LpCha & Gmask;
green_3 = ((green_1 + green_2)/2);
*LpBg = (
WORD)((red_3 & Rmask) |
(green_3 & Gmask)|(blue_3 & Bmask));
}
LpBg++;
LpCha++;
 
//¸¶Áö¸·
}
LpBg = (
WORD*)(Bgtop+ddsd.lPitch);
LpCha = (
WORD*)(Chatop+ddsds.lPitch);
}
Àû»ö ¹®ÀÚÀÇ ºÎºÐÀÌ Ãß°¡µÇ¾ú½À´Ï´Ù.
if(transparent != *LpCha)
{
ÀÇ Ã³¸®´Â Åõ°ú ÇÏ´Â Ä®¶ó °ª(transparent)°ú ij¸¯ÅÍÀÇ Çȼ¿ Ä®¶ó °ªÀ»
ºñ±³Çؼ ¡¸°°Áö ¾ÊÀ» ¶§¡¹if¾ÈÀ» ó¸®ÇÕ´Ï´Ù.
µ¿ÀÏÇÒ ¶§´Â ±×´ë·Î Æ÷ÀÎÅͰ¡ ³ª°©´Ï´Ù.
°á·ÐÀûÀ¸·Î ¹é ¹öÆÛ´Â ¾Æ¹«°Íµµ º¯È°¡ ¾ø°í ±× ºÎºÐÀº Åõ°ú µÈ ÇüŰ¡ µË´Ï´Ù.
ÄÚµå
³»¿ëÀº ÀüȸÀÇ ¼Ò½ºÀÇ ¾ËÆÄ ºê·£µå ÇÔ¼ö¿Í ¾Æ·¡ÀÇ Ã³¸®¸¦ ¹Ù²ã ÁØ´Ù¸é ¾Æ¹«·± ¹®Á¦°¡ ¾øÀ» °ÍÀÔ´Ï´Ù.
//ÀÌ ÇÔ¼ö´Â ¼ÆäÀ̽º¸¦ Àá±Ù(·Ï) ¸Þ¸ð¸®¸¦ Çϳª¾¿ ÂüÁ¶Çϸé¼
//´ë»óÀÇ ¼ÆäÀ̽º¿¡ ¹¦È ÇØ ³ª°£´Ù.
//Blt¸¦ »ç¿ëÇÏ´Â ¹æ¹ý°ú ºñ±³Çϸ顤¡¤¡¤½ºÇǵå´Â ºÒ¸í
BOOL LockBlt(void)
{
DWORD Rmask
//¸¶½ºÅ© µ¥ÀÌÅÍ
DWORD Bmask;
DWORD Gmask;
DDPIXELFORMAT pixel;
WORD *LpBg
//¹è°æÀÇ ¸Ê(¹é ¹öÆÛ)ÀÇ Æ÷ÀÎÅÍ
WORD *LpCha
//¹è°æ¿¡ °ÅµìÇϴ ij¸¯ÅÍ ¼ÆäÀ̽ºÀÇ Æ÷ÀÎÅÍ
BYTE *Chatop
//Åõ°ú ´ë»óÀÇ Ã¹¹øÂ° Çȼ¿ÀÇ ÁÖ¼Ò
BYTE *Bgtop;
WORD *LPBgp;
DDSURFACEDESC2 ddsd;
//lockÇÒ ¶§ÀÇ µ¥ÀÌÅ͸¦ °Ý³³ÇÏ´Â ±¸Á¶Ã¼
DDSURFACEDESC2 ddsds;
//lockÇÒ ¶§ÀÇ µ¥ÀÌÅ͸¦ °Ý³³ÇÏ´Â ±¸Á¶Ã¼
DWORD red_1, red_2, red_3;
//red
DWORD green_1, green_2, green_3;  
//green
DWORD blue_1, blue_2, blue_3;
//blue
ZeroMemory(&ddsd,
sizeof(ddsd));
//µ¥ÀÌÅÍ ±¸Á¶Ã¼¸¦ Á¦·Î Ŭ¸®¾î
ddsd.dwSize =
sizeof(ddsd);  
//±¸Á¶Ã¼ÀÇ »çÀÌÁ °Ç³×ÁØ´Ù
ZeroMemory(&ddsds,
sizeof(ddsds));  
//µ¥ÀÌÅÍ ±¸Á¶Ã¼¸¦ Á¦·Î Ŭ¸®¾î
ddsds.dwSize =
sizeof(ddsds);
//±¸Á¶Ã¼ÀÇ »çÀÌÁ °Ç³×ÁØ´Ù
pixel.dwSize=
sizeof(pixel);
if(sprite->GetPixelFormat(&pixel)!=DD_OK)
return FALSE;
Rmask=pixel.dwRBitMask;
Bmask=pixel.dwBBitMask;
Gmask=pixel.dwGBitMask;
 
//Ãʱâ ó¸®
if(pixel.dwRGBBitCount!=16)
return false;
 
//Ä®¶ó ¸ðµå°¡ 16ºñÆ® ÀÌ¿ÜÀÏ ¶§ 󸮸¦ ÁßÁö
if(BackSurface->Lock(
NULL, &ddsd, DDLOCK_WAIT | DDLOCK_SURFACEMEMORYPTR,
NULL) == DD_OK)
{
if(sprite->Lock(
NULL, &ddsds, DDLOCK_WAIT | DDLOCK_SURFACEMEMORYPTR ,
NULL) == DD_OK)
{
 
//¾ç¼ÆäÀ̽º¸¦ Àá±Ù´Ù
LpBg = (
WORD*) ddsd.lpSurface;
 
//ÁÖ¼Ò¸¦ Ãëµæ(Àá±Ù ¹é ¹öÆÛ)
LpCha = (
WORD*) ddsds.lpSurface;
 
//ÁÖ¼Ò¸¦ Ãëµæ(Àá±Ù ¿ÀÇÁ¼ÆäÀ̽º)
LPBgp =(
WORD*) ddsds.lpSurface;
 
//Á»ó°¢ÀÇ »öÀ» Åõ°ú»öÀ¸·Î
 
//DWORD *transparent=(DWORD *) p;
 
//Ppixel¿¡´Â Àá±Ù ¼ÆäÀ̽ºÀÇ Á»óù¹øÂ° µµÆ®ÀÇ Á¤º¸¿¡ ÁÖ¼Ò°¡
 
// µé¾î°£´Ù
for(
int y=0;y<32;y++)
{
Chatop = (
BYTE*) LpCha;
Bgtop = (
BYTE*) LpBg;
for(
int x=0;x<32;x++)
{
 
//ij¸¯ÅÍ »çÀÌÁî°¡ 32*32À̹ǷΠ±× ·çÇÁ
if(*LPBgp != *LpCha)
{
 
//¾ËÆÄ ºê·£µå ó¸®
red_1 = *LpBg & Rmask;
red_2 = *LpCha & Rmask;
red_3 = ((red_1 + red_2)/2);
blue_1 = *LpBg & Bmask;
blue_2 = *LpCha & Bmask;
blue_3 = ((blue_1 + blue_2)/2);
green_1 = *LpBg & Gmask;
green_2 = *LpCha & Gmask;
green_3 = ((green_1 + green_2)/2);
*LpBg = (
WORD)((red_3 & Rmask) | (green_3 & Gmask)|(blue_3 & Bmask));
}
LpBg++;
LpCha++;
}
LpBg = (
WORD*)(Bgtop+ddsd.lPitch);
LpCha = (
WORD*)(Chatop+ddsds.lPitch);
}
}
else
return FALSE;
}
else
return FALSE;
 
//¼ÆäÀ̽ºÀÇ Unlock
if(BackSurface->Unlock(
NULL)!=DD_OK)
return FALSE;
if(sprite->Unlock(
NULL)!=DD_OK)
return FALSE;
return TRUE;
}