ÀÌ°ÍÀº 1998³â 1¿ù 31ÀϱîÁö ÇÏÀÌÅÚ °ÔÀÓ Á¦ÀÛ µ¿È£È¸¿¡ ¿Ã·È´ø °Á 8ȸºÐ ÀÔ´Ï´Ù.
#####################################################
ÇÏÀÌÅÚ °ÔÀÓÁ¦ÀÛ µ¿È£È¸ ( GO GMA )
------------------------------------------------------------------------
### DIRECT X Æ®·çÄ÷¯ °ÔÀÓ (0) - ÇÁ·Ñ·Î±×
------------------------------------------------------------------------
ÀÛ¼ºÀÚ : ¾È¿µ±â ( HiTEL ID : SMgal )
Á¦°¡ °ÔÁ¦µ¿¿¡ È°µ¿À» ÇÏ¸é¼ ¹«¾ð°¡ ±â·ÏÀ» ³²±â°í ½ÍÀº ¸¶À½¿¡ ÀÌ·± °ÁÂ
¸¦ Çϱâ·Î ¸¶À½ ¸Ô¾ú½À´Ï´Ù.
ÇöÀç À©µµ¿ì¿ë °ÔÀÓÀ» ¸¸µé±â À§Çؼ ´©±¸³ª ÇÒ °Í ¾øÀÌ »ç¿ëÇÏ·Á ÇÏ´Â °ÍÀÌ
¹Ù·ÎÀÌ '´ÙÀÌ·ºÆ® X'( ÀÌÈÄ DX ·Î Ç¥±â ) ÀÔ´Ï´Ù.
ÇÏÁö¸¸ ÀÌ°ÍÀº ¿ì¸®³ª¶ó¿¡ Á¦´ë·Î µÈ ¹ø¿ªº»ÀÌ ¾ø±â ¶§¹®¿¡ óÀ½ ½ÃÀÛÇÏ·Á´Â
ºÐµé¿¡°Ô´Â ÇÔ²² Á¦°øµÇ´Â ¿µ¹® ÇïÇÁ ÆÄÀÏÀÌ µÎ·Æ±â´Â ¾î¿ ¼ö ¾ø´Â ³ë¸©Àε¥
´Ù°¡ ¹ø¿ªº» ¸¶Àú ¾î»öÇÑ ±¸ÀýÀ» »ç¿ëÇÏ¿© ¿ì¸®µéÀÇ ÀλóÀ» ÂîǪ¸®°Ô ÇÏ´Â °Í
¿¡´Â Ʋ¸²¾ø´Â »ç½ÇÀÔ´Ï´Ù.
Á¦°¡ À̹ø °Á¿¡ ±× ¸¹Àº ¸ðµå Áß¿¡¼ Æ®·çÄ÷¯¸¦ ÇÏ´Â³Ä Çϸé, »ó´ëÀûÀ¸·Î
ÇÁ·Î±×·¡¹ÖÀÌ ½¬¿î ¸ðµåÀε¥´Ù°¡ ¾ÕÀ¸·Î ÇØ°¡ °¥ ¼ö·Ï °í±âÁ¾ÀÇ Ãß¼¼ÀÌ°í ±×
·¡ÇÈ Ä«µåÀÇ ¹ßÀüµµ ÇѸò ´Ü´ÜÈ÷ ÇÏ¿© ¾Õ ¼± ¹Ì·¡¿¡´Â Æ®·çÄ÷¯°ÔÀÓµµ ºÎÁö
±â¼ö·Î ³ª¿Ã °ÍÀ̶ó´Â ÀúÀÇ ¿¹»ó¿¡¼ÀÔ´Ï´Ù.
( Á¦ ÁÖ°üÀû ÀÔÀå¿¡¼´Â Æ®·çÄ÷¯ 3D ³×Æ®¿öÅ© °ÔÀÓÀÌ ÃÖ°íºÀÀÌ µÉ ¶§°¡ ¹Ýµå
½Ã ¿Ã °Í °°Àº ´À³¦ÀÔ´Ï´Ù¸¸..... )
¿©±â¼ ´Ù·ç´Â Æ®·çÄ÷¯¶õ ¹Ù·Î 24bit Ä÷¯¸¸À» µûÁö°Ú½À´Ï´Ù. ¾î°¼ ¿ä»õ
¸¸¸¸Ä¡ ¾Ê°Ô Áö¿øÇÏ´Â 32bit Ä÷¯·Î °ÁÂÇÏÁö ¾Ê´À³Ä°í ¹°À¸½Å´Ù¸é Àú´Â ´ç´ç
ÇÏ°Ô ÀÌ·¸°Ô ¸»ÇÏ°Ú½À´Ï´Ù.
" ¿ì¸®Áý ET4000 Àº 640 * 480 * 24bit °¡ ÃÖ°í »ç¾çÀÔ´Ï´Ù. " ¶ó°í..
ÇÏÁö¸¸ 24bit ÇÁ·Î±×·¡¹ÖÀÌ °¡´ÉÇÑ »ç¶÷Àº º°´Ù¸¥ ³ë·Â ¾øÀÌ 16bit ÇÏÀÌÄ÷¯
³ª 32bit Æ®·çÄ÷¯¸¦ ´Ù·ç°Ô µÉ °ÍÀÓÀ» È®½ÅÇϱ⠶§¹®¿¡ ±×ÂÊ¿¡ ´ëÇÑ ¾ð±ÞÀº
°ÅÀÇ ÇÏÁö ¾ÊÀ» ¿¹Á¤ÀÔ´Ï´Ù.
¾ð¾î´Â "µ¨ÆÄÀÌ 3" À¸·Î ¸¸µé °ÍÀÌ°í ¸ðµç ¼Ò½º¿Í ¸®¼Ò½ºµéÀº °ÔÁ¦µ¿ ÀÚ·á½Ç
¿¡ µî·ÏÀÌ µÉ°Ì´Ï´Ù.. ( °Á ³¡³ª°¥ ¹«·Æ¿¡.. )
------------------------------------------------------------------------
±×·³ ¾ÕÀ¸·ÎÀÇ °Á Ŀ¸®Å¥·³ÀÔ´Ï´Ù.
< Á¤±Ô °Á >
1. ´ÙÀÌ·ºÆ® X Æ®·çÄ÷¯ ÃʱâÈ...
2. ´ÙÀÌ·ºÆ® X ¿¡ ´ëÇÑ Çڵ鷯 ¼³Ä¡... ( ¿¹¿Ü, ¿¡·¯, À̺¥Æ®... )
3. ´ÙÀÌ·ºÆ® X DDERROR_SURFACELOST ¿¡ ´ëÇÑ ´ëºñ
4. ´ÙÀÌ·ºÆ® X³»Àå ¸Þ¼Òµå¸¦ ÀÌ¿ëÇÑ ±âº»ÀûÀÎ À̹ÌÁö Âï±â
5. °ÔÀÓÀ» À§ÇÑ ±âº» Ŭ·¡½º ±¸¼º(1)
6. °ÔÀÓÀ» À§ÇÑ ±âº» Ŭ·¡½º ±¸¼º(2)
7. Lock() À» ÀÌ¿ëÇÏ¿© Á÷Á¢ ºñµð¿À ¸Þ¸ð¸®¿¡ Âï±â
+ ¹ÝÅõ¸í È¿°ú ¸¸µé±â
------------------------------------------------------------------------
°Á¿¡ ¾Õ¼ ÁÖÀÇÁ¡....
1. ÀÌ °Á¸¦ Ÿ µ¿È£È¸¿¡ Çã¶ô ¾øÀÌ °ÔÁ¦ÇÏ´Â ÇàÀ§¸¦ ¹Ì¿öÇÒ °ÍÀÔ´Ï´Ù.
2. Á¦°¡ ÀÌÈÄ °Á¿¡ ¹Ý¸»À» ¾²°Ô µÉ°ÍÀÓÀ» ¹Ì¸® ¾Ë·Á µå¸®´Â ¹ÙÀÔ´Ï´Ù.
3. ´ÙÀÌ·ºÆ® X -> DX, Àú -> ÇÊÀÚ µîÀ¸·Î ȣĪ º¯È°¡ ÀÖÀ» °ÍÀÔ´Ï´Ù.
#####################################################
ÇÏÀÌÅÚ °ÔÀÓ Á¦ÀÛ µ¿È£È¸ ( GO GMA )
------------------------------------------------------------------------
###
DIRECT X Æ®·çÄ÷¯ °ÔÀÓ (1) - ´ÙÀÌ·ºÆ® X Æ®·çÄ÷¯
ÃʱâÈ
------------------------------------------------------------------------
ÀÛ¼ºÀÚ
: ¾È¿µ±â ( HiTEL ID : SMgal )
ÀÌÁ¦ DXÀÇ °¡Àå ±âÃÊ°¡ µÇ´Â 'DX ÃʱâÈ'¸¦ ½ÃÀÛÇÑ´Ù. ÇÁ·Ñ·Î±×¿¡¼ ¿¹°íÇÑ
¹Ù¿Í °°ÀÌ ¾ð¾î´Â
'µ¨ÆÄÀÌ 3' À̸ç ÀÌÇÏÀÇ ¹öÀü¿¡¼´Â Á¤È®ÇÑ ¼öÇàÀ» ¿¹»ó ÇÒ
¼ö°¡ ¾ø´Ù. ±×¸®°í MS ¿¡¼ Á¦°øµÈ DDRAW.PAS ¸¦ ÀÌ¿ëÇؼ
DDRAW.DLL À» ¿¬°á
ÇÒ °ÍÀ̸ç 'µ¨ÆÄÀÌ 2 ¾ð¸®½¬µå' ÀÇ ÀúÀÚ°¡ ¸¸µç DDUTILS.PAS ( DX¿¡¼ ºñÆ®¸Ê
°ú ÆÈ·¹Æ®¿¡
´ëÇÑ ÇÔ¼ö¸¦ ½±°Ô ¸¸µç À¯´Ö ) ¸¦ »ç¿ëÇÏ¸ç ¸ðµç °ÍÀ» ÁøÇàÇØ ³ª
°¥ °ÍÀÌ´Ù. ( ÀÌ ÆÄÀϵéÀº ÃßÈÄ¿¡ ÀÚ·á½Ç¿¡ µî·Ï ¿¹Á¤
)
±×¸®°í ¿©±â¿¡ ³ª¿À´Â ÃʱâÈ ÄÚµå´Â 'µ¨ÆÄÀÌ 2 ¾ð¸®½¬µå' ¶ó´Â Ã¥¿¡¼ ¹è¿î
°ÍÀÌ´Ï ¸¸Å »ó´çÈ÷ À¯»çÇÑ
Äڵ尡 ¸¹À¸¸ç ÇÔ¼ö¸íµµ ¿øÇüÀ» µû¸¥ °ÍÀÌ ¸¹´Ù´Â
°ÍÀ» ¹Ì¸® ¹àÇô µÎ´Â ¹ÙÀÌ´Ù. ÇÏÁö¸¸ ³ª¸ÓÁö DX ½ºÆå¿¡ °üÇÑ ÀÚ·á´Â ¸ðµÎ
DX
ÇïÇÁ¿¡ ¾ð±ÞµÈ ¿ø¼¸¦ ¹ø¿ªÇÏ¿© µ¶ÀÚÀûÀ¸·Î ±â¼úÇÏ¿© ¿©·¯ºÐ²² ¼³¸íÇÏ´Â °ÍÀÌ
´Ù. ±× ÀÌÀ¯´Â ±¹³» ¹ø¿ª¼¿¡¼ ´©¶ôµÇ°Å³ª ¿À¿ªÇÑ
ºÎºÐÀÌ ÀÖÀ»Áöµµ ¸ð¸¥´Ù´Â
ÇÊÀÚÀÇ ±â¿ì ¶§¹®À̱⵵ ÇÏ´Ù.
´Ù½Ã ÇÑ ¹ø ³ëÆĽɿ¡¼ ¸»¾¸ µå¸®´Â °ÍÀÌÁö¸¸ ÀÌ °Á´ DX ÁßÇϱÞÀÚ¸¦ À§ÇÑ
°ÍÀÌ¸é µ¨ÆÄÀÌ »ç¿ë¿¡ ¹«¸®°¡
¾ø´Â ÀÚ¸¦ ±âÁØÀ¸·Î ÇÑ´Ù. µû¶ó¼ µ¨ÆÄÀÌ ¹®¹ý
À̳ª »ç¿ë¹ýÀº ÀüÇô ¾ð±ÞÇÏÁö ¾ÊÀ» °ÍÀ̸ç DX ±âº» ÇÔ¼ö µîµµ °¡º±°Ô ¹«½ÃÇÏ
°í
³Ñ¾î°£´Ù..
------------------------------------------------------------------------
(1) »õ·Î¿î ÇÁ·ÎÁ§Æ®ÀÇ ½ÃÀÛ
¸ÕÀú New Application ¿¡¼ »õ·Î¿î ÇÁ·ÎÁ§Æ®¸¦ ½ÃÀÛÇÑ´Ù.
ÆûÀº ¸¶À½´ë·Î ±¸¼ºÇصµ ¹«¹æÇϳª ½ÇÁ¦ ÆûÀº DX »ó¿¡¼ ÀüÇô ³ªÅ¸³ªÁö ¾ÊÀ»
°ÍÀ̹ǷΠȸé Å©±â¸¦ ÁÙÀÎ
ä ±¸¼®¿¡ µÎ´Â °ÍÀÌ ÁÁÀ» °ÍÀÌ´Ù.
ÆûÀ» ¸¸µé°í ÇØÁÖ¾î¾ß ÇÏ´Â °ÍÀº ´Ü ÇÑ°¡ÁöÀÌ´Ù. ÆûÀÇ Name ¼Ó¼ºÀº 'Basic'
À¸·Î ¹Ù²Ù¾î¶ó.
ÀÌ°Ç ÇÊÀÚÀÇ ÄÚµå ½À°üÀÌ°ÚÁö¸¸ ¾ÕÀ¸·Î ¼³¸íµÉ ÆûÀÇ À̸§ÀÌ
¸ðµÎ Basic À̶õ À̸§ÀÇ °´Ã¼ ÀÏ °ÍÀ̱⠶§¹®ÀÌ´Ù.
Save Project As ¶ó´Â °÷¿¡¼ ÇÁ·ÎÁ§Æ®¸¦ ¼¼À̺êÇÑ´Ù. À̶§ÀÇ *.DPR
À̸§Àº
'DX24Bit1.Pas' ·Î ÇÏ°í À¯´ÖÀº 'MainUnt1'À¸·Î ÇØÁÖ±æ ¹Ù¶õ´Ù.
¾ÕÀ¸·ÎÀÇ °ÀÇ ¹öÀü¿¡ µû¶ó ¿¹Á¦ ¼Ò½º´Â
¹øÈ£°¡ Áõ°¡ÇÒ °ÍÀÌ´Ù.
±×·³ ¸¸µé¾îÁö´Â ¼Ò½º´Â ´ÙÀ½°ú °°À» °ÍÀÌ´Ù.
| program Dx24bit1;
|
| uses
|
Forms,
| MainUnt1 in 'MainUnt1.pas' {Basic};
|
| {$R
*.RES}
|
| begin
| Application.Initialize;
|
Application.CreateForm(TBasic, Basic);
| Application.Run;
|
end.
------------------------------------------------------------------------
(2) TBasic °´Ã¼ÀÇ Á¶¼º
ÀÌÁ¦´Â ¸ðµç °ÍÀÌ 'MainUnt1.Pas'¿¡¼ ÀÌ·ç¾îÁø´Ù.
interface ¾Æ·¡¿¡ ´ÙÀ½°ú °°Àº °ÍÀ» Ãß°¡ÇÏÀÚ.
| uses
| Windows, Messages, SysUtils,
Classes, Graphics, Controls, Forms,
| Dialogs, DDraw, DDUtils;
|
~~~~~~~~~~~~~~~ <- ¹ØÁÙ ±×Àº °Å Ãß°¡ Ç϶õ ¸»¾¸..
À§¿¡µµ ¼³¸íÇßÁö¸¸ DDraw ´Â DDRAW.DLL À» »ç¿ëÇϱâ À§ÇÑ °ÍÀÌ°í, DDUtils
´Â
ºñÆ®¸Ê°ú ÆÈ·¹Æ®¸¦ Á» ´õ ½±°Ô »ç¿ëÇÏ°íÀÚ ¸¸µé¾îÁø À¯´ÖÀ¸·Î ÇÊÀÚ°¡ ¸¸
µç °ÍÀÌ ¾Æ´Ï´Ù.
±× ¾Æ·¡¿£ ´ÙÀ½°ú °°Àº »ó¼ö¸¦ ¼±¾ðÇÏÀÚ.
| const
| MAX_IMAGE_SURFACE = 1;
// ÀÐ¾î µéÀÏ À̹ÌÁö Ç¥¸éÀÇ ¼ö
| BitmapName = 'Test'; // À̹ÌÁö°¡ ÀÖ´Â
ºñÆ®¸Ê À̸§
| MAX_X_LINE = 640; // ¸¸µé ȸéÀÇ °¡·Î Å©±â
|
MAX_Y_LINE = 480; // ¸¸µé ȸéÀÇ ¼¼·Î Å©±â
| BPP =
3; // Çȼ¿´ç ¹ÙÀÌÆ®.. 24 / 8 ÀÌ´Ù.
±×·¸´Ù¸é ¹Ù·Î ¾Æ·¡¿¡´Â
| type
| TBasic = class(TForm)
|
........
ÀÌ·± ±¸¹®ÀÌ ÀÖÀ» °ÍÀÌ´Ù.. ÀÌÁ¦´Â ÀÌ°ÍÀ» ¾Æ·¡¿Í °°ÀÌ Ã¤¿î´Ù.
| type
| TBasic = class(TForm)
|
|
private
| function GetBitmapName(i : integer) : string;
|
|
public
| FPixelFormat : (pfRGB, pfBGR);
|
|
DirectDraw : IDirectDraw2;
| PrimarySurface :
IDirectDrawSurface2;
| BackBuffer : IDirectDrawSurface2;
|
Image : array[1..MAX_IMAGE_SURFACE] of
|
IDirectDrawSurface2;
| end;
|
|
var
| Basic: TBasic;
|
| implementation
|
.....................
À§ÀÇ ³»¿ëÀ» ÇϳªÇϳª ¼³¸íÇÏÀÚ¸é...
1) function GetBitmapName(i : integer) :
string;
- ÀÌ°ÍÀº i ¶ó´Â ¼ýÀÚ¿¡ ´ëÇÑ BitmapNameÀÇ Á¤º¸¸¦
¸®ÅÏÇÑ
´Ù. ¸¸¾à i °¡ 1 À̶ó¸é 'Test1.Bmp'¸¦ ¸®ÅÏ ÇÒ
°ÍÀÌ´Ù.
ÀÌ°ÍÀº Ç×»ó EXE ½ÇÇà µð·ºÅ丮¸¦ ±âÁØÀ¸·Î ºñÆ®¸ÊÀ»
Áö
Á¤ÇÏ°Ô µÈ´Ù.
2) FPixelFormat - ÀÌ°ÍÀº 24bit Æ®·çÄ÷¯ÀÇ Çȼ¿ Æ÷¸Ë¿¡ ´ëÇÑ Á¤º¸¸¦
´ã´Â
private º¯¼öÀÌ´Ù. À̶§ °¡Áú ¼ö ÀÖ´Â °æ¿ìÀÇ °ªÀº
µÎ°¡
Áö·Î½á RGB Æ÷¸Ë°ú BGR Æ÷¸ËÀÌ ÀÖ´Ù. °¢°¢ÀÇ Æ÷¸ËÀº ±×
·¡ÇÈ
Ä«µå¿¡ ÀüÀûÀ¸·Î ±âÀÎÇÑ´Ù.
3) DirectDraw : IDirectDraw2;
- ÀÌ°ÍÀº
°¡Àå ÇÙ½ÉÀÌ µÇ´Â DirectDraw ÀÇ °´Ã¼ º¯¼öÀÌ´Ù.
4) PrimarySurface : IDirectDrawSurface2;
BackBuffer
: IDirectDrawSurface2;
- ÀÌ°ÍÀº ±âº» ¹öÆÛ¿Í ¹é ¹öÆÛ¿¡ ´ëÇÑ DirectDraw
Surface
°´Ã¼ÀÌ´Ù.
5) Image : array[1..MAX_IMAGE_SURFACE] of
IDirectDrawSurface2;
- ÀÌ°ÍÀº ½ºÇÁ¶óÀÌÆ®³ª À̹ÌÁö¸¦ ÂïÀ» ¶§ »ç¿ëµÇ´Â
ºñÆ®¸Ê
À» ÀúÀåÇØ ³õ´Â Ç¥¸é °ø°£À¸·Î, ºñµð¿À ¸Þ¸ð¸®°¡ ºÎÁ·ÇÒ
¶§´Â
ÀÚµ¿À¸·Î ¸Þ¸ð¸®ÀÇ ÇÑ ¿µ¿ªÀ¸·Î ¼³Á¤µÈ´Ù.
À§¿¡¼ ¿ì¸®°¡ ÇÔ¼ö Çϳª¸¦ ¼±¾ð¸¸ ÇØ ³õÀº ä·Î µÎ¾úÀ¸´Ï, ¸¶Àú ¸¸µé°í ³Ñ
¾î °¡´Â °ÍÀÌ µµ¸®ÀÏ °Í
°°´Ù.
| function TBasic.GetBitmapName(i : integer) :
string;
| begin
| GetBitmapName :=
ExtractFilePath(Application.ExeName)
| + BitmapName +
IntToStr(i) + '.BMP';
| end;
ÀÌ ÇÔ¼ö´Â implementation ¿µ¿ª¿¡ ¾Æ¹« °÷À̳ª µÎ¸é µÈ´Ù.
------------------------------------------------------------------------
(3) OnCreate À̺¥Æ® ¼³Á¤
ÀÌÁ¦ DX °´Ã¼ »ý¼ºÀ» À§ÇØ Äڵ带 ÀÛ¼º ÇÒ ¶§ÀÌ´Ù.
Object Inspector ÀÇ Events
ÅÇÀ» ´©¸¥ ÈÄ¿¡ OnCreate À̺¥Æ®¸¦ ´õºí Ŭ¸¯ÇÑ
´Ù. ±×·¯¸é ¾Æ·¡¿Í °°Àº Äڵ尡 ´ç¿¬È÷ ³ªÅ¸³´Ù.
| procedure TBasic.FormCreate(Sender:
TObject);
| begin
|
| end;
¹°·Ð ±× ¾ÈÀ» ä¿ì´Â °ÍÀº ¿ì¸®¿¡°Ô ³²°ÜÁø ¸·ÁßÇÑ »ç¸íÀÓÀ» »ó±âÇÏÀÚ.
| procedure TBasic.FormCreate(Sender:
TObject);
| begin
|
| if DirectDrawCreate2(nil,DirectDraw,nil)
<> DD_OK then
| Raise Exception.Create('DirectDraw °´Ã¼ »ý¼º
½ÇÆÐ');
|
| Color := clBlack;
| BorderStyle := bsNone;
|
Cursor := crNone;
|
| end;
¿ì¸®°¡ ÇØÁÙ °ÍÀº ÀÌ°ÍÀÌ ÀüºÎÀÌ´Ù.
DirectDrawCreate2 ÀÇ ¼¼ ¹ø° Àμö´Â Ç×»ó nil( = NULL)À̸ç ù ¹ø° Àμö
µµ
nil ·Î »ç¿ëÇÏ°Ô µÉ °ÍÀÌ´Ù.
¿ì¸®°¡ °í·ÁÇÒ °ÍÀº µÎ ¹ø° Àμö·Î½á IDirectDraw2 ·Î ¼±¾ðµÈ °´Ã¼°¡ ·¹ÆÛ
·±½º·Î ³Ñ¾î°¡°Ô
µÈ´Ù. C ¸¦ »ç¿ëÇϽŠºÐÀ̶ó¸é Æ÷ÀÎÅÍ·Î ³Ñ°ÜÁá´Ù´Â ±â¾ïÀÌ
³²¾Æ ÀÖÀ» °ÍÀÌ´Ù. ÇÏÁö¸¸ ÆĽºÄ®Àº C ¿Í´Â ´Þ¸® ´ëºÎºÐÀÇ Æ÷ÀÎÅ͸¦
·¹ÆÛ·±
½ºÇüÀ¸·Î ³Ñ°ÜÁֱ⠶§¹®¿¡ ¾ÕÀ¸·ÎÀÇ Àμö Àü´Þ¿¡µµ Æ÷ÀÎÅÍ´Â °ÅÀÇ »ç¿ëµÇÁö
¾ÊÀ» °ÍÀÌ´Ù.
DirectDrawCreate2 ´Â ¸®ÅÏ °ªÀ¸·Î HResult¸¦ °¡Áö´Âµ¥ DD_OK °¡ ¾Æ´Ï¸é
¾î
¶°ÇÑ ÀÌÀ¯¿¡¼µµ È£Ãâ ½ÇÆзΠ°£ÁÖÇÒ ¼ö ÀÖÀ¸¹Ç·Î ¿¹¿Ü¸¦ ÀÏÀ¸Å°µµ·Ï ÇØ ³õ
¾Ò´Ù. Terminate ¸¦ ½ÃÅ°Áö ¾Ê´Â ÀÌÀ¯´Â
ÇÁ·Î±×·¥ÀÇ ½Å·Ú¼ºÀ» À§ÇÑ °ÍÀÌ´Ù.
±×¸®°í ³ª¸ÓÁö 3ÁÙÀº ¸¸µé¾îÁú ÆûÀÇ »óŸ¦ ³ªÅ¸³»´Â °ÍÀ¸·Î °¢°¢ 'ÆûÀÇ »ö
»óÀ» °Ë°Ô', 'ÆûÀÇ
¿Ü°û¼±À» ¾ø°Ô', 'Æû À§¿¡ Ä¿¼ Á¦°Å' ¸¦ ³ªÅ¸³½´Ù. ¾îÂ¥
ÇÇ DX ¿¡¼ Ç® ȸéÀ» ¸¸µé¾î ¹ö¸®¸é »çÀÌÁî¿¡ ´ëÇÑ Á¤º¸´Â ¹«ÀǹÌÇϹǷÎ
¿©
±â¿¡ ³ÖÀ» ÇÊ¿ä°¡ ¾ø´Ù.
------------------------------------------------------------------------
(4) OnShow À̺¥Æ® ¼³Á¤
À̹øÀÇ À̺¥Æ®°¡ DX ÃʱâÈÀÇ °¡Àå Áß¿äÇÑ ºÎºÐÀÌ´Ù.
¿ª½Ã, Object Inspector ÀÇ
Events ÅÇÀ» ´©¸¥ ÈÄ¿¡ OnShow À̺¥Æ®¸¦ ´õºí Ŭ
¸¯ÇÑ´Ù. ±×·¯¸é ¾Æ·¡¿Í °°Àº Äڵ尡 ³ªÅ¸³´Ù.
| procedure TBasic.FormShow(Sender:
TObject);
| begin
|
| end;
¿©±â¼´Â º¯¼öÀÇ ¼±¾ðÀÌ ÇÊ¿äÇÏ´Ù. ´ÙÀ½°ú °°ÀÌ Àûµµ·Ï ÇÑ´Ù. ŸÀÔ¿¡ ´ëÇÑ
¼³¸íÀº ±× º¯¼ö°¡ »ç¿ëµÉ
¶§ °°ÀÌ ÇÏ°Ú´Ù.
| var
| i : integer;
|
DDSurfaceDesc : TDDSurfaceDesc;
| DDSCaps : TDDSCaps;
|
DDPixelFormat : TDDPixelFormat;
| ColorKey :
TDDColorKey;
´ÙÀ½Àº ³Ö¾î¾ß ÇÒ Äڵ带 ¼øÂ÷ÀûÀ¸·Î ³ª¿ÇÏ°í ¼³¸íÇÏ°Ú´Ù.
| if not
Assigned(DirectDraw) then exit;
¸¸¾à DirectDraw °´Ã¼°¡ »ý¼ºµÇ¾î ÀÖÁö ¾ÊÀ¸¸é ÇÔ¼ö¸¦ ³¡³½´Ù.
ÀÌ°ÍÀº ¸ðµç °æ¿ì¸¦ ´ëºñÇϱâ
À§ÇÑ ¹æ¹ýÀÌ´Ù.
| if
DirectDraw.SetCooperativeLevel(Handle,DDSCL_EXCLUSIVE or
|
DDSCL_FULLSCREEN or DDSCL_ALLOWREBOOT) <> DD_OK
then
| Raise Exception.Create('¹èŸÀû Ç® ½ºÅ©¸° ¾ò±â ½ÇÆÐ');
¹èŸÀû Ç® ½ºÅ©¸° ¸ðµå·Î ¼³Á¤ÇÑ´Ù.
ù ¹ø° ÀμöÀÎ Handle Àº Æû¿¡ ´ëÇÑ ÇÚµéÀ̸ç, µÎ ¹ø°
Àμö´Â ´ÙÀ½°ú °°Àº
°Íµé·Î or ¿¬»êÀ¸·Î °áÇÕÇÒ ¼ö ÀÖ´Ù.
DDSCL_ALLOWMODEX : ¸ðµå X ( 320*200 ¶Ç´Â 320*240 ) ¸¦
°¡´ÉÇÏ°Ô
ÇÑ´Ù. ¿ì¸®¿¡°Õ Ç÷£ ¸ðµå·Î ´õ Àß ¾Ë·ÁÁ®
ÀÖ´Ù.
DDSCL_ALLOWREBOOT : Ç® ½ºÅ©¸° ¸ðµå¿¡¼ Ctrl+Alt+Del ·Î
¸®ºÎÆÃÀÌ
°¡´ÉÇÏ°Ô ÇÑ´Ù.
DDSCL_EXCLUSIVE : ¹èŸÀû
½ºÅ©¸° ¸ðµå¸¦ ¿ä±¸ÇÑ´Ù.
DDSCL_FULLSCREEN : GDI ¸¦ ¿ÏÀü ¹«½ÃÇÏ´Â Ç® È¸é ¹èŸ ¸ðµå¸¦
Áö
½ÃÇÑ´Ù.
DDSCL_NORMAL : ÀϹÝÀûÀÎ À©µµ¿ì
¾ÖÇø®ÄÉÀ̼Çó·³ ½ÇÇàÇÑ´Ù.
DX â¸ðµå¿¡
»ç¿ëÇÑ´Ù.
DDSCL_NOWINDOWCHANGES : È°¼º »óÅ¿¡¼ DirectDraw °¡ ŽºÅ©
ÀüȯÀÌ
ºÒ°¡´ÉÇÏ°Ô Çϵµ·Ï Áö½ÃÇÑ´Ù.
** °áÇսà ÁÖÀÇ Á¡
1> DDSCL_EXCLUSIVE ¿Í DDSCL_NORMAL Àº °°ÀÌ »ç¿ëÇÒ ¼ö
¾ø´Ù.
2> DDSCL_EXCLUSIVE ´Â DDSCL_FULLSCREEN À» Ç×»ó ¼ö¹ÝÇÑ´Ù.
3>
DDSCL_ALLOWMODEX ´Â DDSCL_EXCLUSIVE ¿Í DDSCL_FULLSCREEN °ú ÇÔ²²
»ç¿ëµÈ´Ù. ¹°·Ð
DDSCL_NORMAL Àº »ç¿ëÇÒ ¼ö ¾ø´Ù.
À§¿¡¼ ¸¸µç CooperativeLevel Àº ¹èŸÀû Ç® ½ºÅ©¸°ÀÌ¸ç ¸®ºÎÆÃÀÌ °¡´ÉÇÏ°Ô
¼³Á¤µÇ¾ú´Ù.
½ÇÇà Áß Ctrl+Alt+Del ·Î ¸®ºÎÆÃÀÌ °¡´ÉÇÏ°Ô ÇÑ °ÍÀº ÇÊÀÚÀÇ °æ
Çè¿¡ µû¶ó DX ¿¡¼ ½Ç¼ö¸¦ ÇÏ¸é ´Ù¿îµÇ´Â ¼ö°¡ ¸¹°í GDI
ÀüȯÀÌ ¾ÈµÇ¾î ¸®¼Â
À» ´·¯¾ß ÇÏ´Â ¹ø°Å·Î¿òÀ» ¸¹ÀÌ °æÇèÇ߱⠶§¹®ÀÌ´Ù. ÇÏÁö¸¸ °ÔÀÓÀ» ¿Ï¼º ÇÏ
°í ³ª¼´Â ¸®ºÎÆÃÀÌ ¾ÈµÇ°Ô ÇØ ³õ´Â
°Ô Temp Data º¸¾ÈÀ» À§ÇØ ÁÁÀ» °ÍÀÌ´Ù.
| if
DirectDraw.SetDisplayMode(MAX_X_LINE,MAX_Y_LINE,24,0,0)
|
<> DD_OK
then
| Raise Exception.Create('640 x 480 x 24bit ¸ðµå ½ÇÆÐ');
ÀÌ°ÍÀÌ ¹Ù·Î Æ®·çÄ÷¯·Î ¸¸µå´Â ¸í·ÉÀÌ´Ù. ù ¹ø°¿Í µÎ ¹ø°´Â °¢°¢ X¿Í Y
ÀÇ ±æÀ̸¦ ¾Ë·ÁÁÖ´Â
°ÍÀ¸·Î ÇöÀç´Â 640 * 480 ÀÌ´Ù. ¼¼ ¹ø° Àμö´Â Bit Per
Pixel ·Î 24ÀÌ´Ù.
( 24bit Ä÷¯À̹ǷÎ. ±×¸®°í
´ç¿¬È÷ 256Ä÷¯ ÀÏ ¶§´Â 8 ÀÌ´Ù. )
³× ¹ø° Àμö´Â Refresh Rate ·Î 0 ÀÌ µé¾î°¡¸é ÀÌ ¸Þ¼ÒµåÀÇ IDirectDraw
ÀÎ
ÅÍÆäÀ̽º ¹öÀüÀÌ »ç¿ëµÇ°Ô µÈ´Ù. ±×¸®°í ´Ù¼¸ ¹ø° Àμö´Â Ç×»ó 0 ÀÌ´Ù.
|
FillChar(DDSurfaceDesc,SizeOf(DDSurfaceDesc),0);
| with DDSurfaceDesc
do begin
| dwSize := SizeOf(DDSurfaceDesc);
|
dwFlags := DDSD_CAPS or DDSD_BACKBUFFERCOUNT;
|
ddSCaps.dwCaps := DDSCAPS_COMPLEX or DDSCAPS_FLIP or
|
DDSCAPS_PRIMARYSURFACE;
|
dwBackBufferCount := 1;
| end;
|
| if
DirectDraw.CreateSurface(DDSurfaceDesc,PrimarySurface,nil)
|
<> DD_OK
then
| Raise Exception.Create('º¹ÇÕ È»ó °ø°£ »ý¼º ½ÇÆÐ');
ÀÌÁ¦´Â Ç¥¸éÀ» »ý¼ºÇÏ´Â ÀÏÀÌ´Ù.
TDDSurfaceDesc ¿¡ ´ëÇÑ Å¸ÀÔ ±¸Á¶´Â ³»¿ëÀÌ ¸¹Àºµ¥´Ù°¡
°ÅÀÇ ¸ðµç DX ¼Àû
¿¡¼ ¾ð±ÞÇÏ°í ÀÖÀ¸¹Ç·Î ¿©±â¼´Â »ý·«ÇÏ°í ÇÊ¿äÇÑ ºÎºÐ¸¸ ¤°í ³Ñ¾î °¡µµ·Ï
ÇÑ´Ù.
¿ì¼± FillChar ·Î DDSurfaceDesc ¸¦ 0 À¸·Î ¸¸µç´Ù. ÀÌ·¸°Ô ÇÑ ÁÖµÈ ÀÌÀ¯´Â
Ȥ½Ã
¶óµµ ¸ð¸¦ µ¹¹ß »çŸ¦ ¹Ì¿¬¿¡ ¹æÁöÇϱâ À§ÇÑ °ÍÀÌ´Ù. ¿©±â¿¡¼ dwSize
¶ó°í µÈ ·¹Äڵ带 ÁÖÀÇÇØ¾ß ÇÑ´Ù. ¿©±â´Â Ç×»ó ±× ŸÀÔÀÇ
Å©±â°¡ µé¾î°¡¾ß
Çϴµ¥, º¸Åë Àؾî¹ö¸®°í »ý·«ÇÏ´Â ¼ö°¡ ¸¹´Ù. ±×·¸°Ô µÇ¸é Á¤¸» ¾Ë ¼ö ¾ø´Â
¹ö±×¸¦ Å°¿ì´Â ¼ÀÀÌ µÇ°Å³ª ÀüÇô
ÀÌ»óÀÌ ¾ø¾î º¸ÀÌÁö¸¸ ´Ù¿îÀÌ µÇ´Â ºÒÇàÇÑ
»çŸ¦ ÃÊ·¡ÇÏ°Ô µÈ´Ù.
´ÙÀ½ÀÇ dwFlag µµ Âü Àç¹ÌÀÖ´Â ¿ëµµÀÌ´Ù. TDDSurfaceDesc ÀÇ ·¹ÄÚµå Áß¿¡¼
ÇöÀç
À¯È¿ÇÑ °ªÀ» °¡Áö´Â ·¹Äڵ常 ÁöÁ¤ÇØ ÁÖ´Â °ÍÀÌ´Ù. ÇÊÀÚ°¡ À©µµ¿ì ÇÁ·Î
±×·¡¹ÖÀ» ÀÔ¹®ÇÏ¸é¼ Àç¹ÌÀÖ°Ô ´À²¼´ø °Ô ¹Ù·Î ¾Õ¿¡ ³ª¿Â ·¹ÄÚµåÀÇ
size ǥ
±â¿Í flag Ç¥±â¿´´Ù. ±ÍÂú±âµµ ÇÏÁö¸¸ ¾î¶»°Ô º¸¸é ¹Ì·¡¸¦ À§ÇØ À¶Å뼺À» Ãæ
ºÐÈ÷ °í·ÁÇÑ ¹ß»óÀ̾ú±â ¶§¹®ÀÌ´Ù.
ÀÚ, DDSD_CAPS or DDSD_BACKBUFFERCOUNT
¸¦ ÁöÁ¤ÇÑ ÈÄ¿¡ ¾Æ·¡ µÎ ÁÙ¿¡´Â ddSCaps ¿Í
dwBackBufferCount ¸¸ÀÌ °ªÀÌ ÇÒ
´çµÇÁö ¾Ê¾Ò´Â°¡ !
ddSCaps.dwCaps ´Â Ç¥¸é »ý¼º¿¡ ´ëÇÑ Á¤º¸¸¦ ³Ö¾î ÁØ´Ù.
DDSCAPS_COMPLEX : 'º¹ÇÕ Ç¥¸é'À» ¸¸µç´Ù. º¹ÇÕ Ç¥¸éÀº Çϳª
ÀÌ
»óÀÇ ÈĸéÀ» °¡Áö°í ÀÖÀ¸¸ç ºÎ°¡ÀûÀÎ ÈĸéµéÀº
Primary ¿Í ¿¬°áµÇ¾î
ÀÖ´Ù. ¶§¹®¿¡ Primary ¸¦
Á¦°ÅÇϸé Á¾¼ÓµÈ Èĸéµéµµ °°ÀÌ
Á¦°ÅµÈ´Ù.
DDSCAPS_FLIP : Çø®ÇÎ ±¸Á¶¸¦ °¡Áö´Â Ç¥¸éÀ»
¸¸µç´Ù,
DDSCAPS_PRIMARYSURFACE : À¯Àú¿¡°Ô Á÷Á¢ º¸À̴ ǥ¸é( Primary ) À»
¸¸
¸¸µé°Ô Áö½ÃÇÑ´Ù.
dwBackBufferCount ´Â ÈÄ¸é ¹öÆÛÀÇ °³¼ö¸¦ ³Ö´Â´Ù. ÇöÀç´Â 1 °³·Î ¼³Á¤Çß´Ù.
¸¸¾à 2
·Î ¼³Á¤Çß´Ù¸é Æ®¸®Çà ¹öÆÛ¸µÀ» ÇÏ°Ô µÈ´Ù. ( Æ®¸®Çà ¹öÆÛ¸µ¿¡ ´ëÇØ
¼´Â Help ¸¦ Âü°íÇϱ⠹ٶõ´Ù. )
ÀÌ·¸°Ô Á¤ÀÇÇÑ DDSurfaceDesc ·Î Ç¥¸éÀ» »ý¼ºÇÏ´Â ¹æ¹ýÀº ´ÙÀ½°ú °°´Ù.
¾Æ·¡¿Í °°ÀÌ Çϸé
PrimarySurface ¶ó´Â º¯¼ö°¡ º¹ÇÕ Ç¥¸éÀ» °¡¸®Å°°Ô µÈ´Ù.
DirectDraw.CreateSurface(DDSurfaceDesc,PrimarySurface,nil)
Àμö ¼³¸íÀº ÇÊ¿ä ¾øÀ» Á¤µµ·Î °£´ÜÇÏ´Ù. ´Ü 3¹ø° Àμö°¡ nil ÀÌ ¾Æ´Ï¶ó¸é
ÇöÀçÀÇ DX ¹öÀü¿¡´Â
¿¡·¯¸¦ ¹ß»ý½ÃŲ´Ù.
| DDSCaps.dwCaps :=
DDSCAPS_BACKBUFFER;
| if
PrimarySurface.GetAttachedSurface(DDSCaps,BackBuffer)
|
<> DD_OK then
|
Raise Exception.Create('ÈÄ¸é ¹öÆÛ »ý¼º ½ÇÆÐ');
À§ÀÇ °Íµµ ÀÌÀü °Í°ú ¸¶Âù°¡ÁöÀÇ ¹æ¹ýÀÌ´Ù. DDSCaps.dwCaps ¿¡¼ ÈĸéÀ» Áö
½ÃÇÏ´Â
DDSCAPS_BACKBUFFER °¡ ´ëÀÔµÈ °Í ¸»°í´Â º°¹Ý ´Ù¸¦ °Ô ¾ø´Ù. ÇÏÁö¸¸
ÇÔ¼ö¿¡ À־ Ŀ´Ù¶õ º¯È°¡ ÀÖ´Ù. ±×°ÍÀº ¹Ù·Î
PrimarySurface °´Ã¼°¡
º¹ÇÕ Ç¥¸éÀ¸·Î ÃʱâÈ µÇ¾ú±â ¶§¹®¿¡ IDirectDrawSurface2 ¿¡ Á¤ÀÇµÈ ¸Þ¼Òµå
¸¦
»ç¿ëÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. ±× ¸Þ¼ÒµåÀÇ Ã¹Â° ÁÖÀÚ°¡ GetAttachedSurface
¶ó´Â ¹Ù·ÎÀ§ÀÇ ÇÔ¼öÀÌ´Ù. ÀÌ°ÍÀº DDSCaps
¿¡ ¸í½ÃµÈ Ç¥¸éÀ» ¾ò´Â ÇÔ¼ö·Î½á
ÇöÀç´Â ÈÄ¸é ¹öÆÛ°¡ ±× ´ë»óÀ¸·Î ÁöÁ¤µÇ¾ú±â ¶§¹®¿¡ BackBuffer ¿¡´Â Èĸé
¹öÆÛ·Î ÃʱâÈ
µÇ°Ô µÇ´Â °ÍÀÌ´Ù.
»ç½Ç ¿©±â±îÁö¸é DX ÃʱâÈ¿Í Cooperative LevelÀ» ¾ò°í ¸ðµå ¹Ù²Ù±â, ±×¸®
°í 2°³ÀÇ
Çø®ÇÎ °¡´ÉÇÑ º¹ÇÕ È»ó Ç¥¸éÀ» ¸¸µé±â´Â ³¡ÀÌ ³ ¼ÀÀÌ´Ù. À̾îÁö
´Â ³ª¸ÓÁö ÃʱâÈ´Â ¸ðµÎ ºÎ¼öÀûÀÎ °ÍµéÀÌ´Ù.
|
FillChar(DDPixelFormat,sizeof(DDPixelFormat),0);
|
DDPixelFormat.dwSize := sizeof(DDPixelFormat);
| if
PrimarySurface.GetPixelFormat(DDPixelFormat) <> DD_OK then
|
Raise Exception.Create('Çȼ¿ Æ÷¸Ë Àб⠽ÇÆÐ');
|
| if
DDPixelFormat.dwRBitMask = $00FF0000 then
| FPixelFormat := pfRGB
|
else if DDPixelFormat.dwRBitMask = $000000FF then
| FPixelFormat
:= pfBGR
| else
| Raise Exception.Create('Çȼ¿ Æ÷¸Ë Æǵ¶
½ÇÆÐ');
ÀÌ ºÎºÐÀº »ý¼ºÇÑ 24bit Æ®·çÄ÷¯¿¡ ´ëÇÑ Çȼ¿ Æ÷¸ËÀ» ÆǺ°ÇÏ´Â ºÎºÐÀÌ´Ù.
Áß¿äÇÑ ºÎºÐÀÌÁö¸¸ ÀÇ¿Ü·Î
Àß ¸ð¸£´Â »ç¶÷µµ ¸¹Àº °Í °°¾Æ¼ ¾à°£ÀÇ ¼³¸íÀ»
ºÎ°¡½ÃÅ°°Ú´Ù.
24bit Æ®·çÄ÷¯¿¡¼´Â ±×·¡ÇÈ Ä«µå¿¡ ±âÀÎÇÏ´Â 2°³ÀÇ Çȼ¿ ¸ðµå°¡ ÀÖ´Ù.
°¢°¢ RGB ¿Í BGR ·Î
´ëÇ¥µÇ´Â °ÍÀ¸·Î ´ÙÀ½°ú °°Àº ±¸Á¶¸¦ °¡Áø´Ù.
< RGB ±¸Á¶ > < BGR ±¸Á¶ >
Red 00FF0000h Red
000000FFh
Green 0000FF00h Green
0000FF00h
Blue 000000FFh Blue 00FF0000h
( 24bit Æ®·çÄ÷¯´Â, 16bit ÇÏÀÌÄ÷¯³ª 32bit Æ®·çÄ÷¯¿Í´Â ´Þ¸® ¾ËÆÄ Çȼ¿
À»
°¡ÁöÁö ¾Ê´Â´Ù. µû¶ó¼ Texture Map Format À̳ª Off-Screen Surface
Format ¸ðµÎ ÀÌ µÎ °¡Áö¹Û¿¡
¾ø´Ù. )
À̰͵éÀ» ¾Ë¾Æ³»¼ µµ´ëü ¾îµð¿¡ ½á¸Ô´À³Ä°í Àǹ®À» °¡Áö½Ç ºÐÀÌ °è½ÇÁö
¸ð¸£°ÚÁö¸¸, À̰͵éÀº
DirectDrawSurface ÀÇ ³»ºÎ ¸Þ¼Òµå¿¡¼´Â ¾Æ¹« »ó°ü¾ø
ÀÌ ÀÛµ¿µÇ´õ¶óµµ Lock À» ÇÏ¿© »ç¿ëÀÚ°¡ Á÷Á¢ ¸Þ¸ð¸®¸¦ Á¦¾îÇؾß
ÇÏ´Â °æ¿ì
¿¡´Â ¿ÏÀüÈ÷ ´Ù¸¥ °á°ú°¡ ³ª¿Í ¹ö¸± ¼ö Àֱ⠶§¹®¿¡ ²À ¾Ë¾Æ¾ß ÇÑ´Ù.
À§ÀÇ ÇÔ¼ö´Â ÀÌÇØÇϱ⠽¬¿ï Å×´Ï ±×³É ³Ñ¾î°¡µµ·Ï ÇÑ´Ù.
| for i := 1 to
MAX_IMAGE_SURFACE do begin
| Image[i] :=
DDLoadBitmap(DirectDraw,GetBitmapName(i),0,0);
| end;
½ºÇÁ¶óÀÌÆ®·Î »ç¿ëÇÒ ¿¹Á¦ ºñÆ®¸ÊÀ» ·ÎµåÇÑ´Ù. À§¿¡ »ç¿ëµÈ ºñÆ®¸Ê ÇÔ¼ö´Â
DDUtils.Pas ¿¡
Á¤ÀÇ µÈ °ÍÀ¸·Î »ó´çÈ÷ À¯¿ëÇÑ ÇÔ¼ö¶ó°í »ý°¢µÈ´Ù. ¿Ö³Ä¸é
'¸®¼Ò½º -> ½ÇÇà µð·ºÅ丮 -> °¡´ÉÇÑ ¸ðµç Æнº' ¼øÀ¸·Î
ºñÆ®¸ÊÀ» ã¾Æ °¡¹Ç
·Î, °ÔÀÓ ¿Ï¼º ´Ü°è¿¡ ºñÆ®¸ÊÀ» ¸®¼Ò½º ´Ü°è¿¡¼ ½ÇÇà ÆÄÀÏ¿¡ ³Ö´õ¶óµµ ÀüÇô
¼Ò½ºÀÇ ¼öÁ¤ÀÌ ÇÊ¿äÄ¡
¾Ê´Ù.
À̹ø ¿¹Á¦¿¡¼´Â 'Test1.Bmp' Çϳª¸¸ »ç¿ëµÉ °ÍÀÌ´Ù.
| for i := 1 to
MAX_IMAGE_SURFACE do begin
| ColorKey.dwColorSpaceLowValue := 0;
|
ColorKey.dwColorSpaceHighValue := 0;
| if
Image[i].SetColorKey(DDCKEY_SRCBLT,ColorKey) <> DD_OK then
|
Raise Exception.Create('Åõ¸í»ö ÁöÁ¤ ½ÇÆÐ');
| end;
ÀÌ°ÍÀº µµ½º ¶§ ½ºÇÁ¶óÀÌÆ®¿¡´Â º¼ ¼ö ¾ø´ø ±â´ÉÀÎ Åõ¸í»ö Á¤ÀÇ ±â´ÉÀÌ´Ù.
¿©±â¼ Á¤ÀÇµÈ Åõ¸í»ö(
¿µ¾î·Î´Â Color Key ) Àº »ç¿ëÀÚ°¡ ¿øÇϸé ÀÏ¹Ý Ãâ·Â
¿¡¼ ¹Ù·Î Áö¿øÇØ ¹ö¸°´Ù. dwColorSpaceLowValue ¿Í
dwColorSpaceHighValue
´Â Åõ¸í»öÀ¸·Î ÁöÁ¤ÇÒ ´Ü°èÀÇ ÃÖ¼Ò °ª°ú ÃÖ´ë °ªÀ» ÁöÁ¤ÇÏ´Â DWORDÀÇ ·¹ÄÚµå
ÀÌ´Ù.
ÇÊÀÚÀÇ °æÇèÀ¸·Î´Â 0 ¹øÀ̳ª 00FFFFFFh ÀÇ ÇÑ ´Ü°è¸¸À» µÎ´Â °ÍÀÌ °¡
Àå ÆíÇÏ´Ù°í »ý°¢µÈ´Ù. ¹°·Ð Ãâ·ÂµÉ °ËÀº »öÀº
00000001 Á¤µµ·Î ÇØ µÎ´Â °Ô
ÁÁÁö ¾ÊÀ»±î »ý°¢ÇÑ´Ù. ( ÀÌÇØ°¡ ¾ÈµÇ¸é Á÷Á¢ ½ÇÇè Çغ¸¶ó... )
À§¿¡¼´Â °¢°¢ÀÇ ºñÆ®¸ÊÀ» ÀúÀåÇÑ À̹ÌÁö ¹öÆÛ¿¡´Ù°¡ DDCKEY_SRCBLT ¸¦ Áö
Á¤Çߴµ¥ ÀÌ°ÍÀº,
Åõ¸í»öÀÌ Á¤ÀÇ µÈ blit ¿¬»êÀÌ ½ÇÇàµÉ ¶§ À̹ÌÁö ¼Ò½ºÀÇ
Åõ¸í»öÀ» Àû¿ëÇÏ¿© ½ºÇÁ¶óÀÌÆ®¸¦ Âï°Ô µÈ´Ù. ´Ù½Ã ¸»ÇÏ¸é ½ºÇÁ¶óÀÌÆ®¸¦
ÂïÀ»
¶§ ÂïÀ» ±×¸²¿¡ Åõ¸í»öÀ» Àû¿ëÇÏ¿© ½ºÇÁ¶óÀÌÆ®¸¦ Ç¥½ÃÇÏ°Ô µÇ´Âµ¥ ÀÌ ¹æ¹ýÀº
µµ½º ¶§ÀÇ ½ºÇÁ¶óÀÌÆ® Âï±â¿Í µ¿ÀÏÇÏ´Ù°í »ý°¢Çϸé
ÀÌÇØ°¡ ºü¸¦ °ÍÀÌ´Ù.
------------------------------------------------------------------------
(5) OnDestroy À̺¥Æ® ¼³Á¤
¸¶Áö¸· À̺¥Æ®ÀÎ OnDestroy ¸¦ ´õºíŬ¸¯ÇÑ´Ù. ±×¸®°í ¸¶Âù°¡Áö·Î ´ÙÀ½°ú °°
Àº Äڵ带
ÀÛ¼ºÇÑ´Ù.
| procedure TBasic.FormDestroy(Sender:
TObject);
| var
| i : integer;
| begin
|
| if
Assigned(PrimarySurface) then PrimarySurface.Release;
|
// º¹ÇÕ È»ó Ç¥¸éÀ» Á¦°ÅÇÑ´Ù.
|
| for i := 1 to
MAX_IMAGE_SURFACE do begin
| if Assigned(Image[i]) then
Image[i].Release;
| end; // ºñÆ®¸Ê À̹ÌÁö Ç¥¸éÀ»
Á¦°ÅÇÑ´Ù.
|
| if Assigned(DirectDraw) then DirectDraw.Release;
|
DirectDraw := nil; // ¸¶Áö¸·À¸·Î DX °´Ã¼¸¦ Á¦°ÅÇÑ´Ù.
|
| end;
º°´Ù¸¥ ¼³¸íÀÌ ÇÊ¿ä ¾øÀ» ¸¸Å »·ÇÑ ÁøÇàÀÌ´Ù.
------------------------------------------------------------------------
ÀÌ·¸°Ô DX ÀÇ Æ®·çÄ÷¯ ÃʱâÈ°¡ ³¡³µ´Ù.
ÀÌ°ÍÀ» ½ÇÇà ½ÃÄÑ º¸¸é °ú¿¬ ¾î¶² °á°ú°¡ ³ª¿Ã±î.. ³î¶óÁö
¸¶½Ã¶ó..
¾Æ¹«°Íµµ ¾ø´Â ±ô±ôÇÑ È¸éÀÌ ´ç½ÅÀ» ±â»Ú°Ô ¸Â¾Æ ÁÙ °ÍÀÌ´Ù. ±× »ç½Ç¿¡ ³Ê¹«
½½ÆÛÇϰųª ³ë¿©¿ö ¸»¶ó. ´Ù¸¥ ¹Ì½º
ŸÀÌÇÎÀ¸·Î ¿¡·¯°¡ ³ª¼ ´Ù¿îÀÌ ¾ÈµÈ °Í
¸¸À¸·Îµµ »î¿¡ ´ëÇÑ °¡Ä¡¸¦ ÃæºÐÈ÷ ¸¸³£ÇÒ ¼ö ÀÖÀ» Å״ϱî. Á¾·á´Â
Alt+F4..
´ÙÀ½Àº ÃʱâÈ¿¡ µû¸¥ ¿¹¿Ü, ¿¡·¯, ±âŸ À̺¥Æ® ¿¡ ´ëÇÑ °ÍÀ» ´Ù·ç°Ú´Ù.
#####################################################
ÇÏÀÌÅÚ °ÔÀÓ Á¦ÀÛ µ¿È£È¸ ( GO GMA )
------------------------------------------------------------------------
###
DIRECT X Æ®·çÄ÷¯ °ÔÀÓ (2) - ´ÙÀÌ·ºÆ® X ¿¡ ´ëÇÑ Çڵ鷯
¼³Ä¡
------------------------------------------------------------------------
ÀÛ¼ºÀÚ
: ¾È¿µ±â ( HiTEL ID : SMgal )
DX ¿¡ ´ëÇÑ ±âº»ÀûÀÎ ÃʱâÈ´Â ÀÌ¹Ì ³¡³µ´Ù. ÇÏÁö¸¸ ÇϳªÀÇ °ÔÀÓÀ» ¸¸µé±â¿¡
´Â ÅξøÀÌ ºÎÁ·ÇÑ
°ÍÀÌ »ç½ÇÀÌ´Ù. ±×·¡¼ À̹ø¿¡ ´Ù·ê °ÍÀº DX ÀÇ ¿¹¿Ü ÇÚµé
·¯¿Í Çø®Çο¡ µû¸¥ À̺¥Æ® Çڵ鷯ÀÌ´Ù.
------------------------------------------------------------------------
(1) µÎ¹ø° ÇÁ·ÎÁ§Æ®ÀÇ ½ÃÀÛ
¸ÕÀú ÀÌÀü¿¡ Á¦ÀÛÇÑ DX24Bit1.Dpr À» ÀÐ¾î µéÀδÙ. Save Project As ¸¦
¼±
ÅÃÇÏ¿© ÀúÀå½Ã¿¡ À̸§À» DX24Bit2.Dpr ·Î ¹Ù²Û´Ù. Save As ·Î MainUnt1.Pas
µµ
MainUnt2.Pas ·Î ¹Ù²Û´Ù. ÀÌ ÀýÂ÷´Â °ÁÂÀÇ ¹öÀüÀÌ Çϳª ´õ ¿Ã¶ó°¬À½À»
¸»ÇØÁÖ´Â °ÍÀÌ´Ù.
------------------------------------------------------------------------
(2) TBasic Ŭ·¡½º¿¡¼ Ãß°¡ÇÒ Çʵå¿Í ¸Þ¼Òµå
C ¸¦ ÇϽô ºÐÀ̶ó¸é 'Çʵå¿Í ¸Þ¼Òµå'¶ó´Â ¸»º¸´Ù´Â '¸â¹ö¿Í ¸â¹ö ÇÔ¼ö'¶ó
´Â ¸»¿¡ ´õ Àͼ÷ÇÒ·±Áö´Â
¸ð¸£°ÚÁö¸¸ µ¨ÆÄÀÌ´Â ¾ö¿¬È÷ ÆĽºÄ®ÀÇ °´Ã¼ ÁöÇâÀ»
µû¸£¹Ç·Î ¿ë¾îµµ ÆĽºÄ®¿¡¼ ÆÄ»ýµÈ °ÍÀ¸·Î °ñ¶ú´Ù.
´ç½ÅÀÌ Ãß°¡ ÀÔ·ÂÇØ¾ß ÇÒ »õ·Î¿î Çʵå¿Í ¸Þ¼Òµå´Â ¾Æ·¡¿Í °°´Ù.
| type
| TBasic = class(TForm)
|
|
procedure FormMinimize(Sender: TObject);
| procedure
FormOnRestore(Sender: TObject);
| procedure FormKeyDown(Sender:
TObject; var Key: Word;
| Shift: TShiftState);
|
|
private
| FPreviousFlipping : boolean;
|
FFlippingEnabled : boolean;
|
| procedure
ExceptionHandler(Sender : TObject; Error : Exception);
| procedure
HandleMessage(var Msg : TMsg; var Handled : boolean);
| procedure
IdleHandler(Sender : TObject; var Done : boolean);
| procedure
SetFlippingEnabled(Value : boolean);
|
| public
|
|
procedure UpdateDisplay(is_commandable : boolean);
| property
FlippingEnabled : boolean read FFlippingEnabled
|
write SetFlippingEnabled;
|
end;
»õ·Î Ãß°¡µÈ ºÎºÐÀº ¿¹¿Ü Çڵ鷯¿Í Çø®Çο¡ ´ëÇÑ À̺¥Æ® Çڵ鷯·Î ±¸¼ºµÇ
¾î
ÀÖ´Ù.
À̹ø¿¡µµ °¢°¢ÀÇ ÇÔ¼öÀÇ ¼Ò½º¸¦ Ãß°¡ ½ÃÅ°´Â ÇüÅ·Π¼³¸íÀ» ÇÏ°Ú´Ù.
------------------------------------------------------------------------
(3) Çø®Çο¡ °üÇÑ ÇÔ¼ö¿Í ÇÁ·ÎÆÛƼ
´ÙÀ½À¸·Î ´Ù·ê °ÍÀº Çø®ÇÎ °ü·Ã ÇÔ¼öµéÀÌ´Ù.
| property FlippingEnabled : boolean read
FFlippingEnabled
| write
SetFlippingEnabled;
À§¿Í °°ÀÌ FlippingEnabled ´Â ÀÐÀ» ¶§´Â FFlippingEnabled ¿¡¼ ¹Ù·Î
Àаí
, ¾µ ¶§´Â SetFlippingEnabled ÇÔ¼ö¸¦ È£ÃâÇÏ´Â property ·Î ¼±¾ðµÇ¾ú´Ù.
±×·³, ¹®Á¦ÀÇ SetFlippingEnabled ¸¦ º¸µµ·Ï ÇÏÀÚ.
| procedure TBasic.SetFlippingEnabled(Value :
boolean);
| begin
| if Value <> FFlippingEnabled then
begin
| FFlippingEnabled := Value;
| if FFlippingEnabled
then begin
| Application.OnMessage := HandleMessage;
|
Application.OnIdle := IdleHandler;
| end else begin
|
Application.OnMessage := nil;
| Application.OnIdle :=
nil;
| end;
| end;
| end;
Value °¡ ÇöÀçÀÇ °Í°ú ´Ù¸¦ ¶§´Â º¯È¸¦ Áִµ¥, ±× ´ë»óÀº OnMessage À̺¥
Æ®¿Í
OnIdle À̺¥Æ®ÀÌ´Ù. ÀÌ°ÍÀº ÇÁ·Î±×·¥ÀÌ ´ë±âÇÏ´Â µ¿¾È¿¡ ¹ß»ýÇϱâ ɧ§¢¹®
¿¡ ÃÖÀûÀÇ Çø®ÇÎ ¼Óµµ¸¦ ³»±â À§Çؼ´Â ²À ÇÊ¿äÇÑ ¿ä¼ÒÀÌ´Ù.
Timer À̺¥Æ®
µµ ÀÖÁö ¾Ê´À³Ä ÇϽðÚÁö¸¸ ÀÌ°ÍÀÌ ´õ È¿À²ÀûÀ̶ó°í ÇÊÀÚ´Â »ý°¢ÇÑ´Ù.
Value °¡ TRUE ÀÏ ¶§´Â µÎ °¡ÁöÀÇ À̺¥Æ®°¡ ¸ðµÎ ÁöÁ¤µÇ¾î ÇÁ·Î±×·¥Àº ¹Ù»Ú
°Ô Çø®ÇÎÀ»
ÇØ´îÅ×°í, FALSE ·Î ÁöÁ¤µÇ¾î ÀÖ´Ù¸é µÎ °¡Áö À̺¥Æ®´Â ´õ ÀÌ»ó
µ¿ÀÛÀ» ÇÏÁö ¾Êµµ·Ï ÇÑ´Ù. ÀÌ°ÍÀº GDI ȸéÀÌ ÇÊ¿äÇÑ ¿¹¿Ü
¸Þ¼¼Áöµî¿¡¼ ¿ä
±äÇÏ°Ô »ç¿ëµÇ¸ç Çø®ÇÎ ¶§¹®¿¡ ¸Þ¼¼Áö°¡ ±Ý¹æ °¡·ÁÁ® ¹ö¸®´Â »óȲÀ» ¹æÁöÇÒ
¼ö ÀÖ´Ù.
À§¿¡ ÁöÁ¤ÇÑ OnMessage ¿Í OnIdle ¿¡ ´ëÇÑ ¼Ò½º´Â ´ÙÀ½°ú °°´Ù.
| procedure TBasic.HandleMessage(var Msg : TMsg;
var Handled : boolean);
| begin
| UpdateDisplay(TRUE);
|
end;
|
| procedure TBasic.IdleHandler(Sender : TObject; var Done :
boolean);
| begin
| UpdateDisplay(TRUE);
| Done := FALSE;
|
end;
|
| procedure TBasic.UpdateDisplay(is_commandable : boolean);
|
begin
| PrimarySurface.Flip(nil,DDFLIP_WAIT);
| end;
TBasic.IdleHandler ¿¡¼ ´« ¿©°Ü º¼ °ÍÀº Done À̶ó´Â ·¹ÆÛ·±½º º¯¼ö¸¦ Áö
Á¤ÇÑ
°ÍÀÌ´Ù. ¿©±â¼´Â FALSE ·Î Çߴµ¥, ÀÌ°ÍÀº VCL ÀÌ À©µµ¿ì ¸Þ¼¼Áö¸¦ ±â
´Ù¸®´Â °ÍÀ» ¸·´Â´Ù°í ÇÑ´Ù.
ÀÌ µÎ ÇÔ¼ö´Â ¸ðµÎ °øÅëÀûÀ¸·Î UpdateDisplay ¶ó´Â È¸é °»½Å ÇÔ¼ö¸¦ ºÎ¸£
µµ·Ï µÇ¾îÀÖ´Ù.
UpdateDisplay ´Â º¸´Ù½ÃÇÇ DirectDrawSurface ÀÇ Flip ÇÔ¼ö
¸¦ ºÎ¸£°í ÀÖ´Ù. Flip ÇÔ¼ö¾ß ¸»·Î °¡Àå
ÇÙ½ÉÀûÀÎ ÇÔ¼ö Áß Çϳª·Î½á µÎ°³ÀÇ
ȸéÀ» ÀüȯÇÏ´Â ¿ªÇÒÀ» ÇÑ´Ù. ¸¸¾à µÎ°³ÀÇ È¸éÀÌ ¸ðµÎ ºñµð¿À ¸Þ¸ð¸®¿¡ ¼±
¾ðµÇ¾ú´Ù¸é ±×·¡ÇÈ
½ÃÀÛ ¹øÁö ÁÖ¼Ò¸¦ ¹Ù²Ù´Â °úÁ¤ÀÌ µÉ°ÍÀÌ¸ç ¹é¹öÆÛ°¡ ºñµð
¿À ¸Þ¸ð¸® ºÎÁ·À¸·Î ÀÎÇØ ¸Þ¸ð¸®¿¡ ¸¸µé¾îÁ³´Ù¸é Blt ÇÔ¼ö¿Í °°Àº
µ¿ÀÛÀ¸·Î
ºñµð¿À ¸Þ¸ð¸®¿¡ °í¼Ó º¹»ç¸¦ ÇÏ°Ô µÈ´Ù.
Flip ÇÔ¼öÀÇ Ã¹ ° Àμö´Â ¹é ¹öÆÛ°¡ primary °¡ µÇÁö ¾ÊÀ» ¶§ ½ÇÁ¦·Î Çø³
½Ãų
DirectDrawSurface ÀÇ ÁÖ¼Ò¸¦ ³Ö´Â °ÍÀ¸·Î½á, À̹øÀÇ °Á¿¡¼´Â Ç×»ó
nil À» ¾´´Ù. ±×¸®°í µÎ ¹ø° Àμö´Â
DDFLIP_WAIT ¸¦ ³Ö°Å³ª ¾Æ¹« °ªÀ» ¾È³Ö
´Â µÎ °¡ÁöÀÇ ¹æ¹ýÀÌ ÀÖÀ¸¸ç À§ÀÇ ¿ë¹ýó·³ DDFLIP_WAIT ¸¦ ³Ö´Â´Ù¸é
Çø®ÇÎ
ÀÌ µÉ ¶§±îÁö ´ë±âÇß´Ù°¡ Çø®ÇÎÀ» ½ÃŲ´Ù. ´ë±â°¡ µÇ´Â ÀÌÀ¯¿¡´Â ¸ð´ÏÅÍÀÇ
¼öÁ÷ º¹±Í ( Vertical Retrace )
¸¦ ±â´Ù¸®±â ¶§¹®ÀÌ´Ù.
¸¸¾à Æ®¸®Çà ¹öÆÛ¸µÀ» ¾´´Ù¸é Flip ¿¡ ´ë±â¸¦ µÎÁö ¾ÊÀº ä·Î while ÀÇ Á¶
°ÇÀ¸·Î ¼öÁ÷ º¹±Í
½ÃÀÛ À¯¹«¸¦ üũÇÏ´Â GetVerticalBlankStatus ¸¦ µÎ¾î ´ë
±âÇÏ´Â µ¿¾È¿¡ 3¹ø° ¹öÆÛ¿¡ ¹«¾ð°¡¸¦ ÀÛ¾÷ÇÑ´Ù¸é ¾ó¸¶°£ÀÇ
À̵æÀ» ¾òÀ» ¼ö
ÀÖÁö ¾ÊÀ»±î »ý°¢ÇÑ´Ù.
------------------------------------------------------------------------
(4) OnCreate À̺¥Æ®¿¡ Ãß°¡ »çÇ×
| Application.OnException :=
ExceptionHandler;
| Application.OnMinimize := FormMinimize;
|
Application.OnRestore := FormOnRestore;
À§ÀÇ 3 ÁÙÀ» Á÷Á¢ TBasic.FormCreate(Sender: TObject) ¿¡ Ãß°¡½ÃÅ°±â
¹Ù¶õ
´Ù. ù ¹ø° ÁÙÀº ¿¹¿Ü°¡ ¹ß»ýÇßÀ» ¶§ ½ÇÇà½ÃÅ°´Â ÇÔ¼ö¸¦ ÁöÁ¤ÇÑ °ÍÀÌ°í ³ª
¸ÓÁö µÎ ÁÙÀº ÆûÀÌ ÃÖ¼ÒȵǾúÀ» ¶§¿Í ´Ù½Ã
º¹±¸ µÇ¾úÀ» ¶§¿¡ ´ëÇÑ À̺¥Æ®
·Î½á Á÷Á¢ÀûÀ¸·Î Áö¿øÇÏ´Â ÆûÀÇ À̺¥Æ®´Â ¾Æ´Ï±â ¶§¹®¿¡ ÀÌ·¸°Ô Çڵ鷯 Çü½Ä
À¸·Î ¼±¾ðÇÏ°Ô µÇ¾ú´Ù.
ÀÌ·¸°Ô ÇÏ´Â ÀÌÀ¯´Â, DX ÀÇ Ç® ȸéÀÌ ÃÖ¼ÒÈ µÈ´Ù´Â
°ÍÀº À©µµ¿ì óÀ½ÀÇ ¸ðµå·Î µ¹¾Æ°£´Ù´Â ÀÇ¹Ì¿Í ÇÔ²² DX ¿¡¼ ¼±¾ðÇÑ ¸ðµç
È
»ó °ø°£ÀÇ »ó½ÇÀ» ÀǹÌÇϱ⠶§¹®¿¡ ÀÌ°ÍÀ» Á¦¾îÇÒ ¹«¾ð°¡°¡ ¿ä±¸µÇ¾î¼ÀÌ´Ù.
±×·¸´Ù¸é À§¿¡ ¾ð±ÞµÈ FormMinimize ¿Í FormOnRestore ¸¦ ¤°í ³Ñ¾î°¡´Â °Í
ÀÌ
¸Å³ÊÀÏÅ×´Ï ¼Ò½º¸¦ »ìÆì º¸±â·Î ÇÏÀÚ.
| procedure TBasic.FormMinimize(Sender:
TObject);
| begin
| FPreviousFlipping := FlippingEnabled;
|
FlippingEnabled := FALSE;
| end;
|
| procedure
TBasic.FormOnRestore(Sender: TObject);
| begin
| FlippingEnabled :=
FPreviousFlipping;
| end;
ÆûÀÌ ÃÖ¼ÒÈ µÇ¸é ÀÌÀüÀÇ Çø®ÇÎ »óŸ¦ ±â¾ïÇÏ°í Çø®ÇÎÀ» ºÒ°¡´ÉÇÏ°Ô ÇÑ
´Ù. ¸¶Âù°¡Áö·Î ÆûÀÌ ´Ù½Ã
º¹±¸°¡ µÇ¸é ±â¾ïÇØ µÎ¾ú´ø Çø®ÇÎ »óÅ·Π¼¼ÆÃÇÑ
´Ù. ¿Ö ÀÌ·¸°Ô ¹ø°Å·Î¿î °úÁ¤À» °ÅÄ¡´Â°¡ Çϸé ÆûÀÌ ÃÖ¼ÒȵǾúÀ»¶§´Â ½ÇÁ¦
·Î
°ÔÀÓÀ» ¾ÈÇÏ´Â °ÍÀ̱⠶§¹®¿¡ °ÔÀÓ¿¡¼ ¿À´Â ºÎÇϸ¦ ÃÖ´ëÇÑÀ¸·Î ÁÙ¿©¼
´Ù¸¥ ¾ÖÇø®ÄÉÀ̼ÇÀÇ ¼öÇà ¼Òµµ¸¦ ³ôÀÌÀڴµ¥ ±× ÃëÁö°¡
ÀÖ´Ù.
¶ÇÇÑ, ÇÁ·Î±×·¥ÀÌ ¹æ´ëÇØÁö¸é ¿©±â¿¡´Ù°¡ ´Ù¸¥ ¸¹Àº ±â´ÉÀ» ³Ö´Â °ÍÀÌ °¡´É
ÇÏ´Ù.
------------------------------------------------------------------------
(5) OnKeyDown À̺¥Æ® ¸¸µé±â
ÆûÀÇ Object Inspector ÀÇ Events ÀÇ OnKeyDown À̺¥Æ®¸¦ ´õºí
Ŭ¸¯ÇÑ´Ù.
±×¸®°í ¾Æ·¡ÀÇ ¼Ò½º¸¦ ÀÔ·ÂÇÑ´Ù.
| procedure TBasic.FormKeyDown(Sender: TObject;
var Key: Word;
| Shift:
TShiftState);
| begin
| if ssAlt in Shift then Key := 0;
| if
key = VK_ESCAPE then Close;
| end;
ù° ÁÙÀº Alt+F4 ·Î Á¾·áÇÏ´Â °ÍÀ» ¸·´Â ·çƾÀÌ´Ù. Alt ·Î ÁöÁ¤µÇ´Â ´ëºÎ
ºÐÀÇ ½Ã½ºÅÛ Å°¸¦
¸·´Â´Ù.
( ÇÏÁö¸¸ Alt+Tab °ú Ctrl+Alt+Del Àº µèÁö ¾Ê´Â´Ù. )
µÎ¹ø°ÀÇ ÁÙÀº ESC Å°¸¦ ´·¶À» ¶§ Á¾·á°¡
µÇµµ·Ï ¹Ù²Ù¾î ³õ´Â´Ù.
------------------------------------------------------------------------
(6) ¿¹¿Ü Çڵ鷯 ¸¸µé±â
À§ÀÇ OnCreate ¿¡¼ ¾ð±ÞÇÑ Application.OnException :=
ExceptionHandler;
À̶ó´Â ±¸¹®ÀÇ Àǹ®À»Ç®¶§°¡ ¿Ô´Ù. ÀÌ°ÍÀº Raise ·Î ÇÁ·Î±×·¡¸Ó°¡ ¹ß»ý½ÃÅ°
´Â ¿¹¿Ü¿Í µ¨ÆÄÀÌ
ÀÚü¿¡¼ ¿¡·¯ ¹ß»ý½Ã¿¡ »ý¼ºµÇ´Â ¿¹¿Ü¸¦ ó¸®ÇÏ°Ô µÈ´Ù.
±×·³ ¼Ò½º¸¦ ¸ÕÀú Á¦½ÃÇÏ°í ¼³¸í¿¡ µé¾î°¡°Ú´Ù.
| procedure TBasic.ExceptionHandler(Sender :
TObject; Error : Exception);
| var
| WasEnabled : boolean;
|
begin
| MessageBeep(0);
|
| WasEnabled :=
FlippingEnabled;
| FlippingEnabled := FALSE;
|
| if
Assigned(DirectDraw) then DirectDraw.FlipToGDISurface;
|
|
MessageDlg(Error.Message,mtError,[mbOK],0);
|
| FlippingEnabled :=
WasEnabled;
|
| end;
¿¹¿Ü Çڵ鷯ÀÇ ¿øÇüÀº óÀ½ºÎÅÍ Á¤ÀǵǾîÁø °ÍÀ¸·Î Error ¿¡´Â ¿¹¿ÜÀÇ Á¤º¸
°¡ µé¾î°¡
ÀÖ´Ù.
¸ÕÀú À©µµ¿ì µðÆúÆ® À½À» ¹ß»ý ½ÃŲ ÈÄ ( º¸Åë '»à-' ÇÏ´Â À½ ) ÇöÀçÀÇ ÇÃ
¸®ÇÎ »óŸ¦
ÀúÀåÇÏ°í Çø®ÇÎÀÌ ºÒ°¡´ÉÇÏ°Ô ÇÑ´Ù. ¸¸¾à DirectDraw °´Ã¼°¡
ÃʱâÈ µÇ¾î ÀÖ´Ù¸é FlipToGDISurface ¸¦ ½ÇÇàÇÑ´Ù.
ÃʱâÈ °Ë»ç¸¦ ÇÏ´Â ÀÌ
À¯´Â, ¿¹¿Ü°¡ DirectDraw °´Ã¼°¡ »ý¼ºµÇ±â Àü¿¡ ¹ß»ýÇÒ ¼öµµ ÀÖ±â
¶§¹®ÀÌ´Ù.
FlipToGDISurface ´Â ½ÇÇà Á÷ÀüÀÇ GDI ȸéÀ» Primary ¿¡ º¹»çÇÑ´Ù. ÀÌ°ÍÀ»
»ç¿ëÇؾ߸¸
MessageDlg ¸¦ Á¤È®ÇÏ°Ô À¯Àú°¡ º¼ ¼ö ÀÖ°Ô µÈ´Ù.
------------------------------------------------------------------------
(7) OnShow ¿Í OnDestroy À̺¥Æ®¿¡ Ãß°¡ »çÇ×
TBasic.FormShow ¿¡¼ ¸¶Áö¸· ÁÙ¿¡
FlippingEnabled := TRUE;
¸¦ ³Ö´Â´Ù. ÀÌ °úÁ¤ÀÌ ÀÖ°í ³ª¼¾ß ºñ·Î¼Ò Çø®ÇÎÀÌ ½ÃÀÛµÇ°í °ÔÀÓ È¸éÀ»
À¯Àú°¡ º¼ ¼ö ÀÖ°Ô
µÈ´Ù.
TBasic.FormDestroy ¿¡¼´Â ´ÙÀ½ÀÇ µÎÁÙÀÌ Ãß°¡µÈ´Ù.
FlippingEnabled := FALSE; // Á¦ÀÏ ¾ÕÁÙ¿¡
³Ö´Â´Ù.
Application.OnException := nil; // Á¦ÀÏ µÚÂÊ¿¡ ³Ö´Â´Ù.
ÆûÀÌ OnDestroy ¸Þ¼¼Áö¸¦ ¹Þ´Â´Ù´Â Àǹ̰¡ °ÔÀÓÀÇ Á¾·á¸¦ ÀǹÌÇϹǷΠÁ¦ÀÏ
ù ÁÙ¿¡ Çø®ÇÎÀ»
¾ø¾Ö´Â ¸Þ¼¼Áö¸¦ ³Ö¾î¾ß ÇÏ´Â °ÍÀÌ´Ù.
±×¸®°í DirectDraw °´Ã¼±îÁö ¸ðµÎ ¾ø¾îÁö°í ³ ÃÖÈÄ¿¡ ³Ö´Â Äڵ尡 ¹Ù·Î µÑ
° ÁÙ¿¡
ÀÖ´Â ¿¹¿Ü Çڵ鷯 Á¦°ÅÀÌ´Ù.
#####################################################
ÇÏÀÌÅÚ °ÔÀÓ Á¦ÀÛ µ¿È£È¸ ( GO GMA )
------------------------------------------------------------------------
###
DIRECT X Æ®·çÄ÷¯ °ÔÀÓ (3) - ´ÙÀÌ·ºÆ® X SURFACELOST ¿¡ ´ëÇÑ
´ëºñ
------------------------------------------------------------------------
ÀÛ¼ºÀÚ
: ¾È¿µ±â ( HiTEL ID : SMgal )
ÀÌÁ¦ DX ¸¦ ¾î´À Á¤µµ ±¸ÃàÇÏ°í °£´ÜÇÑ °ÔÀÓÀ» ¸¸µé±â¿¡µµ ÃæºÐÇÑ Äڵ尡 ¸¸
µé¾îÁ® ÀÖ´Â
»óÅÂÀÌ´Ù. ÇÏÁö¸¸ DX ´Â ÀÌ Á¤µµ·Î Ãʱâȸ¦ ³¡³¾ Á¤µµ·Î ¸¸¸¸ÇÏ
Áö ¾ÊÀº °ÍÀÌ »ç½ÇÀÌ´Ù. ±×·¡¼ À̹ø¿¡´Â ¾î¶°ÇÑ ÇüÅÂ·Îµç »ç¶óÁ® ¹ö¸°
Ç¥¸é
À» ´Ù½Ã º¹±¸ÇÏ´Â Äڵ带 ³Ö´Â °ÍÀÌ ÁÖµÈ °ü°ÇÀÌ´Ù. ¶ÇÇÑ ±âº»ÀûÀ¸·Î Ç¥¸éÀ»
°íÁ¤ÇÏ¿© Á÷Á¢ ¸Þ¸ð¸® ÁÖ¼Ò¸¦ ¾òÀ» ¼ö ÀÖ´Â ÇÔ¼ö¸¦
¸¸µé¾î º¸°Ú´Ù.
ÀÏ¹Ý À©µµ¿ì °ÔÀÓ Á¦ÀÛ¿¡ Àͼ÷ÇÑ ºÐÀ̶ó¸é ¿¹»óÄ¡ ¸øÇÑ À¯ÀúÀÇ ÇൿÀ¸·Î ÀÎ
ÇØ È¸éÀÌ ÀϺΠ¶Ç´Â ÀüºÎ°¡
Áö¿öÁö´Â Çö»óÀ» óÀ½¿¡ °æÇèÇغ¸°Ô µÈ´Ù. GDI·Î
±×·ÁÁø ȸéÀº ÀÚµ¿ º¹±¸ ±â´ÉÀÌ ¾øÀ¸¹Ç·Î Ç×»ó À©µµ¿ìÀÇ WM_PAINT ¸¦
¹Þ¾Æ¼
´Ù½Ã ±×¸²À» ±×·ÁÁá´ø ±â¾ïÀ» °¡Áö°í °è½Å ºÐÀÌ ¸¹À¸¸®¶ó »ý°¢ÇÑ´Ù.
DX ´Â ±âº»ÀûÀ¸·Î â¸ðµå¿¡¼ Ŭ¸®ÆÛ °´Ã¼¸¦ Áö¿øÇϹǷΠÀÌ·± Á¡¿¡¼± ¹®Á¦°¡
¾øÁö¸¸ ÇÑ °¡Áö Áß´ëÇÑ ¹®Á¦¸¦
¾È°í ÀÖ´Ù. ŽºÅ© ÀüȯµîÀ¸·Î ȸéÀÇ ¸ðµå°¡
¹Ù²î¾î ¹ö¸®°ÔµÇ¸é DX ¿¡¼ ÇÒ´çÇÑ Ç¥¸éÀº ¸ðµÎ ¸Þ¸ð¸®¸¦ ÀÒ¾î ¹ö¸®°Ô µÇ´Â
°ÍÀÌ
±×°ÍÀÌ´Ù. ¾Æ¿¹ ÀÛ¾÷ Àüȯ Å°ÀÎ Alt+Tab °°Àº°ÍÀÌ ¸ÔÁö ¾Êµµ·Ï ÇÏ´Â ¹æ
¹ýÀÌ VC++ °ÔÀÓ¿¡´Â ÁÖ·Î »ç¿ëµÇÁö¸¸, ÇÇÇÏ´Â°Ô ´É»ç´Â
¾Æ´Ï´Ù.
¸¸¾à DX °¡ Ç¥¸éÀ» ÀÒ¾î ¹ö·È´Âµ¥µµ ºÒ±¸ÇÏ°í Blt ÇÔ¼öµîÀ» »ç¿ëÇÏ·Á ÇÑ´Ù¸é
DX ´Â ¿¡·¯³ª ¿¹¿Ü
´ë½Å¿¡ DDERROR_SURFACELOST ¸¦ ¸®ÅÏÇÏ°Ô µÇ°í ÇÁ·Î±×·¡¸Ó
´Â ´ëºÎºÐÀÇ DX ÇÔ¼ö¿¡´Ù°¡ DDERROR_SURFACELOST ¿¡
´ëÇÑ ´ëºñ¸¦ ÇؾßÇÑ´Ù.
¿©±â¼ ´ëºñ¶ó°í ÇÏ´Â °ÍÀº, DX ÇÔ¼ö ½ÇÇà½ÃÀÇ ¸®ÅÏ¿¡ Àú ¸Þ¼¼Áö°¡ ¸®ÅϵǸé
Ç¥¸éÀ» º¹±¸ ½ÃÅ°°í ÀÒ¾î¹ö¸°
À̹ÌÁö ¹öÆÛ¸¦ ´Ù½Ã Àд ÀÛ¾÷À» ½ÃÅ°¸é µÈ´Ù.
------------------------------------------------------------------------
(1) ¼¼¹ø° ÇÁ·ÎÁ§Æ®ÀÇ ½ÃÀÛ
¸ÕÀú ÀÌÀü¿¡ Á¦ÀÛÇÑ DX24Bit2.Dpr À» ÀÐ¾î µéÀδÙ. Save Project As ¸¦
¼±
ÅÃÇÏ¿© ÀúÀå½Ã¿¡ À̸§À» DX24Bit3.Dpr ·Î ¹Ù²Û´Ù. Save As ·Î MainUnt2.Pas
µµ
MainUnt3.Pas ·Î ¹Ù²Û´Ù.
------------------------------------------------------------------------
(2) TBasic Ŭ·¡½º¿¡¼ Ãß°¡ÇÒ Çʵå¿Í ¸Þ¼Òµå
´ç½ÅÀÌ Ãß°¡ ÀÔ·ÂÇØ¾ß ÇÒ »õ·Î¿î Çʵå¿Í ¸Þ¼Òµå´Â ¾Æ·¡¿Í °°´Ù.
| type
| TBasic = class(TForm)
|
|
procedure FormPaint(Sender: TObject);
|
| private
|
FIsLocked : boolean;
|
| function RestoreSurfaces :
HResult;
| procedure DrawSurfaces;
|
| public
|
LockDesc : TDDSurfaceDesc;
|
| procedure
DrawScreen;
| function MakeItSo(DDResult : HResult) : boolean;
|
procedure LockBackGround;
| procedure UnlockBackGround;
|
end;
»õ·Î Ãß°¡µÈ ºÎºÐÀº È»ó º¹±¸ ½ÃÅ°´Â ºÎºÐ°ú ȸéÀ» °íÁ¤ÇÏ°í ÇØÁ¦ÇÏ´Â µÎ
ºÎºÐÀ¸·Î µÇ¾î
ÀÖ´Ù.
À̹ø¿¡µµ ¿ª½Ã °¢°¢ÀÇ ÇÔ¼öÀÇ ¼Ò½º¸¦ Ãß°¡ ½ÃÅ°´Â ÇüÅ·Π¼³¸íÀ» ÇÏ°Ú´Ù.
------------------------------------------------------------------------
(3) È»ó º¹±¸¿¡ ´ëÇÑ ÇÔ¼öµé
¾Õ¿¡¼µµ ¾ð±ÞÇßµíÀÌ ´ëºÎºÐÀÇ DX ÇÔ¼öµéÀº Ç×»ó Ç¥¸éÀ» ÀÒ¾î ¹ö¸®Áö ¾Ê¾Ò
´ÂÁö¸¦ °Ë»çÇØ¾ß ÇÑ´Ù. (
´õ ÀÚ¼¼È÷ ¸»Çϸé DDERROR_SURFACELOST ¸¦ ¸®ÅÏÇÒ
¼ö ÀÖ´Â ¸ðµç ÇÔ¼ö°¡ ´ë»óÀÌ µÈ´Ù. )
¼Ò½º·Î ¿¹¸¦ µéÀÚ¸é ´ÙÀ½°ú °°Àº Çü½ÄÀÌ µÉ °ÍÀÌ´Ù.
| if PrimarySurface.Flip(nil,DDFLIP_WAIT) =
DDERROR_SURFACELOST then
| º¹±¸ÇÏ´Â ÄÚµå();
ÇÏÁö¸¸ Ç¥¸é¿¡ ´ëÇÑ DX ÇÔ¼ö¸¶´Ù ÀÌ·± º¹±¸ Äڵ带 °Ë»çÇÏ°í Ç¥¸éÀ» ÀÒ¾úÀ»
¶§´Â Ç¥¸éÀ» »ì·Á³»°Ô
¸¸µç´Ù¸é ÀÌ°ÍÀº ¿©°£ÀÇ ¹ø°Å·Î¿î ÀÛ¾÷ÀÌ ¾Æ´Ò °ÍÀÌ´Ù.
±×·¡¼ ¸¸µé¾îÁø °ÍÀÌ ´ÙÀ½¿¡ ³ª¿À´Â MakeItSo ÀÌ´Ù. ÀÌ ÇÔ¼öÀÇ À̸§Àº 'µ¨
ÆÄÀÌ 2 ¾ð¸®½¬µå'
¶ó´Â Ã¥ÀÇ ÀúÀÚ°¡ ÁöÀº ±×´ë·Î»ç¿ëÇß´Ù.
| function TBasic.MakeItSo(DDResult : HResult) :
boolean;
| begin
| case DDResult of
| DD_OK :
Result := TRUE;
| DDERR_SURFACELOST : Result := RestoreSurfaces
<> DD_OK;
| else Result := DDResult <>
DDERR_WASSTILLDRAWING;
| end;
| end;
MakeItSo ´Â ÇÔ¼öÀÇ ¸®ÅÏ °ªÀ» Àμö·Î ¹Þ¾Æ¼ ±×°ÍÀÌ DDERR_SURFACELOST ÀÏ
¶§´Â
RestoreSurfaces ¸¦ È£ÃâÇÏ¿© È»óÀ» º¹±¸ÇÏ°í, DDERR_WASSTILLDRAWING
¸¸ ¾Æ´Ï¶ó¸é Ç×»ó TRUE ¸¦ ¸®ÅÏ
Çϵµ·Ï µÇ¾î ÀÖ´Ù. ¸¸¾à È»óÀ» º¹±¸Ç϶ó´Â
¸Þ¼¼Áö¸¦ ¹Þ°í ¼º°øÀûÀ¸·Î º¹±¸ ½ÃÄ×´Ù¸é FALSE °¡ ¸®Åϵȴٴ °ÍÀ» Àß ¾Ë¾Æ
µÎ¾î¾ß
ÇÑ´Ù. ÀÌ°ÍÀº Á¶±ÝÀÖ´Ù°¡ ´Ù½Ã ¼³¸íÇϱâ·Î ÇÏ°í ¿ì¼± RestoreSurface
¶ó´Â ÇÔ¼öºÎÅÍ »ìÆ캸ÀÚ.
| function TBasic.RestoreSurfaces :
HResult;
| var
| i : integer;
| begin
| Result :=
PrimarySurface.Restore;
| if Result = DD_OK then begin
| for i
:= 1 to MAX_IMAGE_SURFACE do begin
| Result :=
Image[i].Restore;
| if Result <> DD_OK then begin
|
exit;
| end;
| end;
| if Result = DD_OK
then DrawSurfaces;
| end;
| end;
|
| procedure
TBasic.DrawSurfaces;
| var
| i : integer;
| begin
| for i
:= 1 to MAX_IMAGE_SURFACE do begin
|
DDReloadBitmap(Image[i],GetBitmapName(i));
| end;
|
end;
MakeItSo ¿¡¼ ºÒ·ÁÁø RestoreSurface ´Â Primary ¸¦ º¹±¸ÇÏ°í ³ª¸ÓÁö À̹Ì
Áö
¹öÆ۵鵵 º¹±¸ ½ÃŲ´Ù. ±×¸®°í ÀÌ°ÍÀÌ ¸ðµÎ ¼º°øÀûÀ̾ú´Ù¸é DrawSurface
¸¦ È£ÃâÇÏ¿© µ¥ÀÌŸ¸¦ ÀÒ¾î ¹ö¸° À̹ÌÁö ¹öÆÛ¸¦ ´Ù½Ã
ä¿î´Ù.
DDReloadBitmap Àº DDUtils.Pas ¿¡ Æ÷ÇԵǾî ÀÖ´Â ÇÔ¼ö·Î½á ºñÆ®¸ÊÀ» À̹Ì
Áö ¹öÆÛ¿¡ ¿Ã¸®´Â ¿ªÇÒÀ»
ÇÑ´Ù.
±×·¯¸é ¿©±â¿¡¼ »õ·Ó°Ô µîÀåÇÑ DX ÇÔ¼öÀÎ Restore ¸¦ »ìÆ캸ÀÚ.
ÀÌ ÇÔ¼ö´Â ÇØÁ¦µÇ¾î ¹ö¸°
DirectDrawSurface °´Ã¼¿¡ ´ëÇØ Ç¥¸éÀ» º¹±¸ÇÏ´Â
¿ªÇÒÀ» ÇÑ´Ù. PrimarySurface ´Â óÀ½¿¡ º¹ÇÕ È»ó Ç¥¸éÀ¸·Î
Á¤ÀÇ µÇ¾ú±â ¶§
¹®¿¡ PrimarySurface.Restore ¸¸ ÇØÁÖ¸é ³ª¸ÓÁö ¿¬°üµÈ ¹é ¹öÆ۵鵵 °°ÀÌ º¹
±¸°¡ µÈ´Ù. ( º¹ÇÕ
È»ó Ç¥¸éÀÇ ÀåÁ¡ÀÌ´Ù. )
³ª¸ÓÁö´Â Ưº°È÷ ¼º¸íÇÒ ºÎºÐÀº ¾ø´Ù. ´õ ÀÚ¼¼ÇÏ°Ô surface lost ¿¡ ´ëÇؼ
¾Ë°í ½Í´Ù¸é
Help ÆÄÀÏÀ» ºÎ¸£¸é µÈ´Ù.
±×·¸´Ù¸é À̹ø¿¡´Â MakeItSo °¡ µµ´ëü ¾î¶»°Ô »ç¿ëµÇ´ÂÁö¸¦ ¾Ë¾Æº¸ÀÚ.
À§¿¡¼µµ ¸»ÇßµíÀÌ
MakeItSo(PrimarySurface.Flip(nil,DDFLIP_WAIT)) ¸¦ È£
ÃâÇßÀ» ¶§, ¸¸¾à Ç¥¸éÀ» ÀÒ¾î ¹ö¸° »óŶó¸é
Çø®ÇÎÀº ÇàÇØÁöÁö ¾Ê°í MakeIt
So ¿¡¼ È»ó º¹±¸¸¦ À§ÇÑ ÀÛ¾÷¸¸À» ÇÏ°Ô µÈ´Ù. ±×´ë½Å FALSE °¡ ¸®Åϵȴٰí
¸»Çß¾ú´Ù.
ÀÌ·² ¶§´Â ½ÇÁ¦·Î MakeItSo °¡ ³¡³ª°í ³ª¼ Çø®ÇÎ ÇÔ¼ö¸¦ ÇÑ ¹ø
´õ ½ÇÇàÇØÁà¾ß ½ÇÁ¦·Î Çø®ÇÎÀÌ ÀϾ°Ô µÈ´Ù. ±×·¡¼ ¿ì¸®´Â
¾ÕÀ¸·Î ÀÌ ÇÔ
¼ö¸¦ ÀÌ·± ½ÄÀ¸·Î¸¸ »ç¿ëÇϱâ·Î ÇÑ´Ù !!
| repeat
| until
MakeItSo(PrimarySurface.Flip(nil,DDFLIP_WAIT));
ÀÌ·¸°Ô Çϸé Á¤È®ÇÑ Çø®ÇÎÀÌ ÀϾ¾ßÁö¸¸ repeat until ·çÇÁ¸¦ Å»ÃâÇÏ°Ô
µÇ´Â °ÍÀÌ´Ù.
°æ¿ì¸¦ µûÁ®º¸ÀÚ.
1> MakeItSo °¡ TRUE ¸¦ ¸®ÅÏ
: ¹«Á¶°Ç Çѹø¸¸ ½ÇÇàÇÏ°í ·çÇÁ¸¦ ³ª¿Â´Ù.
MakeItSo ³»ÀÇ ÇÔ¼ö°¡ ¼º°øÇßÀ» ¶§,
È»ó º¹±¸°¡ ½ÇÆÐÇßÀ» ¶§, ÀÌ¿Ü¿¡
¿¡·¯°¡ ¹ß»ýÇßÀ» ¶§
2> MakeItSo °¡ FALSE ¸¦ ¸®ÅÏ
: ´Ù½Ã MakeItSo ³»ÀÇ ÇÔ¼ö¸¦ ½ÇÇàÇÑ´Ù.
È»ó º¹±¸°¡ ¼º°øÇßÀ» ¶§,DX
ºÎÇÏ ¶§¹®¿¡ Áö¿¬µÉ ¶§
È»ó º¹±¸°¡ ½ÇÆÐÇϰųª ±× ÀÌ¿Ü ´Ù¸¥ ¿¡·¯¿¡ ´ëÇؼ TRUE ¸¦ ¹ß»ý ½ÃÄÑ ·ç
ÇÁ¿¡¼ »©³»´Â ÀÌÀ¯´Â
¹«ÇÑ ·çÇÁ¸¦ ¹æÁöÇϱâ À§ÇؼÀÌ´Ù. ¹Ý´ë·Î È»ó º¹±¸
°¡ ¼º°øÇßÀ» ¶§¿Í DX Áö¿¬¿¡ ´ëÇØ FALSE ¸¦ ¹ß»ý ÇÏ´Â °Íµµ,
MakeItSo ³»ÀÇ
ÇÔ¼ö¸¦ ÇÑ ¹ø ´õ ½ÇÇà ½ÃÅ°±â À§ÇؼÀÌ´Ù.
------------------------------------------------------------------------
(4) OnPaint À̺¥Æ® ¼³Á¤
¾î¶°ÇÑ ÀÌÀ¯¿¡ ÀÖ¾î¶óµµ À©µµ¿ì ȸéÀÇ °»½ÅÀÌ ÇÊ¿äÇÑ ºÎºÐÀÌ »ý±æ ¶§´Â ÀÌ
À̺¥Æ®°¡ Æû¿¡ ¾Ë·ÁÁö°Ô
µÈ´Ù. ÀÌ¹Ì ¿ì¸®´Â ȸéÀ» ´Ù½Ã ÀÐ¾î µéÀÌ´Â ·çƾÀÎ
DrawSurfaces ¸¦ ¸¸µé¾î µÎ¾ú´Ù. ±×·¡¼ ÀÌ À̺¥Æ®¿¡´Â
DirectDraw °´Ã¼°¡
À¯È¿ÇÏ´Ù¸é DrawSurfaces ¸¦ È£ÃâÇÏ°Ô¸¸ ÇØµÎ¸é ¸ðµç °ÍÀÌ ³¡³´Ù.
| procedure TBasic.FormPaint(Sender:
TObject);
| begin
| if Assigned(DirectDraw) then
|
DrawSurfaces;
| end;
------------------------------------------------------------------------
(5) È¸é °íÁ¤°ú ÇØÁ¦¿¡ ´ëÇÑ ÇÔ¼ö
ÀÌ ÇÔ¼öµéÀº µµ½º ¶§Ã³·³ Á÷Á¢ ȸ鿡 ´ëÇÑ ¸Þ¸ð¸® Æ÷ÀÎÅ͸¦ ¾ò¾î »ç¿ëÀÚÀÇ
ÀÓÀÇ´ë·Î Á¶ÀÛÀ» ÇÒ ¼ö ÀÖ°Ô
ÇÑ´Ù. ÀڽŸ¸ÀÇ À̹ÌÁö Å×Å©´ÐÀ» ¹ßÈÖÇÒ ¼ö ÀÖ
´Â ÁÁÀº ¹æ¹ýÀ̱ä ÇÏÁö¸¸ ±×·¡ÇÈ Ä«µå¿¡ µû¸¥ Çϵå¿þ¾î °¡¼Ó ±â´ÉÀ» »ç¿ëÇÒ
¼ö
¾ø´Ù´Â ´ÜÁ¡À» ¾È°íÀÖ´Ù.
| procedure TBasic.LockBackGround;
|
begin
| if not FIsLocked then begin
| LockDesc.dwSize :=
SizeOf(TDDSurfaceDesc);
| repeat
| until
MakeItSo(BackBuffer.Lock(Rect(0,0,MAX_X_LINE,MAX_Y_LINE),
|
LockDesc,DDLOCK_SURFACEMEMORYPTR +
|
DDLOCK_WAIT, 0));
| FIsLocked := TRUE;
|
end;
| end;
|
| procedure TBasic.UnlockBackGround;
|
begin
| if FIsLocked then begin
|
BackBuffer.UnLock(LockDesc.lpSurface);
| FIsLocked :=
FALSE;
| end;
| end;
À§ÀÇ µÎ ÇÔ¼ö´Â Ç¥¸éÀ» °íÁ¤ÇÏ°í ÇØÁ¦ÇÏ´Â ÇÔ¼öÀÌ´Ù.
TBasic.LockBackGround ºÎÅÍ
»ìÆ캸ÀÚ. À̹ø °Á¿¡ »õ·Î ¸¸µç private º¯¼ö
ÀÎ FIsLocked ´Â Ç¥¸éÀÌ °íÁ¤µÇ¾úÀ» ɧ§¢¸¸ TRUE ¸¦ °¡Áø´Ù. µû¶ó¼ ¸ÕÀú
À̹Ì
°íÁ¤µÇ¾ú´Â °¡¸¦ È®ÀÎÇÏ¿©, ±×·¸Áö ¾Ê´Ù¸é Ç¥¸é °íÁ¤ ÀÛ¾÷À» ½ÃÀÛÇÏ°Ô µÈ´Ù.
LockDesc ´Â Lock ÇÔ¼ö¸¦ À§ÇØ µû·Î
¸¸µç TDDSurfaceDesc º¯¼ö·Î¼, Lock ¿¡
¼ µ¹¾Æ¿À´Â ¸®ÅÏ °ªÀÌ ³ªÁß¿¡ Áß¿äÇÏ°Ô ¾²À̱⠶§¹®¿¡ º°µµ·Î public
¼±¾ð
À» ÇÑ°ÍÀÌ´Ù.
Áß¿äÇÑ °ªÀ̶õ, LockDesc.lpSurface ¿Í LockDesc.lPitch ¸¦ ¸»ÇÏ´Â °ÍÀÌ´Ù.
LockDesc.lpSurface ´Â ¿ì¸®°¡ ¾Ë°í ½Í¾îÇÏ´ø Ç¥¸é ¸Þ¸ð¸®ÀÇ ½ÃÀÛ¹øÁö, Áï
(0,0)
ÀÇ Áּҷνá, µµ½º¶§ÀÇ A000:0000 ÁÖ¼Ò¶ó°í »ý°¢ÇÏ¸é µÈ´Ù. ¹°·Ð º¯¼ö
¾Õ¿¡ lp °¡ ºÙÀº °É·Î ºÁ¼ long pointer ÀÎ 4
bytes Æ÷ÀÎÅÍ º¯¼öÀÌ´Ù. ±×·¡
¼ DWORD ·Î ¼±¾ðÇÑ °ªÀ¸·Î LockDesc.lpSurface ¸¦ ¹ÞÀ» ¼ö
ÀÖ´Ù.
LockDesc.lPitch ´Â Ç¥¸éÀÇ ³í¸®Àû °¡·Î ÆøÀÌ´Ù. µµ½º¿¡¼ º£»ç¸¦ ´Ù·ç¾îº¸
½Å ºÐÀ̶ó¸é
640 ÀÇ °¡·Î ±æÀ̸¦ ³í¸®Æø¸¸ 1024 ·Î ´Ã¿© ¹ðÅ© ÀüȯÀÇ °è»êÀ»
°£´ÜÇÏ°Ô ÇÏ·Á ÇϽŠºÐÀÌ ÀÖÀ»·±ÀÚ ¸ð¸£°Ú´Ù. ÀÌ·¸°Ô ÇÏ¸é ½ÇÁ¦ÀÇ
ȸéÀÇ »ç
ÀÌÁî´Â °¡·Î 640 ÀÌÁö¸¸ ¸Þ¸ð¸® »óÀ¸·Î´Â °¡·Î°¡ 1024 °¡ µÈ´Ù. µû¶ó¼ 640
* 480 * 256 color
¿¡¼ (0,0) °ú (0,1) ÀÇ ¹øÁö Â÷ÀÌ°¡ 640 ÀÌ ¾Æ´Ñ 1024°¡
µÇ¾úÀ» °ÍÀÌ´Ù. LockDesc.lPitch ¿ª½Ã ÀÌ·±
°³³äÀÌ´Ù. ÀϺΠīµåÀÇ °æ¿ì¿¡´Â
DX ½º½º·Î°¡ °¡·Î°¡ 640 ÀÌ¶óµµ 1024 ·Î ³»ºÎ ³í¸®ÆøÀ» Àâ¾ÆÁØ´Ù. ±×·¡¼ ÀÌ
º¯¼ö¿¡´Â (
°¡·ÎÀÇ ³í¸®Æø * byte per pixel ) ÀÌ µé¾î°¡°Ô µÈ´Ù. ±× ¶§¹®¿¡
(0,0) °ú (0,1) ÀÇ ¹øÁö Â÷ÀÌ´Â lPitch ¸¸Å
»ý±â°Ô µÈ´Ù. ÀÌÇØ°¡ µÇ½Å ºÐÀÌ
¶ó¸é Áö±ÝÂë, " ¾ÆÇÏ... ±×·³ y ÁÂÇ¥ Çϳª ´Ã¾î³¯¶§¸¶´Ù lPitch ¸¦ ´õÇØÁÖ¸é
µÇ´Â±º..
" À̶ó°í »ý°¢Çϰųª, ´õ ³ª°¡¼ " À½... ±×·³ (x,y) ¿¡ ´ëÇÑ ¹øÁö
°è»êÀº ( longint(LockDesc.lpSurface)
+ y * LockDesc.lPitch + x * 3 ) °¡
µÇ°Ú±º... " ÇÏ°í »ý°¢ÇÒ °ÍÀÌ´Ù. ±×·¡¼ µµ½º¶û °°Àº °³³äÀ̶ó°í ÇÒ ¼ö
ÀÖ
´Ù. °Ô´Ù°¡ ºñµð¿À Ä«µå¿¡ »ó°ü¾øÀÌ ¹ðÅ©°¡ ÇÊ¿ä ¾ø´Â ¼±Çü ¸Þ¸ð¸®·Î ¾Ö¹Ä·¹
ÀÌ¼Ç Çϱ⠶§¹®¿¡ ÇÁ·Î±×·¡¸Ó·Î¼± ¹Ý°¡¿î ÀÏÀÌ´Ù.
( ÇÏÁö¸¸ Àß Â¥¿©Áø µµ½º
¿¡¼ º¸´Ü ¾î¿ ¼ö ¾øÀÌ ´À¸®°Ô µÇ°ÚÁö¸¸.... )
------------------------------------------------------------------------
(6) Ãß°¡ »çÇ׿¡ ´ëÇÑ ÀÌÀü À̺¥Æ® °³¼±
1) TBasic.FormShow ¿¡¼..
¿©±â¼´Â FlippingEnabled := TRUE; ¹Ù·Î ¾Õ¿¡ ¸î ÁÙÀÇ Äڵ带 ³Ö¾î
ÁÖ
¾î¾ß ÇÑ´Ù. ÀÌ ÄÚµå´Â ¹é ¹öÆÛ¸¦ Áö¿ì´Â ¿ªÇÒÀ» Çϴµ¥ ÀϺΠ±×·¡ÇÈ Ä«µå
¿¡¼´Â ÃʱâÈ ¶§ ¹é ¹öÆÛ¸¦ Áö¿ìÁö ¾Ê´Â
°ÍÀÌ ¹ß°ßµÇ¾ú±â ¶§¹®ÀÌ´Ù.
( ¿¹¸¦ µé¸é ATI MACH 64 .. )
| LockBackGround;
| pVideo :=
PDWORD(LockDesc.lpSurface);
| for i := 0 to pred(MAX_Y_LINE) do
begin
| FillChar(pVideo^,MAX_X_LINE * BPP,0);
|
inc(longint(pVideo),LockDesc.lPitch);
| end;
|
UnlockBackGround;
¸¸¾à¿¡ ÀÌ Äڵ尡 ¹®Á¦¸¦ ÀÏÀ¸Å²´Ù¸é »èÁ¦ ÇØÁ־ ÁÁ´Ù. ½ÇÁ¦ °ÔÀÓÀ»
¸¸µå·Á¸é ¾îÂ¥ÇÇ
¹é¹öÆÛ¸¦ Áö¿ì´Â °úÁ¤ÀÌ ÇÑ ¹ø ÀÌ»ó µé¾î°¡±â ¶§¹®ÀÌ´Ù.
2) TBasic.UpdateDisplay ¿¡¼..
¿©±â´Â Çø®ÇÎ ÇÔ¼ö¿¡ ´ëÇØ MakeItSo ¸¦ ³Ö¾î ÁÖ¾î¾ß ÇÑ´Ù. ¿ë¹ýÀº À§¿¡
¼ ¾ð±ÞÇÑ
±×´ë·ÎÀ̸ç, ±× ¾Õ¿¡´Â ½ÇÁ¦ ±×¸²À» ±×¸®´Â DrawScreen ÀÌ ÄÚ
µå¿¡ Ãß°¡µÇ¾ú´Ù.
| procedure TBasic.UpdateDisplay(is_commandable
: boolean);
| begin
| DrawScreen;
| repeat
| until
MakeItSo(PrimarySurface.Flip(nil,DDFLIP_WAIT));
| end;
ÇöÀçÀÇ DrawScreen Àº ȸé ( 300,200 ) ¿¡ ³ì»öÀÇ Á¡ Çϳª¸¦ ´Þ¶û
Âï´Â
Ç㹫ÇÑ °á°ú¸¦ ³º°Ô µÈ´Ù.
| procedure TBasic.DrawScreen;
| begin
|
LockBackGround;
|
PDWORD(DWORD(LockDesc.lpSurface)+LockDesc.lPitch*200+300*BPP)^
:=
$0000FF00;
| UnlockBackGround;
| end;
Lock À» »ç¿ëÇÏ¿© Á¡À» Âï´Â ºÎºÐÀº ³ªÁß¿¡ ´Ù½Ã ÀÚ¼¼ÇÏ°Ô ´Ù·ç°Ô µÇ´Ï
Áö±ÝÀº
±×·¯·Á´Ï.. ÇÏ¸ç ³Ñ¾î°¡±â ¹Ù¶õ´Ù.
3) ¿¹¿Ü Çڵ鷯ÀÇ °»½Å
ÀÌÁ¦ Lock À̶ó´Â °³³äÀÌ Çϳª ´õ »ý°åÀ¸´Ï Ç¥¸éÀÌ Lock µÇ¾î ÀÖ´Â »óȲ
¿¡¼µµ
Çø®ÇÎó·³ °°Àº °úÁ¤À» ÇØÁÖ¾î¾ß ÇÑ´Ù. ¸¸¾à Ç¥¸éÀÌ °íÁ¤µÇ¾î ÀÖ
´Â »óÅ¿¡¼ GDI ÀÇ ±×·¡ÇÈ ÇÔ¼ö³ª DX ÀÇ Blt ÇÔ¼ö·ù¸¦
»ç¿ëÇÏ°Ô µÈ´Ù¸é
´çÀå ´Ù¿îÀÌ µÇ¾î ¹ö¸®´Â°á°ú°¡ µÈ´Ù. ±×·¡¼ Ç×»ó GDI ¸¦ Ç¥½ÃÇϱâ À§
Çؼ Ç¥¸éÀÇ Lock À»
ÇØÁ¦ÇÏ¿©¾ß Çϱ⠶§¹®ÀÌ´Ù. ÀÌ ºÎºÐµµ ¿ª½Ã Lock À»
´Ù·ç´Â ºÎºÐ¿¡¼ ´õ ÀÚ¼¼È÷ ¾ð±ÞÇϵµ·ÏÇÏ°Ú´Ù.
| procedure TBasic.ExceptionHandler(Sender :
TObject; Error : Exception);
| var
| WasEnabled : boolean;
|
WasLocked : boolean;
| begin
| { ¿¹¿Ü ¸Þ¼¼Áö¸¦ º¸À̱â Àü¿¡ GDI·Î Àüȯ }
|
MessageBeep(0);
|
| WasEnabled := FlippingEnabled;
|
FlippingEnabled := FALSE;
|
| WasLocked := FIsLocked;
|
if WasLocked then begin
| UnlockBackGround;
|
end;
|
| if Assigned(DirectDraw) then
DirectDraw.FlipToGDISurface;
|
|
MessageDlg(Error.Message,mtError,[mbOK],0);
|
| if WasLocked then
begin
| LockBackGround;
| end;
|
| FlippingEnabled :=
WasEnabled;
|
| end;
#####################################################
ÇÏÀÌÅÚ °ÔÀÓ Á¦ÀÛ µ¿È£È¸ ( GO GMA )
------------------------------------------------------------------------
###
DIRECT X Æ®·çÄ÷¯ °ÔÀÓ (4) - ´ÙÀÌ·ºÆ® X ±âº»ÀûÀÎ À̹ÌÁö
Âï±â
------------------------------------------------------------------------
ÀÛ¼ºÀÚ
: ¾È¿µ±â ( HiTEL ID : SMgal )
DX ¿¡ ´ëÇÑ ¸ðµç ÃʱâÈ´Â ³¡³µ´Ù.
¾Æ¸¶µµ ¿©±â±îÁöÀÇ ºÎºÐÀº Æ®·çÄ÷¯¿Í´Â »ó°ü ¾ø´Â ºÎºÐÀÌ
´ëºÎºÐÀ̾ú´Ù. ±×
¸®°í ´©±¸³ª ¾øÀÌ DX ¸¦ ¾²°íÀÚ ÇÏ´Â »ç¶÷À̶ó¸é °ÅÀÇ À¯»çÇÑ ¹æ¹ýÀ¸·Î Ãʱâ
ȸ¦ Çϸ®¶ó°í
»ý°¢ÇÑ´Ù.
¿©±â¼ºÎÅÍ´Â °ÔÀÓÀÇ µ¶Æ¯ÇÑ °ÔÀÓ ±â¹ýÀ» ¹ßÈÖÇÒ ±âȸ°¡ »ý±æ °ÍÀÌ´Ù. ÀÌ °
Á¿¡¼´Â DX ¿¡¼ Áö¿øÇÏ´Â
¸Þ¼Òµå¸¦ ÀÌ¿ëÇؼ ȸéÀ» Âï¾îº»´Ù. DX ÀÇ ³»Àå
¸Þ¼Òµå´Â ±×·¡ÇÈ Ä«µå¿¡ µû¸¥ Çϵå¿þ¾î °¡¼Ó ±â´ÉÀ» Áö¿øÇϱ⠶§¹®¿¡ À߸¸
ȍ
¿ëÇÑ´Ù¸é µµ½º ºÎ·´Áö ¾ÊÀº ¼Óµµ°¡ °¡´ÉÇÏ´Ù°í º»´Ù.
ÀÌÁ¦ºÎÅÍ´Â ³ª¸ÓÁö ¸ðµç ¼Ò½º´Â ±×´ë·Î µÐ ä, DrawScreen ¸¸À» ¼öÁ¤ÇÏ¿© »ç
¿ëÇÏ´Â ¹æ¹ýÀ» ¾µ
°ÍÀÌ´Ù.
------------------------------------------------------------------------
(1) ³×¹ø° ÇÁ·ÎÁ§Æ®ÀÇ ½ÃÀÛ
¸ÕÀú ÀÌÀü¿¡ Á¦ÀÛÇÑ DX24Bit3.Dpr À» ÀÐ¾î µéÀδÙ. Save Project As ¸¦
¼±
ÅÃÇÏ¿© ÀúÀå½Ã¿¡ À̸§À» DX24Bit4.Dpr ·Î ¹Ù²Û´Ù. Save As ·Î MainUnt3.Pas
µµ
MainUnt4.Pas ·Î ¹Ù²Û´Ù.
------------------------------------------------------------------------
(2) TBasic Ŭ·¡½º¿¡¼ Ãß°¡ÇÒ Çʵå¿Í ¸Þ¼Òµå
¾ø´Ù! ( ³ÃÁ¤Çϱº.. )
Á¶±Ý Àü¿¡µµ ¸»ÇßÁö¸¸ ÀÌÁ¦´Â DrawScreen ¸¸À» °³Á¶ÇÏ¿© »ç¿ëÇÒ
°ÍÀ̱⠶§¹®
ÀÌ´Ù.
------------------------------------------------------------------------
(3) ¿ì¸®°¡ ȸ鿡 ÂïÀ» ù¹ø° À̹ÌÁö
ÀÚ·á½Ç¿¡ ÇÔ²² ¿Ã¶ó¿Â Å×½ºÆ®¿ë ÇÁ·Î±×·¥¿¡´Â Test1.Bmp ¿Í Test2.Bmp ¶ó´Â
¿¹Á¦ ºñÆ®¸ÊÀÌ
ÀÖ´Ù. ¿ì¸®´Â ÀÌÁ¦ºÎÅÍ ÀÌ ºñÆ®¸ÊÀ¸·Î ¸ðµç °ÍÀ» ó¸®ÇÏ°Ô µÉ
°ÍÀÌ´Ù.
Âü°í·Î ¸»ÇØ µÎÀÚ¸é, Test1.Bmp ´Â ÇÊÀÚ°¡ ¸¸µé¾ú´ø °ÔÀÓÀÎ ´ëº¯ ÆÄÀÌÅÍ µî
¿¡ ³ª¿Ô´ø
½ºÇÁ¶óÀÌÆ®µéÀÌ ÀÖ°í Test2.Bmp ¿¡´Â ¿ª½Ã ÇÊÀÚ°¡ ¸¸µé¾ú´ø ´ëº¯
ÆÄÀÌÅÍÀÇ ¹è°æ ȸéÀÌ µé¾î ÀÖ´Ù. ( ÀÌ ±×¸²µéÀº ¸ðµÎ °øµ¿
Á¦ÀÛÀÚ¿´´ø ³×Åä
( ¹Ú¼ºÁø : NeoTouch )°¡ Á¦ÀÛÇÑ ±×¸²µéÀÌ´Ù. )
ÀÌÀü¿¡ DrawScreen ÀÇ ÄÚµå´Â ¸ðµÎ »èÁ¦´ÙÀ½ÀÇ °ÍÀ¸·Î ±³Ã¼ÇÑ´Ù.
| procedure TBasic.DrawScreen;
| begin
|
repeat
| until
MakeItSo(BackBuffer.BltFast(random(600),random(400),Image[1],
|
Rect(0,26,52,95),DDBLTFAST_SRCCOLORKEY));
|
end;
¼³¸íÀº µÚ·Î ¹Ì·ç°í ¿ì¼± ½ÇÇàºÎÅÍ ½ÃÄѺ¸ÀÚ. ¾Æ¸¶ '´ëº¯ ÆÄÀÌÅÍ'ÀÇ ³×Åä°¡
ȸ鿡 ·£´ýÀ¸·Î ÂïÈú
°ÍÀÌ´Ù. ¿©±â¼ ÁÖ¸ñÇØ¾ß ÇÒ Àç¹ÌÀÖ´Â Á¡À̶ó¸é, ºñµð
¿À ·¥ÀÌ 1M ÀÎ Ä«µå¿Í 2M ÀÎ Ä«µå°¡ °¢°¢ ´Ù¸¥ °á°ú¸¦ ³ªÅ¸³½´Ù´Â
°ÍÀÌ´Ù.
ÇÑ È¸éÀ» Ç¥½ÃÇÒ ¼ö ÀÖ´Â ¸Þ¸ð¸®ºÎÅÍ ¿ì¼± °è»êÇØ º¸ÀÚ. 640 * 480 * 3 À»
Çϸé
921,600 bytes °¡ ÇÊ¿äÇÏ´Ù´Â °è»êÀÌ ³ª¿Â´Ù. 1024 ·Î ³ª´©¾î º¸¸é °á
±¹ 900 KB °¡ µç´Ù´Â ¾ê±âÀÌ´Ù. ±×·¯¹Ç·Î
ºñµð¿À ·¥ ¿ë·®ÀÌ 1M ¶ó¸é primary
´Â ºñµð¿À ¸Þ¸ð¸®°¡ µÇÁö¸¸ ¹é ¹öÆÛ´Â ºñµð¿À ¸Þ¸ð¸® ºÎÁ·À¸·Î ÀÏ¹Ý RAM ¿µ
¿ª¿¡
»ý¼ºÀÌ µÇ°í °á±¹ Flip À̶ó´Â °úÁ¤Àº ¹é ¹öÆÛ¸¦ primary ·Î º¹»ç¸¦ ÇÏ
´Â °ÍÀÌ µÈ´Ù. µû¶ó¼ ³×ÅäÀÇ À̹ÌÁö´Â µµ½º ¶§ °¡»ó
¹öÆÛ¸¦ ¾²´Â °Íó·³ ÀÌ
¹ÌÁö°¡ ȸ鿡 Ãß°¡ µÇµíÀÌ ÂïÈ÷°Ô µÈ´Ù.
ÇÏÁö¸¸ ºñµð¿À ·¥ÀÌ 2M ÀÌ»óÀ̶ó¸é 900 KB Â¥¸® µÎ °³ÀÇ Ç¥¸éÀÌ ¸ðµÎ ºñµð
¿À ·¥ »ó¿¡ È®º¸°¡
µÇ°í Flip À̶ó´Â °úÁ¤Àº ±×·¡ÇÈ ½ÃÀÛ ÁÖ¼Ò¸¦ ¹Ù²Ù¾î ÁÖ
´Â Çü½ÄÀÌ µÇ¾î µÎ ȸéÀÌ °¢°¢ À̹ÌÁö°¡ ÂïÈ÷¸ç ºü¸¥ ÀüȯÀÌ ÀϾ´Â
°Íó
·³ º¸ÀÌ°Ô µÈ´Ù. ( ÇÊÀÚµµ óÀ½¿£ À̷и¸À¸·Î ¾Ë°í ÀÖ´ø °ÍÀ̶ó Á÷Á¢ µý ±×
·¡ÇÈ Ä«µå¿¡¼ ´«À¸·Î È®ÀÎ ÇÏ°í¼¾ß ÀÌ ±ÛÀ»
ÀÚ½ÅÀÖ°Ô ÀûÀ» ¼ö ÀÖ¾ú´Ù. )
±×·³.. óÀ½ ³ª¿Â DX ÇÔ¼öÀÎ BltFast ¿¡ ´ëÇؼ ¼³¸íÇÏ°Ú´Ù.
ÀÌ ÇÔ¼ö´Â º¹»çÇÒ À̹ÌÁöÀÇ
Åõ¸í»ö ¶Ç´Â º¹»çµÇ´Â °÷ÀÇ Åõ¸í»ö¿¡ µû¶ó ºí·Ï
Àü¼ÛÀ» ÇàÇÏ´Â ÇÔ¼öÀÌ´Ù. ±×¸®°í Ç×»ó 1 : 1 »çÀÌÁî·Î Àü¼ÛÇÏ´Â Á¡°ú Ŭ¸®ÇÎ
ÀÌ
µÇÁö ¾Ê´Â´Ù´Â Á¡ÀÌ Blt ÇÔ¼ö¿Í Å©°Ô ´Ù¸¥ Á¡À̸ç ÀÌ·Î ÀÎÇØ ¾ò´Â ¼ÓµµÀÇ
À̵æÀº 10% Á¤µµ¶ó°í ¾Ë·ÁÁ® ÀÖ´Ù. ÇÏÁö¸¸ Çϵå¿þ¾î °¡¼ÓÀÌ
»ç¿ëµÉ °æ¿ì¿¡´Â
µÎ °¡ÁöÀÇ ¼ÓµµÂ÷ÀÌ´Â ¾ø´Ù.
ÇÔ¼öÀÇ ¿øÇüÀº function BltFast(DWORD, DWORD, var
IDirectDrawSurface,
TRect, DWORD) : HResult; ÀÌ´Ù. óÀ½ÀÇ DWORD ´Â ÂïÇôÁú (x,y) ÁÂÇ¥ÀÌ°í
´Ù
À½ÀÇ Àμö´Â ¿øº» À̹ÌÁö°¡ Àִ ǥ¸é, ±× ´ÙÀ½Àº ¿øº» À̹ÌÁöÀÇ TRect ÇüÀÇ
»ç°¢ ±¸°£, ±×¸®°í ¸¶Áö¸·ÀÇ DWORD ´Â
Àü¼ÛÇϴ ŸÀÔÀ» ¼³Á¤ÇÏ´Â ºÎºÐÀÌ´Ù.
< Àü¼Û ŸÀÔ >
DDBLTFAST_DESTCOLORKEY
: Àü¼ÛµÉ °÷ÀÇ Åõ¸í»öÀ»
Àû¿ëÇÑ´Ù.
DDBLTFAST_NOCOLORKEY
: Åõ¸í»ö ¾øÀÌ ±×³É
Âï´Â´Ù.
DDBLTFAST_SRCCOLORKEY
: Àü¼ÛÇÏ´Â °÷ÀÇ Åõ¸í»öÀ»
Àû¿ëÇÑ´Ù.
DDBLTFAST_WAIT
: ¸¸¾à ÇÔ¼ö¿¡¼ ¿¡·¯ ¶Ç´Â ´ë±â°¡ ¹ß»ýÇÏ´õ¶óµµ °è¼Ó
½ÇÇàÇÑ´Ù.
------------------------------------------------------------------------
(4) ¿ì¸®°¡ ȸ鿡 ÂïÀ» µÎ¹ø° À̹ÌÁö
¿ì¸®°¡ óÀ½ ÂïÀº À̹ÌÁö´Â ±×·¡ÇÈ Ä«µåÀÇ ¸Þ¸ð¸®¿¡ µû¸¥ Flip ¹æ¹ýÀ» ³ªÅ¸
³» ÁÖ´Â ¼öÁØ¿¡
ºÒ°úÇß´Ù. ±×¸®°í ±âº»ÀûÀÎ ºí·Ï Àü¼Û ÇÔ¼öÀÎ BltFast ¿¡ ´ë
Çؼµµ ´Ù·ç¾î º¸¾Ò´Ù. À̹ø¿¡ ÂïÀ» À̹ÌÁö ¿ª½Ã º°·Î »õ·Î¿ï °Ô ¾ø´Â
°ÍÀ¸
·Î¼, Blt ÇÔ¼ö·Î À̹ÌÁö¸¦ È®´ëÇØ º¸´Â ¿¹Á¦¸¦ ¸¸µé¾î º¸°Ú´Ù.
| procedure TBasic.DrawScreen;
| begin
|
repeat
| until MakeItSo(BackBuffer.Blt(
|
Rect(0,0,random(52*3)+52,random(95*3)+95),Image[1],
|
Rect(0,26,52,95),DDBLT_KEYSRC,PDDBLTFX(nil)^));
|
end;
ÀÌÀüÀÇ DrawScreen ÇÔ¼ö¸¦ ÀÌ·¸°Ô ´Ù½Ã ¹Ù²Ù¾î ½á º¸ÀÚ. ÀÌ°ÍÀ» ½ÇÇà ½ÃÅ°
¸é ³×ÅäÀÇ
±×¸²ÀÌ °¡·Î ¼¼·Î ºÒ±ÔÄ¢ÇÑ ÇüÅ·Π´Ã¾î³ª¼ ÂïÈú °ÍÀÌ´Ù. ÀÌ·±
±â´ÉÀº BltFast ¿¡´Â ¾ø¾ú´Ù. ±×·¡¼ Blt ÇÔ¼ö¿¡¼´Â
BltFast °¡ ÂïÈú °÷ÀÇ
(x,y) ÁÂÇ¥¸¸À» ³Ñ°Ü ÁÖ´Â °Í¿¡ ¹ÝÇØ ÀÌ ÇÔ¼ö´Â °¡·Î ¼¼·Î ±æÀÌ Á¤º¸±îÁö ´ã
À» ¼ö ÀÖ´Â
TRect ÇüÀ¸·Î ÂïÈú °÷ÀÇ ÁÂÇ¥¸¦ ³Ñ°Ü ÁÖ°Ô µÈ´Ù. ±×·¯¸é ¾Ë¾Æ¼
À̹ÌÁö¸¦ ¿ø·¡ °Í¿¡¼ ´ÃÀ̰ųª ÁÙ¿©¼ ±× »ç°¢Çü¿¡ ÀÚµ¿À¸·Î ¸ÂÃß¾î
ÁØ´Ù.
BltFast ¿¡¼ DDBLTFAST_SRCCOLORKEY ¿¡ ÇØ´çÇÏ´Â °ÍÀº DDBLT_KEYSRC ÀÌ´Ù.
ÂïÈú °÷ÀÇ
Åõ¸í»öÀ» Àû¿ëÇÏ·Á¸é DDBLT_KEYDEST ¸¦ »ç¿ëÇÏ¸é µÈ´Ù. Blt ÀÇ Àü
¼Û ŸÀÔ ¼³Á¤Àº ²Ï³ª ¸¹À¸´Ï °¢ÀÚÀÇ Ã¥À̳ª Help ¸¦
Âü°íÇϱ⠹ٶõ´Ù. ±×¸®
°í ¸¶Áö¸·¿¡ ³Ö¾îÁÖ´Â Àμö´Â TDDBLTFX Çü º¯¼öÀÇ ÁÖ¼Ò¸¦ ³Ñ°ÜÁÖ´Â °ÍÀÌÁö¸¸
¿ì¸®´Â ÀÌ Á¤º¸¸¦ ÇÊ¿ä·Î
ÇÏÁö ¾ÊÀ¸¹Ç·Î nil ÀÌ ´ã°ÜÁø º¯¼ö¸¦ ³Ö¾î¾ß ÇÑ´Ù.
ÇÏÁö¸¸ ¹Ù·Î nil À» ¾²¸é ÆĽºÄ®ÀÇ °·ÂÇÑ Å¸ÀÔ Ã¼Å© ´öºÐ¿¡ ¿¡·¯¸¦
³»°í¸¸
´Ù. ±×·¡¼ Æí¹ýÀ» µ¿¿øÇÏ¿© nil À» TDDBLTFX ÇüÀÇ Æ÷ÀÎÅͶó°í ¼ÓÀÎ ÈÄ '^'
·Î º¯¼ö°¡ ÀÖ´Â °Íó·³ ¸¸µé¾î
³½´Ù. ÇÊÀÚ´Â ÁÖ·Î ÀÌ·± ¹æ¹ýÀ¸·Î ÄÄÆÄÀÏ·¯¸¦
¼ÓÀÌÁö¸¸(?) ÀÌ°ÍÀÌ Á¤È®ÇÑ ¹æ¹ýÀÎÁö´Â ¾Ë ¼ö°¡ ¾ø´Ù. ÃÖ¼ÒÇÑ ¿¡·¯´Â ¾È³ª´Ï
¹®Á¦´Â
¾øÀ» µí ½Í´Ù.
#####################################################
ÇÏÀÌÅÚ °ÔÀÓ Á¦ÀÛ µ¿È£È¸ ( GO GMA )
------------------------------------------------------------------------
###
DIRECT X Æ®·çÄ÷¯ °ÔÀÓ (5) - °ÔÀÓÀ» À§ÇÑ ±âº» Ŭ·¡½º
±¸¼º(1)
------------------------------------------------------------------------
ÀÛ¼ºÀÚ
: ¾È¿µ±â ( HiTEL ID : SMgal )
ÀÌÁ¦±îÁö ´Ù·é °ÍÀº DX ¿¡¼ ±âº»Àû·Î ÇÏ¿©¾ß ÇÒ ¸ðµç ºÎºÐÀ» ¸ðµÎ ¾ð±ÞÇß´Ù
°í º»´Ù. ( ¹°·Ð
¼ö¹Ú °ÑÇӱ⠽ÄÀ¸·Î ³Ñ¾î°¬Áö¸¸ ÀÚ¼¼ÇÑ °øºÎ¿¡ ´ëÇÑ Ã¥ÀÓÀº
¿©·¯ºÐµé¿¡°Ô ÀÖ´Â °ÍÀÌ´Ù. )
À̹øÀÇ °Á´ ¿ø·¡ÀÇ °ÀÇ °èȹ¿¡µµ ¾ø¾ú°í °ÀÇ ÃëÁö¿¡µµ ¸ÂÁö ¾Ê´Â ºÎºÐ
ÀÌÁö¸¸ ´ÙÀ½ ºÎºÐ °ÀÇ·Î
³Ñ¾î°¡±â À§Çؼ´Â ²À ÀÖ¾î¾ß ÇÑ´Ù°í »ý°¢Çϱ⿡ ÀÌ
·¸°Ô '5Àå' À̶ó´Â ºÎºÐÀ¸·Î ÇÒ´çÀ» Çß´Ù.
´Ù¸§ÀÌ ¾Æ´Ï¶ó Á¦¸ñ°ú °°ÀÌ '°ÔÀÓ Å¬·¡½º' ±¸¼ºÀÌ´Ù. µµ½º¶§³ª À©µµ¿ì¶§³ª
DX ¶§³ª ¸Õ
¹Ì·¡¿¡¼³ª... ¸ðµÎ À̹ø¿¡ ÀÛ¼ºÇÒ Å¬·¡½º¿Í °°Àº °ÍÀ» ¸¸µé¾î¾ß
Çϱ⶧¹®¿¡ °ÔÀÓ Å¬·¡½º ±¸¼º¿¡ ´ëÇÑ ÀÌÇظ¦ µ½°íÀÚ °£´ÜÇÏ°Ô ³ª¸¶ ÇÊÀÚ°¡
¶Ò
µü °Å·Á º» °ÍµéÀÌ´Ù.
À̹ø¿¡´Â »õ·Î¿î À¯´ÖÀÌ Çϳª ÇÊ¿äÇÏ°Ô µÈ´Ù. ÀÌ Å¬·¡½ºµéÀ» Á¤ÀÇÇÏ°í ±×°Í
¿¡ µû¸¥ ¸Þ¼ÒµåÀÇ Äڵ嵵 ÇÔ²²
µé¾î°¡´Â À¯´ÖÀÌ´Ù.
------------------------------------------------------------------------
(1) ´Ù¼¸¹ø° ÇÁ·ÎÁ§Æ®ÀÇ ½ÃÀÛ
¸ÕÀú ÀÌÀü¿¡ Á¦ÀÛÇÑ DX24Bit4.Dpr À» ÀÐ¾î µéÀδÙ. Save Project As ¸¦
¼±
ÅÃÇÏ¿© ÀúÀå½Ã¿¡ À̸§À» DX24Bit5.Dpr ·Î ¹Ù²Û´Ù. Save As ·Î MainUnt4.Pas
µµ
MainUnt5.Pas ·Î ¹Ù²Û´Ù.
File ¸Þ´º¿¡¼ New ¸¦ ¼±ÅÃÇÏ°í ´Ù½Ã Unit ¸¦ ¼±ÅÃÇÏ¿© »õ·Î¿î À¯´ÖÀ» Çϳª
»ý¼ºÇÑ´Ù. ¾Æ¸¶µµ
¼³··ÇÑ ¸î ÁÙÀÇ Äڵ常ÀÌ ³ªÅ¸³¯ °ÍÀÌ´Ù.
¸ÕÀú ÀÌ À¯´ÖÀ» MainUnt5.Pas ¿¡ ¿¬°áÇϱâ À§Çؼ MainUnt5.Pas ÀÇ ¼Ò½ºÀÇ
À¯´Ö
¼±¾ð ºÎºÐ¿¡ SubUnit5 ¸¦ Ãß°¡ÇÑ´Ù.
´ÙÀ½¿¡´Â SubUnit5.Pas ºÎºÐ¿¡¼ MainUnt5.Pas ¸¦ ¼±¾ðÇϱâ À§Çؼ À¯´Ö ¼±
¾ð
ºÎºÐÀ» °íÃÄ¾ß Çϴµ¥... ²À implementaion ºÎºÐ¿¡ uses MainUnt5; ¸¦ ÇØ
¾Ö¸¸ ÇÑ´Ù. ±×·¸Áö ¾ÊÀ¸¸é
Circular Reference ¿¡ °É¸®±â ¶§¹®ÀÌ´Ù. ( ÀÌ ºÎ
ºÐÀº ÆĽºÄ®ÀÇ À¯´Ö ±¸Á¶ÀÇ Æ¯¼º ¶§¹®À̱⠶§¹®¿¡ C À¯Àú´Â ±íÀÌ ¾Ë
ÇÊ¿ä´Â
¾øÀ» °Í °°´Ù. Âü°í·Î C ´Â ÀÌ·± °ÍÀ» extern À¸·Î ÇØ°áÇÑ´Ù. )
±×¸®°í SubUnit5.Pas ÀÇ interface ºÎºÐ¿¡ ¾Æ·¡ÀÇ °ÍÀ» Ãß°¡ÇÑ´Ù.
| uses
| Windows, DDraw;
ÀÌ·¸°Ô ÇÏ¸é »õ·Î¿î À¯´Ö¿¡ ´ëÇÑ ¸ðµç ±âº»ÀûÀÎ ¼±¾ðÀº ³¡³ª°Ô µÈ´Ù.
------------------------------------------------------------------------
(2) SubUnit5.Pas ¿¡ ¾²ÀÏ Å¸ÀÔ°ú »ó¼ö ¼±¾ð
| type
| TTileInfo = (tiFireBall,
tiFlame, tiEnergyBall, tiNeTo1, tiNeTo2,
|
tiDemon);
|
| const
| TileInfo : array[TTileInfo]
of TRect = (
| (Left : 0; Top : 0; Right : 27; Bottom :
11),
| (Left : 30; Top : 0; Right : 70; Bottom : 22),
|
(Left : 73; Top : 0; Right : 84; Bottom : 11),
| (Left :
0; Top : 26; Right : 52; Bottom : 95),
| (Left : 56; Top : 26;
Right : 108; Bottom : 95),
| (Left : 7; Top : 99; Right : 257;
Bottom : 369)
| );
À§ÀÇ Å¸ÀÔ°ú »ó¼ö ÁöÁ¤Àº image[1]¿¡ ÀúÀåµÈ ºñÆ®¸Ê ±×¸²¿¡ ´ëÇÑ °æ°è ¿µ¿ª
ÀÇ ÁöÁ¤ÀÌ´Ù. 6
°³ÀÇ Å¸ÀÏ Á¤º¸¿¡ ´ëÇÑ °æ°è ÁÂÇ¥´Â ÇÊÀÚ°¡ µð·°½º ÆäÀÎÅÍ¿¡
¼ ³ë°¡´Ù·Î ¾Ë¾Æ³½ ÁÂÇ¥µéÀÌ´Ù. ( ^_^ )
°¢°¢ÀÇ enum Çü ŸÀÏ¿¡ ´ëÇÑ ¼³¸íÀº ´ÙÀ½°ú °°´Ù.
tiFireBall : ³×Åä°¡ ¹ß»çÇÏ´Â È¿°Åº
tiFlame : ³×ÅäÀÇ
ÇÊ»ì±âÀÎ ÆĶõ ºÒ²É
tiEnergyBall : Àû º¸½º°¡ ¹ß»çÇÏ´Â ÀÛÀº ¿¡³ÊÁö ±¸
tiNeTo1 : ³×ÅäÀÇ
±×¸² ÇÁ·¹ÀÓ 1
tiNeTo2 : " " " 2
tiDemon : Àû
º¸½ºÀÇ ±×¸² ( °Å´ë ij¸¯ÅÍÀÓ.. )
Âü°í·Î tiDemon ÀÇ ±×¸²Àº ÇÊÀÚÀÇ °ÔÀÓÀÎ '´ëº¯ ÆÄÀÌÅÍ'¿¡¼´Â ¿ë·® ¹®Á¦·Î
»ó¹Ý½Å¸¸ ³ª¿Ô´ø
ºÒ¿ìÇÑ Ä³¸¯ÅÍÀÌÁö¸¸ À̹ø¿¡´Â º» ¸ð½ÀÀ» µå·¯³½´Ù. ±â´ëÇÏ
¼Åµµ ÁÁÀ» °ÍÀÌ´Ù.. ÈÄÈÄ..
1) TCharacter Á¤ÀÇ
| type
|
| PCharacter =
^TCharacter;
| TCharacter = object
|
| constructor
create(number : TTileInfo; x, y, HP : integer);
| destructor
destroy;
| procedure DisplaySelf; virtual;
| function
DoAction : boolean; virtual;
|
| private
| m_number :
TTileInfo;
| m_x_size : integer;
| m_y_size :
integer;
| m_x, m_y : integer;
| m_sx, m_sy : real;
|
m_HP : integer;
| m_Tile : TRect;
| procedure
setmX (x : integer);
| procedure setmY (y : integer);
|
procedure setmSX(x : real);
| procedure setmSY(y :
real);
|
| public
| property mNumber : TTileInfo read
m_number write m_number;
| property mXSize : integer read
m_x_size write m_x_size;
| property mYSize : integer read
m_y_size write m_y_size;
| property mX : integer read m_x
write setmX;
| property mY : integer read m_ywrite
setmY;
| property mSX : real read m_sx write
setmSX;
| property mSY : real read m_sy write
setmSY;
| property mHP : integer read m_HP write
m_HP;
| property mTile : TRect read m_Tile write
m_Tile;
|
| end;
ÀÌ°ÍÀÌ ¹Ù·Î ¸ðµç ij¸¯ÅÍÀÇ ÃÖ°í ¼±Á¶( superclass ) ÀÎ TCharacter ÀÌ´Ù.
°¢°¢ÀÇ
¼³¸íÀº ´ÙÀ½°ú °°´Ù.
constructor create(number : TTileInfo; x, y, HP :
integer);
: »ý¼ºÀÚÀÌ´Ù. ŸÀÏ Á¤º¸¿Í»ý¼º½Ã (x,y) ¿Í ü·ÂÀ» Àμö·Î ¹Þ´Â´Ù.
destructor destroy;
: ¼Ò¸êÀÚÀÌ´Ù. ¿©±â¼´Â Äڵ尡 ÇÊ¿ä ¾ø°í ´Ù¸¸
°¡»ó ¸Þ¼Òµå Å×À̺íÀ»
Á¦°ÅÇÏ´Â Á¤µµÀÇ ±â´É¸¸À» ÇÒ °ÍÀÌ´Ù.
procedure DisplaySelf; virtual;
: ÀÚ½ÅÀ» ȸ鿡
Ç¥½ÃÇÑ´Ù. virtual ·Î ¼±¾ðµÇ¾î¼ Èļտ¡¼ ÀçÁ¤ÀÇ°¡
°¡´ÉÇÏ°Ô µÇ¾î ÀÖ´Ù.
function DoAction : boolean; virtual;
: ±×
ij¸¯ÅÍ°¡ ÇÏ´Â ¸ðµç ÇൿÀ» ÇÏ°Ô ÇÑ´Ù. FALSE °¡ ¸®ÅÏµÈ´Ù¸é ±×
ij¸¯ÅÍ°¡ ¼Ò¸êµÇ¾î¾ß ÇÏ´Â Á¶°ÇÀÓÀ» ¾Ë·ÁÁØ´Ù. ¿ª½Ã
virtual ·Î ¼±
¾ðµÇ¾ú±â ¶§¹®¿¡ Èļտ¡¼ ÀçÁ¤ÀÇ°¡ °¡´ÉÇÒ »Ó¸¸ ¾Æ´Ï¶ó ¹«Á¶°Ç Àç
Á¤ÀÇ µÇ¾î¾ß
ÇÏ´Â ÇÔ¼öÀÌ´Ù.
±×·³ À̹ø¿¡´Â public ¼±¾ð ºÎºÐÀÌ´Ù. ¿©±â´Â ¸ðµÎ private ºÎºÐÀÇ Çʵåµé
À» Á¦¾îÇϱâ
À§ÇÑ property µé·Î ±¸¼ºµÇ¾î ÀÖ´Ù.
property mNumber : TTileInfo read m_number write
m_number;
: m_number ¸¦ ¹Ù·Î ÀÐ°í ¾²´Â property ÀÌ´Ù. m_number ´Â ÀÚ½ÅÀÇ
Ÿ
ÀÏ Á¤º¸¸¦ ¾Ë ¼ö ÀÖ´Â TTileInfo Çü º¯¼öÀÌ´Ù.
property mXSize : integer read m_x_size write
m_x_size;
property mYSize : integer read m_y_size write
m_y_size;
: ÀÚ½ÅÀÇ X ¿Í Y ±æÀ̸¦ integer ÇüÀ¸·Î ÁöÁ¤ÇÏ´Â º¯¼öÀÎ m_x_size
¿Í
m_y_size ¸¦ ÀÐ°í ¾²°Ô ÇÏ´Â property ÀÌ´Ù.
property mX : integer read m_x write
setmX;
property mY : integer read m_y write
setmY;
: ÇöÀçÀÇ È¸é »óÀÇ ÀÚ½ÅÀÇ ÁÂÇ¥ÀÎ (m_x,m_y) ¿¡ ´ëÇÑ Á¤º¸¸¦ ÀÐ°í ¾²
´Â
property ·Î, ÀÐÀ» ¶§´Â ¹Ù·Î º¯¼ö¿¡ Á¢±ÙÇÏÁö¸¸ ¾µ ¶§´Â setmX
¿Í setmY¸¦½ÇÇà½ÃŲ´Ù. ±× ÇÔ¼öµéÀº
m_x ¿Í m_y °¡ ºÒ°¡´ÉÇÑ °÷¿¡
ÁöÁ¤µÇÁö ¾Ê°Ô ÇÏ´Â ±â´ÉÀ» °¡Áö°í ÀÖ´Ù.
property mSX : real read m_sx write
setmSX;
property mSY : real read m_sy write
setmSY;
: ÇöÀçÀÇ È¸é»óÀÇ ÀÚ½ÅÀÇ ÁÂÇ¥¿¡ ´ëÇÑ real ÇüÀÇ Á¤È®ÇÑ Á¤º¸¸¦ °¡Áö
°í ÀÖ´Â µÎ °³ÀÇ
º¯¼öÀÎ m_sx ¿Í m_sy ¸¦ ÀÐ°í ±â·ÏÇÑ´Ù. ³ªÁß¿¡ ÈÄ
¼Õ¿¡¼ Á¤ÀǵǴ ¼Óµµ¿Í °¡¼Óµµ¿¡ ´ëÇÑ °ÍÀ» °í·ÁÇϱâ À§ÇØ ¸¸µç
°Í
À¸·Î½á, ¿©±â¼ real °ªÀ¸·Î ÁöÁ¤ÇÏ´õ¶óµµ Ç×»ó m_x ¿Í m_y ¿¡ Á¤¼ö
ÇüÀ¸·Î ¿µÇâÀ»
¹ÌÄ£´Ù. setmSX ¿Í setmSY ´Â À§ÀÇ ¿¹¿Í °°´Ù.
property mHP : integer read m_HP write
m_HP;
: ÇöÀç ÀÚ½ÅÀÇ Hit Point ( <- ´Ù¿ëµµ·Î »ç¿ë °¡´É ) ¸¦ °¡Áö°í
ÀÖ´Â
Á¤¼öÇü º¯¼öÀÎ m_HP ¿¡ ´ëÇØ ÀÐ°í ¾²´Â property ÀÌ´Ù.
property mTile : TRect read m_Tile write
m_Tile;
: ÀÚ½ÅÀÇ ¿øÇü À̹ÌÁö°¡ ÀÖ´Â image[1] »ó¿¡¼ÀÇ TRect Çü ÁÂÇ¥¸¦ ±â
¾ïÇÏ´Â
m_Tile À» ÀÐ°í ¾²´Â º¯¼öÀÌ´Ù.
2) ±×·³ ´ÙÀ½¿¡´Â TCharacter ·ÎºÎÅÍ ÆÄ»ýµÈ TObjects ¿¡ ´ëÇؼ
³íÇغ¸ÀÚ.
¿ª½Ã type ºÎºÐ¿¡ °è¼ÓÇؼ ¾²¸é µÈ´Ù.
| PObjects = ^TObjects;
| TObjects =
object(TCharacter)
|
| constructor create(number : TTileInfo; x, y,
HP : integer;
| vx, vy, ax, ay : real);
|
destructor destroy;
| function DoAction : boolean;
virtual;
|
| private
| m_vx, m_vy : real;
| m_ax,
m_ay : real;
|
| public
| property mVX : real read m_vx
write m_vx;
| property mVY : real read m_vy write m_vy;
|
property mAX : real read m_ax write m_ax;
| property mAY :
real read m_ay write m_ay;
|
| end;
TObjects = object(TCharacter) ¶ó´Â ºÎºÐ¿¡¼ ¾Ë ¼ö ÀÖµíÀÌ TObjects
°´Ã¼
´Â TCharacter ÀÇ ¸ðµç °ÍÀ» »ó¼Ó ¹Þ´Â´Ù. ÀÌ °´Ã¼ÀÇ ¾²ÀÓÀº ÁÖ·Î ºÒ¶ËÀ̳ª
¿¡³ÊÁö º¼ °°ÀÌ Ã¢Á¶ÀÚ¿¡°Ô¼ ¶³¾îÁ®
³ª°¡ ÀÚ¿¬ÀÇ ¿îµ¿ ¹ýÄ¢¿¡ ÀÇÇØ ÇൿÀÌ
°áÁ¤µÇ´Â °´Ã¼µé¿¡°Ô Àû¿ëµÈ´Ù.
constructor create(number : TTileInfo; x, y, HP :
integer;
vx, vy, ax, ay : real);
: »ý¼ºÀÚ¿¡¼´Â À§ÀÇ
TCharacter ¿Í´Â ´Þ¸® Ãʱ⠼ӵµ¿Í Ãʱ⠰¡¼Óµµ
¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ´Â º¯¼ö°¡ µµÀԵǾú´Ù. ³ª¸ÓÁö Ư¼ºÀº ¸ðµÎ
¼±Á¶¿Í
°°Àº °³³äÀ¸·Î »ç¿ëµÈ´Ù.
DoAction Àº ¿ª½Ã ÀçÁ¤ÀÇ µÇ¾ú°í ( DoAction Àº Èļտ¡¼ ¹«Á¶°Ç ÀçÁ¤ÀÇ ÇØ
¾ß ÇÏ´Â
ÇÔ¼ö.. ), DisplaySelf ¶ó´Â °ÍÀº ¼±Á¶ÀÇ °ÍÀ» ±×´ë·Î »ç¿ëÇϱâ À§
Çؼ ¿©±â¼´Â ÀçÁ¤ÀÇ µÇÁö ¾Ê¾Ò´Ù.
property mVX : real read m_vx write
m_vx;
property mVY : real read m_vy write m_vy;
property mAX
: real read m_ax write m_ax;
property mAY : real read m_ay write
m_ay;
: À̰͵éÀº ¸ðµÎ ¼Óµµ (m_vx, m_vy) ¿Í °¡¼Óµµ (m_ax, m_ay) ¸¦
À§ÇÑ
property ·Î¼ ±×´ë·Î º¯¼ö¸¦ ÀÐ°í ¾²°Ô µÈ´Ù.
3) À̹ø¿¡´Â ¶Ç TObjects ¿¡¼ ÆÄ»ýµÈ µÎ °³ÀÇ Å¬·¡½º¸¦ º¸ÀÚ.
TEnemy ´Â Àû
º¸½º¸¦ Á¤ÀÇÇÑ °ÍÀÌ°í EFriend ´Â ¾Æ±º ( ³×Åä ) À» Á¤ÀÇÇÑ °Í
ÀÌ´Ù.
| PEnemy = ^TEnemy;
| TEnemy =
object(TObjects)
|
| constructor create(number : TTileInfo; x, y,
HP : integer);
| destructor destroy;
| function DoAction
: boolean; virtual;
|
| end;
|
| PFriend = ^TFriend;
|
TFriend = object(TObjects)
|
| constructor create(number :
TTileInfo; x, y, HP : integer);
| destructor destroy;
|
procedure DisplaySelf; virtual;
| function DoAction :
boolean; virtual;
|
| private
| FShapeCount : integer;
|
FShapeDelay : integer;
|
| end;
TEnemy ´Â TObjects ¿¡¼ »ó¼ÓÀ» ¹ÞÁö¸¸ ´Ù¸¥ Á¡À̶ó°í´Â DoAction À» ÀûÀÇ
ÆÐÅÏ¿¡
¸Â°Ô ÀçÁ¤ÀÇ ÇÑ °Í»ÓÀÌ´Ù.
TFriend ¿ª½Ã Àڽſ¡ ¸Â°Ô ( Å°º¸µå ÀԷµî. ) DoAction À» ÀçÁ¤ÀÇ Çß°í ÀÚ
½ÅÀÇ
³¯°³¿¡ ´ëÇÑ 2 ÇÁ·¹ÀÓ ¶§¹®¿¡ Ãâ·Â ·çƾÀÎ DisplaySelf µµ ÀçÁ¤ÀÇ Çß´Ù.
FShapeCount ¿Í FShapeDelay °¡ °¢°¢
ÇÁ·¹ÀÓ¿¡ ´ëÇÑ Ä«¿îÆ®¿Í µô·¹ÀÌÀÌ´Ù.
ÀÌ º¯¼ö´Â ĸ½¶È¿¡ ´ëÇÑ º¸¾ÈÀÌ ÇÊ¿äÇÏÁö ¾Ê´Â ´Ü¼ø º¯¼öÀ̹ǷΠproperty¸¦
»ç¿ëÇÏÁö ¾Ê°í
¹Ù·Î Á¢±ÙÇϵµ·Ï ¸¸µé¾ú´Ù.
------------------------------------------------------------------------
(3) SubUnit5.Pas ¿¡ ¾²ÀÏ º¯¼ö¿Í ÇÔ¼ö ¼±¾ð
| const
| MAX_CHARACTER = 50;
|
var
| Objects : array[1..MAX_CHARACTER] of PCharacter;
¿©±â Objects ¶ó´Â ¹è¿ º¯¼ö¿¡ ÀÌÁ¦ ¸ðµç °ÔÀÓÀÇ °´Ã¼°¡ ¼±¾ðµÇ°Ô µÈ´Ù.
°´Ã¼ÀÇ ÃÖ°í °³¼ö´Â
º¸´Â ¹Ù¿Í °°ÀÌ 50 °³À̸ç PCharacter ·Î ¼±¾ðµÇ¾ú±â ¶§
¹®¿¡ TCharacter ¿Í ±× ÈļÕÀ̶ó¸é ¾î¶² ÇüÀ¸·Îµµ Á¤ÀÇ°¡
°¡´ÉÇÏ´Ù.
| implementation
|
| uses
|
MainUnt4;
¾Õ¿¡¼ ¸»ÇÑ Circular Reference ¸¦ ¸·À¸¸é¼ MainUnt4.Pas ¿Í °áÇÕÇϱâ À§
ÇÑ
ÄÚµåÀÌ´Ù.
| function GetFreeObjects(var number : integer)
: boolean;
| var
| i : integer;
| begin
| for i := 1 to
MAX_CHARACTER do begin
| if objects[i] = nil then begin
|
number := i;
| getFreeObjects := TRUE;
|
exit;
| end;
| end;
| getFreeObjects :=
FALSE;
| end;
ÀÌ ÇÔ¼ö´Â Ŭ·¡½º ¼±¾ð¿¡ ´ëÇÑ ºÎ·Ï ÇÔ¼öÂë µÇ´Â °ÍÀ¸·Î ÇöÀçÀÇ Objects º¯
¼ö¿¡¼ ºñ¾îÀÖ´Â (
Áï, °´Ã¼¸¦ ÇÒ´ç ¹ÞÀ» ¼ö ÀÖ´Â ) °÷À» ã¾Æ¼ ±× ¹øÈ£¸¦
reference ÀμöÀÎ number ¿¡ µ¹·ÁÁØ´Ù. ¸¸¾à 50°³ÀÇ °´Ã¼°¡
¸ðµÎ »ý¼º µÇ¾ú
À¸¸é FALSE ¸¦ ¸®ÅÏÇÑ´Ù.
------------------------------------------------------------------------
(4) TCharacter ÀÇ ¼Ò½º
| constructor TCharacter.create(number :
TTileInfo; x, y, HP : integer);
| begin
| mNumber := number;
|
m_Tile := TileInfo[number];
| m_x_size :=
TileInfo[number].Right-TileInfo[number].Left;
| m_y_size :=
TileInfo[number].Bottom-TileInfo[number].Top;
| mX := x;
|
mY := y;
| mHP := HP;
| m_sx := x;
|
m_sy := y;
| end;
»ý¼ºÀÚ´Â Áö±Ý º¸µíÀÌ ´Ü¼øÇÑ private º¯¼öÀÇ ¼¼Æÿ¡ ±×Ä£´Ù. m_x_size
¿Í
m_y_size ´Â ŸÀÏ Á¤º¸ÀÇ TRect ÇüÀ¸·ÎºÎÅÍ ¾ò¾î³¿À» ¾Ë ¼ö ÀÖ´Ù.
| destructor TCharacter.destroy;
|
begin
| end;
¼Ò¸êÀÚ´Â ¾Æ¹«·± Äڵ嵵 ¾øÁö¸¸ ¼Ò¸êÀÚ¶ó´Â ÀÚü¸¸À¸·Î °¡»ó ¸Þ¼Òµå Å×À̺í
À» ÇØÁ¦Çϱ⠶§¹®¿¡ ÇÊ¿äÇÑ
°ÍÀÌ´Ù.
| procedure TCharacter.setmX(x :
integer);
| begin
| if (x >= 0) and (x + mXSize < MAX_X_LINE)
then begin
| m_x := x;
| m_sx := x;
| end;
|
end;
|
| procedure TCharacter.setmY(y : integer);
| begin
|
if (y >= 0) and (y + mYSize < MAX_Y_LINE) then begin
| m_y
:= y;
| m_sy := y;
| end;
| end;
x ¿Í y ÀÇ ¹üÀ§¸¦ ȸéÀÇ ¹üÀ§·Î Á¦¾ÈÇÑ´Ù. º¸´Â ¹Ù¿Í °°ÀÌ x ¿Í y °¡ ¼¼ÆÃ
µÉ ¶§ real
ÇüÀÎ m_sx ¿Í m_sy µµ °°ÀÌ ¼¼Æõȴٴ Á¡¸¸ ÁÖÀÇÇÏÀÚ.
| procedure TCharacter.setmSX(x : real);
|
begin
| if x < 0 then x := 0;
| if x >= MAX_X_LINE - mXSize
then x := MAX_X_LINE - mXSize - 1;
| m_sx := x;
| m_x :=
Trunc(x+0.5);
| end;
|
| procedure TCharacter.setmSY(y :
real);
| begin
| if y < 0 then y := 0;
| if y >=
MAX_Y_LINE - mYSize then y := MAX_Y_LINE - mYSize - 1;
| m_sy := y;
|
m_y := Trunc(y+0.5);
| end;
ÀÌ°ÍÀº real ÇüÀÎ m_sx ¿Í m_sy ¿¡ ´ëÇÑ ¼¼Æà ÇÔ¼ö·Î¼ ¿ª½Ã Á¤¼öÇüÀÎ m_x
¿Í m_y
¿¡ ¿µÇâÀ» ¹ÌÄ£´Ù. real ÇüÀ» Á¤¼öÇüÀ¸·Î ¹Ù²Ü ¶§ Round (¹Ý¿Ã¸²) ÀÌ
¾Æ´Ñ Trunc (ÀÚ¸§) À» »ç¿ëÇÑ ÀÌÀ¯´Â µ¨ÆÄÀÌ°¡ ¦¼ö
¹Ý¿Ã¸²¿¡ ¹ö±×°¡ ÀÖ´Ù°í
¾Ë·ÁÁ³±â ¶§¹®¿¡ ( ¿¹> Round(12.5) -> 12 ·Î ÆÇ´Ü ) Trunc(r+0.5) ·Î
´ë½Å
ÇÑ °ÍÀÌ´Ù. ( ´Ü, µ¨ÆÄÀÌ 2 ÀÇ ¹ö±×À̹ǷΠµ¨ÆÄÀÌ 3 ¿¡¼´Â °íÃÄÁ³À» °¡´É¼º
µµ.. )
| procedure TCharacter.DisplaySelf;
|
begin
| with Basic do repeat
| until
MakeItSo(BackBuffer.BltFast(mX,mY,Image[1],mTile,
|
DDBLTFAST_SRCCOLORKEY));
| end;
ÀÚ½ÅÀÇ À̹ÌÁö¸¦ ¹é ¹öÆÛ¿¡ Âï´Â ÇÔ¼öÀÌ´Ù. º°·Î ƯÀÌÇÒ °Ç ¾ø´Ù.
| function TCharacter.DoAction;
|
begin
| DoAction := TRUE;
| end;
¾ÆÁ÷Àº Á¤ÀÇ µÇÁö ¾Ê°í Èļտ¡¼ Á¤ÀÇ µÉ ÇÔ¼ö·Î, ÇöÀç´Â Ç×»óTRUE ¸¸ ¸®
ÅÏÇϵµ·Ï
µÇ¾îÀÖ´Ù.
------------------------------------------------------------------------
(5) TObjects ÀÇ ¼Ò½º
| constructor TObjects.create(number :
TTileInfo; x, y, HP : integer;
| vx, vy, ax, ay
: real);
| begin
| inherited create(number,x,y,HP);
| mVX :=
vx; mVY := vy;
| mAX := ax; mAY := ay;
| end;
»ý¼ºÀÚ¿¡¼´Â ¼±Á¶¿¡¼ ¼±¾ðµÈ º¯¼ö¿Í ÀÌ °´Ã¼¿¡¼ ¾²ÀÏ ¼Óµµ, °¡¼Óµµ¿¡ ´ë
ÇÑ Á¤º¸¸¦ ¹Þ´Â´Ù.
inherited ·Î ÀÌÀü ¼±Á¶ÀÇ »ý¼ºÀÚ¸¦±×´ë·Î »ç¿ëÇÏ°í ³ª
¸ÓÁö´Â Á÷Á¢ º¯¼ö¿¡ ´ëÀÔÇÑ´Ù.
| destructor TObjects.destroy;
| begin
|
end;
¿ª½Ã TCharacter ¿Í °°´Ù.
| function TObjects.DoAction;
|
begin
| DoAction := TRUE;
|
| if ((mX + mVX) < 0) or ((mX +
mVX) >= MAX_X_LINE-mXSize) or
| ((mY + mVY) < 0) or ((mY + mVY)
>= MAX_Y_LINE-mYSize) then begin
| DoAction := FALSE;
| end
else begin
| mSX := mSX + mVX;
| mSY := mSY + mVY;
|
mVX := mVX + mAX;
| mVY := mVY + mAY;
| end;
|
end;
TCharacter ´Â ÁÖ·Î ºÒ¶Ë°°Àº °ÍÀ» ó¸®ÇÏ¹Ç·Î È¸é ¹ÛÀ¸·Î »ç¶óÁö°Ô µÇ¸é
°´Ã¼°¡ ¼Ò¸êµÇ´Â
Á¶°ÇÀÌ µÈ´Ù. ±×¸®°í °´Ã¼°¡ À¯È¿ÇÏ´Ù¸é À§Ä¡¿¡ ¼Óµµ¸¦ ´õ
ÇÏ°í, ¼Óµµ¿¡´Â ÇöÀçÀÇ °¡¼Óµµ¸¦ ´õÇÑ´Ù.
#####################################################
ÇÏÀÌÅÚ °ÔÀÓ Á¦ÀÛ µ¿È£È¸ ( GO GMA )
------------------------------------------------------------------------
###
DIRECT X Æ®·çÄ÷¯ °ÔÀÓ (6) - °ÔÀÓÀ» À§ÇÑ ±âº» Ŭ·¡½º
±¸¼º(2)
------------------------------------------------------------------------
ÀÛ¼ºÀÚ
: ¾È¿µ±â ( HiTEL ID : SMgal )
À̹øÀÇ ÀåÀº ¾Õ¿¡¼ ¸ø´ÙÇÑ ºÎºÐÀÇ ¿¬¼ÓÀ¸·Î °ÔÁ¦ÇÏ°Ú´Ù. ÇÏÀÌÅÚ¿¡¼ ÇÑ °Ô
½Ã¹°ÀÇ ¶óÀÎ ÇÑ°è
¶§¹®¿¡ ÀÌ·¸°Ô µÎ ºÎºÐÀ¸·Î ³ª´« °ÍÀÌ´Ù.
±×·³ °è¼Ó ¼³¸íÀ» ÇÏ°Ú´Ù.
------------------------------------------------------------------------
(6) TEnemy ÀÇ ¼Ò½º
| constructor TEnemy.create(number : TTileInfo;
x, y, HP : integer);
| begin
| inherited
create(number,x,y,HP,2,2,0,0);
| end;
»ý¼ºÀÚ´Â TObjects ÀÇ °ÍÀ» ±×´ë·Î »ç¿ëÇÏÁö¸¸ ¼Óµµ´Â 2·Î °¡¼Óµµ´Â 0 À¸·Î
°íÁ¤µÇ¾î ÀÖ´Ù.
¿©±â¼ ¼Óµµ´Â °´Ã¼°¡ Çѹø¿¡ ¿òÁ÷ÀÌ´Â °Å¸®¸¦ ³ªÅ¸³»¸ç °¡
¼Óµµ´Â ¾ÆÁ÷ Á¤ÀÇ µÇÁö ¾Ê¾Ò´Ù. ( °¡¼Óµµ´Â ¿ÜºÎÀÇ Ãæ°ÝÀ̳ª ¹Ù¶÷µî¿¡
ÀÇÇÑ
º¯È ¿ä¼Ò °°Àº °É·Î ¾²¸é µÉ°ÍÀÌ´Ù. È®ÀåÀº ¿©·¯ºÐ¿¡°Ô ¸Ã±ä´Ù. )
| destructor TEnemy.destroy;
| begin
|
end;
¼Ò¸êÀÚÀÌ´Ù..
| function TEnemy.DoAction;
| var
|
i : integer;
| begin
| DoAction := TRUE;
|
| mX := mX +
(random(3)-1);
| mY := mY + (random(3)-1);
|
| if random(10) =
0 then begin
| if GetFreeObjects(i) then begin
|
Objects[i] := new(PObjects,Create(tiEnergyBall,mX,mY+100,10,
|
-10,random(5)-3,0,0));
|
end;
| end;
| end;
TEnemy Çü °´Ã¼¿¡ ´ëÇÑ Çൿ ÇÔ¼öÀÌ´Ù. ¿ª½Ã FALSE °¡ µ¹¾Æ¿À¸é °´Ã¼ÀÇ ¼Ò
¸ê Á¶°ÇÀ»
¸¸Á·ÇßÀ½À» ¾Ë¸®°Ô µÈ´Ù. ( ÇöÀç´Â ¼Ò¸ê Á¶°ÇÀÌ ¾øÁö¸¸ ³ªÁß¿¡´Â
HP °¡ 0 º¸´Ù ÀÛÀ¸¸é ¼Ò¸ê µÉ °ÍÀÌ´Ù.
Çൿ ÆÐÅÏÀº ´ÙÀ½°ú °°´Ù.
1) ·£´ýÀ¸·Î (-1..1, -1..1) ¸¸Å ¿òÁ÷ÀδÙ.
2) 10¹ø¿¡ Çѹø ²Ã·Î
tiEnegyBall À» ¹ß»çÇÑ´Ù.
------------------------------------------------------------------------
(7) TFriend ÀÇ ¼Ò½º
| constructor TFriend.create(number : TTileInfo;
x, y, HP : integer);
| begin
|
inheritedcreate(number,x,y,HP,2,2,0,0);
| FShapeCount := 0;
|
FShapeDelay := 0;
| end;
TEnemy ¶§¿Í °°´Ù. ±×¸®°í private ³»ºÎ º¯¼öÀÎ FShapeCount,
FShapeDelay
¸¦ 0 À¸·Î ÃʱâÈÇÑ´Ù. ( ¾Æ¸¶ ½ÇÁ¦·Ð ÃʱâÈ ¾ÈÇصµ 0 À¸·Î µÉ °ÍÀÌ´Ù. ÇÏ
Áö¸¸ ÀÌ·¸°Ô Àû¾îÁÖ´Â °ÍÀÌ
ÇÁ·Î±×·¥ »óÀ¸·Î ´õ ¸íÈ®ÇÏ´Ù. )
| destructor TFriend.destroy;
| begin
|
end;
¼Ò¸êÀÚ... ±× ÀÌ»óµµ ÀÌÇϵµ ¾Æ´Ñ ¼Ò¸êÀÚÀÏ»Ó... ÀÌ°ÍÀº ¼Ò¸êÀÚ¸¸ÀÌ °¡Áö´Â
¼÷¸íÀ̶ó°í ÇÒ¼ö
ÀÖÀ»±î... !
| procedure TFriend.DisplaySelf;
|
begin
|
| inc(FShapeDelay);
| if FShapeDelay = 5 then begin
|
FShapeCount := FShapeCount xor 1;
| FShapeDelay := 0;
|
end;
|
| with Basic do repeat
| until
MakeItSo(BackBuffer.BltFast(mX,mY,Image[1],
|
TileInfo[TTileInfo(ord(mNumber)+FShapeCount)],
|
DDBLTFAST_SRCCOLORKEY));
| end;
TFriend ÇüÀÇ °´Ã¼¸¦ Ãâ·ÂÇÏ´Â ÇÔ¼öÀÌ´Ù. ¿ª½Ã ÀçÁ¤ÀÇ µÇ¾ú°í Àǹ̸¦ ¾Ë¾Æ
º¸¸é ´ÙÀ½°ú
°°´Ù.
µô·¹À̸¦ Çϳª¾¿ Áõ°¡½ÃÄѼ 5 °¡ µÇ¾úÀ»¶§ Ãâ·ÂµÉ À̹ÌÁö¸¦Åä±ÛÇÑ´Ù. Ãâ
·ÂµÉ À̹ÌÁö´Â tiNeTo1
°ú tiNeTo2 °¡ µÉ °ÍÀÌ´Ù. ( ±×·¡¼ 5 ÇÁ·¹ÀÓ¿¡ Çѹø
¾¿ ³¯°³¸¦ ÆÞ·°ÀÏ °ÍÀÌ´Ù.
| function TFriend.DoAction;
| var
|
i : integer;
| begin
| DoAction := TRUE;
|
| if
GetAsyncKeyState(VK_LEFT) <> 0 then mSX := mSX - mVX;
| if
GetAsyncKeyState(VK_RIGHT)<> 0 then mSX := mSX + mVX;
| if
GetAsyncKeyState(VK_UP) <> 0 then mSY := mSY - mVY;
| if
GetAsyncKeyState(VK_DOWN) <> 0 then mSY := mSY + mVY;
|
| if
GetAsyncKeyState(VK_CONTROL) <> 0 then begin
| if
GetFreeObjects(i) then begin
| Objects[i] :=
new(PObjects,Create(tiFireBall,mX+15,mY+25,10,
|
16,0,0,0));
|
end;
| end;
|
| if GetAsyncKeyState(VK_MENU) <> 0
then begin
| if GetFreeObjects(i) then begin
| Objects[i]
:= new(PObjects,Create(tiFlame,mX,mY,10,16,0,0,0));
| end;
|
end;
| end;
ÀÌ°ÍÀº ¸ðµç °´Ã¼ÀÇ ¸Þ¼Òµå Áß °¡Àå Áß¿äÇÑ ÇÔ¼öÀÌ´Ù. ¿ì¸®°¡ Á÷Á¢ Á¶Á¾ °¡
´ÉÇÑ ³×ÅäÀÇ Çൿ ÇÔ¼öÀ̱â
¶§¹®ÀÌ´Ù.
°¡Àå À§¿¡ ÀÖ´Â 4 °³ÀÇ Å° ÇÔ¼ö´Â È»ìÇ¥ Å°¸¦ ´·¶À» ¶§ ¼Óµµ¸¸Å ³×Å並
À̵¿½ÃÅ°´Â
¿ªÇÒÀÌ´Ù.
VK_CONTROL Àº Ctrl À» ´·¶À» ¶§ ºÒ¶ËÀÌ ¹ß»çµÇ°Ô ÇÏ´Â ·çƾÀ¸·Î, »õ·Î¿î
°´Ã¼¸¦ ¾ò¾î¼
±×°ÍÀ» TObject ÇüÀ¸·Î ¼±¾ðÇÏ¿© ÃʱâÈ ÇÑ´Ù.
VK_MENU ´Â Alt Å°¸¦ ´·¶À» ¶§ Ǫ¸¥»ö ºÒ²ÉÀÌ ³ª°¡°Ô ÇÏ´Â ·çƾÀ¸·Î, À§¿¡
¼³¸íÇÑ °Í°ú
´Ù¸¦¹Ù ¾ø´Â °ÍÀÌ´Ù.
¿ª½Ã ¿©±âµµ ¼Ò¸ê Á¶°ÇÀÌ ¾øÁö¸¸ ³ªÁß¿¡ HP °¡ 0 º¸´Ù ÀÛÀ» ¶§´Â ¼Ò¸êÇϵµ
·Ï
ÇؾßÇÑ´Ù.
------------------------------------------------------------------------
(8) SubUnit5.Pas ÀÇ ÃʱâÈ ÄÚµå
| var
| i : integer;
| begin
|
for i := 1 to MAX_CHARACTER do begin
| Objects[i] := nil;
|
end;
| end.
ÀÌ°ÍÀº À¯´ÖÀ» ÃʱâÈÇÏ´Â ÄÚµå·Î ¸ðµç Objects ÀÇ ¹è¿ ÀÎÀÚ¸¦ nil ·Î ÃÊ
±âÈ
ÇÑ´Ù.
Ȥ½Ã³ª ÆĽºÄ®¿¡ Àͼ÷ÇÏÁö ¾ÊÀº ºÐµéÀ» À§Çؼ ¼³¸íÇÏÀÚ¸é... ¿ø·¡..
| .....
| end.
¶ó°í µÇ´Â ºÎºÐÀÌ ¸¶Áö¸·¿¡ ÀÖ´Ù. ±×·±µ¥ ±× ºÎºÐÀÇ ¾Õ¿¡ begin À» ½áº¸ÀÚ.
| begin
| end.
ÀÌ·¸°Ô ÇÏ¿© ±× begin °ú end. »çÀÌ¿¡ ¾î¶² Äڵ带 ³ÖÀ¸¸é ÇÁ·Î±×·¥ ½ÇÇà½Ã
±× ¾ÈÀÇ ³»¿ëÀÌ
½ÇÇàµÇ°Ô µÇ¾î ÃʱâÈ°¡ ÁøÇàµÈ´Ù.
´ëºÎºÐ ±× À¯´Ö¿¡ ÀÖ´Â º¯¼ö¸¦ ÃʱâÈ ÇÒ ¶§ »ç¿ëµÇ´Â °ÍÀÌ´Ù.
------------------------------------------------------------------------
(9) MainUnt5.Pas ÀÇ ¼öÁ¤µÉ ÄÚµåµé
TBasic = class(TForm) ÀÇ public ¿¡´Â »õ·Î¿î µÎ°³ÀÇ ¸Þ¼Òµå°¡ Ãß°¡µÈ´Ù.
| procedure InitializeGame;
|
procedure FinalizeGame;
ÀÌ ¸Þ¼ÒµåµéÀº °ÔÀÓÀÇ ÃʱâÈ¿Í µÞ󸮸¦ ´ã´çÇØÁÖ´Â ºÎºÐÀ¸·Î ¿©±â¼´Â °Ô
ÀÓÀÇ Ãʱ⿡ »ý¼ºµÉ 2 °³ÀÇ
°´Ã¼ ( ³×Åä¿Í µ¥¸ó ) À» ÀÚµ¿ »ý¼ºÇÏ°Ô µÇ°í ¸¶
Áö¸·¿¡´Â ÇöÀç »ý¼ºµÈ °´Ã¼¸¦ ¸ðµÎ ¼Ò¸ê ½ÃÅ°´Â ¿ªÇÒÀ» ÇÑ´Ù.
°¢°¢ È£ÃâµÇ´Â ºÎºÐÀº ´ÙÀ½°ú °°´Ù.
InitializeGame Àº TBasic.FormShow ºÎºÐ¿¡¼ Çø®ÇÎÀ» °¡´ÉÇÏ°Ô ÇÏ´Â ºÎºÐ
ÀÇ
¹Ù·Î ¾Õ¿¡ ¿Â´Ù ÄÚµå »óÀ¸·Î µûÁ®º¸¸é ÀÌ·¸´Ù.
| InitializeGame; // ¿©±â¿¡ µé¾î°£´Ù.
|
|
FlippingEnabled := TRUE;
| end;
FinalizeGame Àº TBasic.FormDestroy ºÎºÐ¿¡¼ Çø®ÇÎÀ» ºÒ°¡´ÉÇÏ°Ô
ÇÏ´Â
ºÎºÐÀÇ ÄÚµå ´ÙÀ½¿¡ ¿Â´Ù.
| begin
| FlippingEnabled :=
FALSE;
|
| FinalizeGame; // ¿©±â¿¡ µé¾î°£´Ù.
±×·³ °¢°¢ÀÇ ¸Þ¼ÒµåÀÇ ¼Ò½º¸¦ º¸ÀÚ.
| procedure TBasic.InitializeGame;
|
begin
| Objects[1] := new(PFriend,Create(tiNeto1,100,200,100));
|
Objects[2] := new(PEnemy ,Create(tiDemon,300,100,100));
| end;
|
|
procedure TBasic.FinalizeGame;
| var
| i : integer;
| begin
|
for i := 1 to MAX_CHARACTER do begin
| if assigned(Objects[i])
then begin
| dispose(Objects[i],destroy);
| Objects[i]
:= nil;
| end;
| end;
| end;
InitializeGame Àº ³×Å並 TFriend °´Ã¼·Î, µ¥¸óÀ» TEnemy °´Ã¼·Î °¢°¢
ÃÊ
±âÈ ½ÃŲ´Ù. Objects[] ÀÚü°¡ TCharacter É£«£Ã¼ÀÇ Æ÷ÀÎÅÍ·Î ¼³Á¤µÇ¾î ÀÖÀ¸
¹Ç·Î TCharacter ÀÇ
ÈļÕÀÎ TFriend ¿Í TEnemy ´Â ¸ðµÎ Objects[] ¿¡¼ ¼±¾ð
ÀÌ °¡´ÉÇÏ´Ù.
FinalizeGame Àº ¸ðµç Objects[] ¿¡ ´ëÇؼ °´Ã¼°¡ Á¸ÀçÇÒ¶§´Â °´Ã¼¸¦ ¼Ò¸ê
½ÃÅ°´Â
¿ªÇÒÀ» ÇÑ´Ù.
±×·³ À̹ø¿¡´Â MainUnt5.Pas ¿¡¼ °¡Àå Áß¿äÇÑ DrawScreen ¸Þ¼Òµå¸¦
º¸ÀÚ.
ÀÌÀüÀÇ ÄÚµå´Â ¹Ì·Ã¾øÀÌ Áö¿ö¹ö¸®°í ¾Æ·¡ÀÇ ¼Ò½º¸¦ ŸÀÌÇÎÇÑ´Ù.
| procedure TBasic.DrawScreen;
| var
|
i : integer;
| begin
| repeat
| until
MakeItSo(BackBuffer.BltFast(0,0,Image[2],Rect(0,0,640,480),
|
DDBLTFAST_NOCOLORKEY));
|
| for i := MAX_CHARACTER
downto 1 do begin
| if assigned(Objects[i]) then begin
|
if Objects[i]^.DoAction then begin
|
Objects[i]^.DisplaySelf;
| end else begin
|
dispose(Objects[i],destroy);
| Objects[i] :=
nil;
| end
| end;
| end;
| end;
¾Õ ºÎºÐ¿¡¼ BltFast ·Î Image[2] ¸¦ ¹é ¹öÆÛ·Î Àü¼ÛÇÏ´Â Äڵ尡 ÀÖ´Ù. ÀÌ
°ÍÀº
Image[2] ¿¡ µé¾îÀÖ´Â ¹è°æÀ» Àü¼ÛÇÏ´Â ºÎºÐÀÌ´Ù. ¿©±â¼ ÁÖ¸ñÇØ¾ß ÇÏ
´Â °ÍÀÌ ¹Ù·Î BltFast ÀÇ Àü¼Û ŸÀÔ Áß¿¡ ÇϳªÀÎ
DDBLTFAST_NOCOLORKEY ÀÌ´Ù.
ÀÌ°ÍÀº Åõ¸í»ö¿¡ ´ëÇØ ÀüÇô °í·ÁÇÏÁö É®¤¾°í ´ÜÁö À̹ÌÁö·Î½á ¼·Î Àü¼ÛÇ϶ó´Â
Àǹ̸¦
´ã°íÀÖ´Ù. ±×·¡¼ ¹è°æÀ» º¹»çÇÒ ¶§ À¯¿ëÇÏ°Ô »ç¿ëµÈ´Ù.
±× ´ÙÀ½ÀÇ ÄÚµå´Â Á÷Á¢ ¼³¸íÇϵµ·Ï ÇÏ°Ú´Ù.
for i := MAX_CHARACTER downto 1 do begin //
¸ðµç Object[] ¿¡ ´ëÇØ
if assigned(Objects[i]) then begin // °´Ã¼°¡
À¯È¿Çϸé
if Objects[i]^.DoAction then begin // Çൿ ÇÔ¼ö¸¦
½ÇÇàÇÏ°í
Objects[i]^.DisplaySelf; // ÇൿÀÌ À¯È¿Çϸé
Ãâ·Â
end else begin // °´Ã¼°¡ ¼Ò¸ê
Á¶°ÇÀ̸é
dispose(Objects[i],destroy); // °´Ã¼¸¦ ¼Ò¸ê
½ÃÅ°°í
Objects[i] := nil; // Object[] º¯¼ö
ÃʱâÈ
end
end;
end;
DoAction °ú DisplaySelf ÀÇ °æ¿ì¿¡´Â °´Ã¼ Çü¿¡ µû¶ó¼ °¢°¢ ÀçÁ¤ÀÇ µÇ¾ú
À¸¹Ç·Î
TFriend ¿¡¼ÀÇ DoAction °ú TEnemy ¿¡ ´ëÇÑ DoAction ÀÌ ´Ù¸£°Ô µÈ
´Ù. ÇÏÁö¸¸ ¿ì¸®´Â °´Ã¼ ÁöÇâÀ̶ó´Â ÀÕÁ¡
¶§¹®¿¡ ¸í·É¸¸ ³»·ÁÁÖ¸é ÄÄÀÌ ³»ºÎ
ÀûÀ¸·Î ´Ù ÇØ°áÇØ ¹ö¸°´Ù. ¾ó¸¶³ª Æí¸®ÇÑ °³³äÀΰ¡...
------------------------------------------------------------------------
(10) µåµð¾î ½ÇÇà
ÀÚ.. Èûµé°Ô ÀÌÇØÇϼÌÀ»Áöµµ ¸ð¸¦ ÇÊÀÚÀÇ Äڵ带 ½ÇÇàÇÒ Â÷·ÊÀÌ´Ù.
½ÇÇà ½ÃÅ°¸é ÀÌÁ¦¿Í´Â ´Ù¸¥ °ÔÀÓ
ºñ½º¹«¸®ÇÑ °ÍÀÌ ³ªÅ¸³¯ °ÍÀÌ´Ù. È»ìÇ¥ Å°
·Î ³×Å並 À̵¿ ½ÃÅ°±âµµ ÇÏ°í Ctrl °ú Alt ·Î ºÒ¶Ëµµ ¹ß»çÇØ º¸ÀÚ.
ÇÏÁö¸¸ ¾ÆÁ÷ ³×Åä¿Í µ¥¸ó¿¡ ´ëÇÑ ¼Ò¸ê Á¶°ÇÀÌ ¾ø´Âµ¥´Ù°¡ Ãæµ¹ üũµµ ¾ø±â
¶§¹®¿¡ °ÔÀÓÀ¸·Î¼± ¹«¸®°¡
ÀÖ´Ù. ±×·± ºÎ¼öÀûÀÎ °ÍÀº Â÷ÈÄ¿¡ ³Öµµ·Ï ÇÑ´Ù.
±×¸®°í ¼Óµµµµ ¹«Áö ´À¸°µ¥´Ù°¡ Æ®·çÄ÷¯¿¡ ´ëÇÑ ¿ä¼Ò´Â ÀüÇô »ç¿ëÇÏÁö ¾Ê
¾Ò´Ù. ( Æ®·çÄ÷¯¶ó¼
¼Óµµ°¡ ´À¸° °ÍÀº ¾î¿ ¼ö ¾ø´Â ÀÏ... ÀÚ½ÅÀÇ PC ¿¡°Ô
ºÐ³ë¸¦ ¹ß»êÇÏÁö ¸»±â ¹Ù¶õ´Ù. )
#####################################################
ÇÏÀÌÅÚ °ÔÀÓ Á¦ÀÛ µ¿È£È¸ ( GO GMA )
------------------------------------------------------------------------
###
DIRECT X Æ®·çÄ÷¯ °ÔÀÓ (7) - Á÷Á¢ ºñµð¿À ¸Þ¸ð¸®¿¡
Âï±â
------------------------------------------------------------------------
ÀÛ¼ºÀÚ
: ¾È¿µ±â ( HiTEL ID : SMgal )
µåµð¾î À̹ø ÀåºÎÅÍ Æ®·çÄ÷¯¿¡ ´ëÇÑ DX °Á°¡ ½ÃÀ۵ȴÙ. µµ½º¿¡¼ VESA Æ®
·çÄ÷¯¸¦ Á¦¾îÇÏ´Â
°Í°ú °°Àº °³³äÀ¸·Î Á÷Á¢ ºñµð¿À ¸Þ¸ð¸®¿¡ ´ëÇÑ Á¢±ÙÀ» ½Ã
µµÇÒ °ÍÀÌ´Ù. ÀÌÀåÀº Æ®·çÄ÷¯ ÇÁ·Î±×·¡¹ÖÀ» Çϴ óÀ½ÀÌÀÚ ¸¶Áö¸·
ÀåÀÌ´Ù.
------------------------------------------------------------------------
(1) ¿ì¸®°¡ ¸¸µé ÃÖÁ¾ ¼Ò½ºÀÇ »ê¹° DX24Bit7.Exe.
¿©±â¼´Â Á÷Á¢ ¹Ù²ï ÄÚµåµéÀ» ¾ð±ÞÇÏÁö ¾Ê°Ú´Ù. ¸ðµç °ÍÀº MainUnt7.Pas
¿Í
SubUnit7.Pas ¸¦ ÂüÁ¶Çϱ⠹ٶõ´Ù. ÀÌ°ÍÀº ÃÖÁ¾ÀûÀ¸·Î ÇÊÀÚ°¡ ¸¸µç ÄÚµåÀ̸ç
°¡Àå °£´ÜÇÑ °ÔÀÓÀÇ ÇüŸ¦ °®Ãß¾ú´Ù°í
»ý°¢ÇÏ¸é µÈ´Ù. ( À¯ÀÏÇÏ°Ô EXE ÆÄÀÏ
ÀÌ Æ÷ÇԵǾî ÀÖÀ» °ÍÀÌ´Ù. )
ÀÌÇظ¦ ºü¸£°Ô Çϱâ À§Çؼ´Â °á°ú¹°À» ¸ÕÀú ºÁµÎ´Â ÆíÀÌ ÁÁÀ» °ÍÀÌ´Ù. ¾Æ
¸¶µµ DX24Bit5.Exe
¿Í´Â °ÅÀÇ °°Àº ¸ð½ÀÀ» º¸ÀÏ °ÍÀÌ´Ù. ¹Ù²ïÁ¡À» º¸ÀÚ¸é ÀÌ
·¯ÇÏ´Ù.
1) Ctrl Àº ºÒ¶Ë, Alt ´Â ¹ÝÅõ¸íÀÇ Çª¸¥ È¿°, Shift ´Â ÇÑ ¹ø¿¡ 5
°³ÀÇ
¹ÝÅõ¸í È¿°ÀÌ ²¿¸®¸¦ ²ø¸ç Áö³ª°£´Ù.
2) 'µ¥¸ó'Àº ³×Å並 °Ü³ÉÇÏ¿© ¿¡³ÊÁö º¼À» ³»çÇÒ
°ÍÀÌ´Ù.
( Á¤Á¶ÁØÀ» ÇÏÁö ¾ÊÀº ÀÌÀ¯´Â ¿¡³ÊÁö º¼¿¡ ·£´ýÀÇ °¡¼Óµµ ¿ä¼Ò¸¦ ³Ö¾ú
±â ¶§¹®ÀÌ´Ù.
)
3) ºÒ¶Ë°ú µ¥¸ó°£¿¡ Ãæµ¹ üũ°¡ ÀÌ·ç¾îÁö°í HP °¡ 0 ÀÌÇÏ°¡ µÇ¸é µ¥¸óÀº
¼Ò¸êÇÑ´Ù.
¿©±â¼ Æ®·çÄ÷¯ ÇÁ·Î±×·¡¹ÖÀÌ µé¾î °£°ÍÀÌ ¹Ù·Î Shift ¸¦ ´©¸£¸é ÃâÇöÇÏ´Â
ÆĶõ»ö ¹ÝÅõ¸í È¿°ÀÌ´Ù.
±×·¡¼ ´Ù¸¥ °ÍµéÀº ´ëÃæ ¼³¸íÇÏ°í ±× ºÎºÐ¸¸ ÁßÁ¡
ÀûÀ¸·Î ´Ù·ç°Ú´Ù.
------------------------------------------------------------------------
(2) Lock °ú Unlock ÇÔ¼öÀÇ ÀÇÀÇ
ÀÚ½ÅÀÌ ¸¸ÀÏ µµ½º¿¡¼ Á÷Á¢ ±×·¡ÇÈ ¸Þ¸ð¸® ( A000:0000 ) ¸¦ ÅëÇØ ±×·¡ÇÈÀ»
ÇØ º¸¾Ò´Ù¸é ±Ý¹æ
ÀÌÇØµÉ ºÎºÐÀÌ´Ù. ƯÈ÷ 13h packed ¸ðµå ( 320 * 200 * 8
bpp ) ¿¡¼ Á¡À» Âï¾îº» °æÇèÀÌ ÀÖ´Ù¸é ¸î°¡Áö ÁÖÀÇ
»çÇ׸¸ ¾Ë¸é °ÅÀÇ °°Àº
°³³äÀ¸·Î ÀÛ¾÷ÀÌ °¡´ÉÇÏ´Ù. µµ¸®¾î plane À̳ª bank °¡¾ø¾î¼ ÇÁ·Î±×·¡¸ÓÀÇ
ÀÔÀå¿¡¼´Â ¹«Ã´À̳ª
Æí¸®ÇÏ´Ù°í º¼ ¼ö ÀÖ´Ù.
12h ¸ðµå³ª 13h ÀÇ plane ¸ðµå¿¡ ÀÖ´Â plane À» ÀÌÇØÇϱâ À§ÇØ ¸Ó¸®¸¦ ½Î¸Å
½Å
ºÐµéÀ̳ª, VESA ¿¡¼ ¼±Çü ¾îµå·¹½º ¸ðµå¸¦ ±¸ÇöÇÏ°íÀÚ ¶¡ È긮½Å ºÐµé¿¡
°Õ ³Ê¹«³ªµµ Ç㹫ÇÒÁöµµ ¸ð¸¦ Á¤µµ·Î ½±°Ô µÇ¾î Àִ°Ô
»ç½ÇÀÌ´Ù.
Lock °ú Unlock ÀÇ »ç¿ë¹ýÀº °ÁÂ(3) ¿¡¼ ´Ù·ç¾úÀ¸¹Ç·Î ¿©±â¼ ¾ð±ÞÇÏÁö´Â
¾Ê°Ú°í, ´Ù¸¸
¸ðµå ±¸Á¶¿Í ÁÖÀÇÁ¡À» ¸»ÇØ µÎ°Ú´Ù.
Lock ¿¡ ÇÊ¿äÇÑ TDDSurfaceDesc ±¸Á¶Ã¼¿¡´Â, ¾Õ¿¡µµ ¸»ÇßµíÀÌ lpSurface
¿Í
lPitch ¶ó´Â Áß¿äÇÑ ·¹Äڵ带 °¡Áö°íÀÖ´Ù. lpSurface ´Â GlobalAlloc() À¸·Î
¾òÀº ¸Þ¸ð¸®¸¦
GlobalLock() À¸·Î ¸Þ¸ð¸®¸¦ °íÁ¤½ÃÄÑ ±× ÁÖ¼Ò¸¦ ¾ò´Â °³³ä°ú
µ¿ÀÏÇÏ´Ù. lpSurface ´Â Lock ÀÇ Ã¹¹ø° ÀμöÀÎ
lpDestRect ÀÇ °¡Àå ¿ÞÂÊ »ó
´ÜÀÇ ÁÖ¼Ò¸¦ µ¹·ÁÁØ´Ù. ±×¸®°í lPitch ´Â ´ÙÀ½ ¶óÀαîÁöÀÇ ¹ÙÀÌÆ® ¼öÀ̹ǷÎ
y
Áõ°¡½Ã¿¡´Â Ç×»ó ´õÇØÁÖ¾î¾ß ÇÑ´Ù.
µû¶ó¼ lpDestRect ¿¡ µû¸¥ ³í¸® ÁÂÇ¥ (x,y) ´Â,
longint(LockDesc.lpSurface) + y * LockDesc.lPitch + x * BPP)
°¡ µÇ´Â °ÍÀÌ´Ù. ¿©±â¼ BPP ´Â Çȼ¿´ç ¹ÙÀÌÆ®¼ö¸¦ ÀǹÌÇϹǷΠ24ºñÆ® Æ®·ç
Ä÷¯¿¡¼´Â 3 ( =
24 / 8 ) ÀÌ µÈ´Ù.
ÇÏÁö¸¸ Lock °ú Unlock À» »ç¿ëÇÔ¿¡ ÀÖ¾î¼, ±²ÀåÈ÷ Áß¿äÇÑ ´ÜÁ¡ Çϳª°¡ ¼û
¾îÀÖ´Ù´Â °ÍÀ»
¾Ë¾Æ¾ßÇÑ´Ù. À©µµ¿ì 95 ´Â 32 bit ¿î¿µÃ¼Á¦¶ó°í ÇÏÁö¸¸ ÇÏÀ§
ȣȯÀ» À§Çؼ »ó´ç¼öÀÇ ÀÚ¿øÀ» Win16 °ú °ø¿ëÇÏ°í ÀÖ´Ù. ƯÈ÷
Lock °°Àº °æ
¿ì°¡ ´ëÇ¥ÀûÀε¥.. Ç¥¸éÀÌ Lock µÇ¾î ÀÖ´Â µ¿¾È¿¡ Win32 ÀÇ GDI Ãâ·ÂÀÌ ½ÇÇà
µÈ´Ù¸é ½ÊÁßÆȱ¸ ´Ù¿îÀÌ
µÇ¾î ¹ö¸°´Ù. ±×·¡¼ ÇïÇÁ¿¡¼´Â Lock °ú Unlock »ç
ÀÌÀÇ ½Ã°£À» ÃÖ´ëÇÑ ´ÜÃà ½ÃÄѶó°í ³ª¿ÍÀÖ´Ù.
¶ÇÇÑ ÁÖÀÇÇØ¾ß ÇÏ´Â ºñ½ÁÇÑ ÇÔ¼ö·Î´Â GetDC ¿Í ReleaseDC°¡ ÀÖ´Ù. GDI ÀÇ
ÇÔ¼ö¿Í
À̸§ÀÌ °°Àº¸¸Å ¿ªÇÒµµ À¯»çÇÏ´Ù°í »ý°¢ÇÏ¸é µÈ´Ù. ¸¸¾à GetDC ÇÔ¼ö
·Î ¹é ¹öÆÛÀÇ µð¹ÙÀ̽º ÄÁÅؽºÆ®¸¦ ¾ò´Â´Ù¸é, ´ç½ÅÀÌ Á¤ÀÇÇÑ
TCanvas °´Ã¼ÀÇ
Handle ¿¡ DC ¸¦ ´ëÀÔÇغ¸¶ó. ±×·¯¸é °ÅÀÇ ¸ðµç Canvas °´Ã¼¿¡ ÀÖ´Â GDI ÇÔ
¼ö¿Í ¿¬°áÀÌ
µÈ´Ù. ÇÑ±Û Ãâ·Â°°Àº ±×·± ·ù¿¡ ¾È¼º¸ÂÃãÀÌ´Ù. ÇÏÁö¸¸ GetDC ´Â
³»ºÎÀûÀ¸·Î Lock ÇÔ¼ö¸¦ È£ÃâÇϹǷΠ¿ª½Ã ReleaseDC ¸¦ Çϱâ
Àü¿¡ ´Ù¸¥ µð½º
Ç÷¹ÀÌ ÄÁÅؽºÆ®ÀÇ GDI Ãâ·ÂÀÌ ¹ß»ýÇÏ¸é ¿ª½Ã ´Ù¿îµÈ´Ù.
±×·¡¼ °á·ÐÀ» ¸»ÇÏÀÚ¸é Lock °ú Unlock ... GetDC ¿Í ReleaseDC »çÀÌÀÇ
½Ã
°£Àº µÇµµ·ÏÀ̸é ª°Ô ÇÏ´Â °ÍÀÌ ÇÁ·Î±×·¥ÀÇ ¾ÈÁ¤¼ºÀ» ³ôÀÌ´Â ±æÀ̸ç, ¸¸¾à
Lock À» ÀÌ¿ëÇØ ¸ðµç Ãâ·ÂÀ» ÇÏ´Â °ÔÀÓÀ»
¸¸µç´Ù¸é ¾Æ¿¹ ½Ã½ºÅÛ Å°¸¦ »ç¿ëÇÒ
¼ö ¾ø°Ô ÇÏ¿© Alt-Tab °ú °°Àº °Í¿¡ ÀÇÇØ ´Ù¿î µÇÁö ¾Ê°Ô ÇØ¾ß ÇÑ´Ù.
------------------------------------------------------------------------
(3) ¹Ù²ï ºÎºÐ¿¡ ´ëÇÑ ÀÌÇØ
¾Æ·¡´Â MainUnt7.Pas ¿¡¼ ¹Ù²ï °ÔÀÓ ÃʱâÈ ºÎºÐÀÌ´Ù. ÀÌ ºÎºÐ¿¡¼´Â Á÷Á¢
¸Þ¸ð¸®¿¡ Á¢±ÙÇϱâ
À§ÇÑ À̹ÌÁöÀÇ µ¥ÀÌÅÍ ÇüÀ» ¸¸µå´Â ÄÚµå·Î½á, µµ½º¶§ÀÇ
½ºÇÁ¶óÀÌÆ® µ¥ÀÌÅÍ¿Í °°Àº << X±æÀÌ(2bytes) +
Y±æÀÌ(2bytes) + ºñ¾ÐÃà µ¥ÀÌ
ÅÍ >> ½ÄÀÇ µ¥ÀÌÅÍ ±¸Á¶ÀÌ´Ù. ´Ü ´Ù¸¥ Á¡ÀÌ ÀÖ´Ù¸é µµ½º¶§´Â ºñ¾ÐÃà µ¥ÀÌŸ
°¡
1 byte Àε¥ ºñÇØ ¿©±â¼´Â DWORD ÀÎ 4 bytes ¸¦ ¾´´Ù´Â Á¡ÀÌ´Ù. ±×·¯¹Ç
·Î µ¥ÀÌÅ͸¦ ¸¸µé±â À§ÇÑ °ø°£Àº <<
X ±æÀÌ * Y ±æÀÌ * sizeof(DWORD) + 4 (
Çì´õ¿¡ ¾²ÀÎ 4 bytes ) >> °¡ µÈ´Ù. ¿©±â¼´Â ´ë»óÀÌ
µÇ´Â tiFlame ¿¡ ´ëÇÑ
µ¥ÀÌÅ͸¸ DOWRD Çü Æ÷ÀÎÅÍ Àü¿ª º¯¼öÀÎ flame_image ¿¡ ¸¸µç´Ù.
Á÷Á¢ ¼Ò½º¿¡ ÁÖ¼®À» ´Þ¸é¼ ¼³¸íÇÏ°Ú´Ù.
| procedure TBasic.InitializeGame;
|
var
| i,j : integer;
| LWord : DWORD;
| PLong :
PDWORD;
| Desc : TDDSurfaceDesc;
| begin
| with
TileInfo[tiFlame] do begin
|
GetMem(flame_image,(Right-Left)*(Bottom-Top)*sizeof(DWORD)+4);
//
À§¿¡¼ ¼³¸íÇÑ °ª¸¸Å ¸Þ¸ð¸®¸¦ ÇÒ´ç ¹Þ´Â´Ù.
| PLong := flame_image;
//
PLong Àº flame_image ÀÇ ¹øÁö¸¦ °®´Â´Ù.
| LWord := (Right-Left) or
((Bottom-Top) shl 16);
// Çì´õ Á¤º¸¸¦ DWORD º¯¼ö¿¡ ¸¸µç´Ù.
| PLong^
:= LWord;
// Çì´õ Á¤º¸¸¦ PLong ÀÌ °¡¸®Å°´Â ¹øÁö¿¡ ³Ö´Â´Ù.
|
|
Desc.dwSize := SizeOf(TDDSurfaceDesc);
| repeat
|
until Basic.MakeItSo(Basic.Image[1].Lock(Rect(0,0,MAX_X_LINE,
|
MAX_Y_LINE),Desc,DDLOCK_SURFACEMEMORYPTR + DDLOCK_WAIT,
0));
// image[1] ÀÇ Ç¥¸éÀ» °íÁ¤½ÃŲ´Ù.
|
| for j := Top to
pred(Bottom) do
| for i := Left to pred(Right) do begin
|
inc(PLong);
| LWord :=
PDWORD(longint(Desc.lpSurface)+j*Desc.lPitch+i*BPP)^
| and
longint($00FFFFFF);
| PLong^ := LWord;
|
end;
// image[1] ÀÇ ¿µ¿ªÁß ÇÊ¿äÇÑ »ç°¢Çü¿¡¼ µ¥ÀÌŸ¸¦
»Ì¾Æ³½´Ù.
// ³ªÁß¿¡ Lock ÇßÀ»¶§ÀÇ ¸Þ¸ð¸® ÁÖÁ¶¸¦ ¾Ë·ÁÁÖ°Ú´Ù.
|
|
Basic.Image[1].UnLock(Desc.lpSurface);
// image[1] ÀÇ Ç¥¸é °íÁ¤À»
ÇØÁ¦ÇÑ´Ù.
|
| end;
|
| Objects[1] :=
new(PFriend,Create(tiNeto1,100,200,5000));
| Objects[2] := new(PEnemy
,Create(tiDemon,350,100,10000));
// ÀÌÀü°ú ´Ù¸¥ Á¡ÀÌ ÀÖ´Ù¸é ¿¡³ÊÁö°¡ °¢°¢5000 °ú 10000
À¸·Î ¸í½Ã
// µÇ¾îÁ³´Ù´Â Á¡ÀÌ´Ù.
| end;
¾Æ·¡´Â »õ·Ó°Ô »ý±ä 2 °³ÀÇ °´Ã¼¿¡ ´ëÇÑ ¼³¸íÀÌ´Ù.
| PTransparency =
^TTransparency;
// TTransparency ´Â Alt ¸¦ ´·¶À» ¶§ ª°Ô ³ª°¡´Â ÆĶõ ¹ÝÅõ¸í
È
// ¿°À» Ç¥ÇöÇÏ´Â °´Ã¼ÀÌ´Ù.
| TTransparency =
object(TObjects)
// ¸ðµç Ư¡Àº TObject ¿¡¼ »ó¼Ó ¹Þ¾Ò´Ù.
|
|
procedure DisplaySelf; virtual;
// ÇÏÁö¸¸ DisplaySelf ´Â ÀçÁ¤ÀÇ
Çß´Ù. ÀÌÀ¯´Â ¹ÝÅõ¸í °´Ã¼¸¸ÀÇ
// Ãâ·Â ·çƾÀÌ ÇÊ¿äÇϱ⠶§¹®ÀÌ´Ù.
|
|
end;
|
| PMotionBlur = ^TMotionBlur;
// TMotionBlur ´Â
Shift ¸¦ ´·¶À» ¶§ ²¿¸®¸¦ ²ø¸ç ³ª°¡´Â ÆĶõ ¹Ý
// Åõ¸í È¿°À» Ç¥ÇöÇÏ´Â °´Ã¼ÀÌ´Ù.
|
TMotionBlur = object(TObjects)
// ¸ðµç Ư¡Àº TObject ¿¡¼ »ó¼Ó
¹Þ¾Ò´Ù.
|
| procedure DisplaySelf; virtual;
| function
DoAction : boolean; virtual;
// ¹ÝÅõ¸í È¿°Àº ÀڽŸ¸ÀÇ Ãâ·Â°ú Çൿ ¹æ½ÄÀ» °¡Áö¹Ç·Î
ÀçÁ¤ÀÇ
// µÇ¾î¾ß ÇÑ´Ù.
¾Æ·¡´Â °¢°¢ÀÇ °´Ã¼¿¡¼ ÀçÁ¤ÀÇ µÈ ºÎºÐÀÇ ¼Ò½º¸¸À» Ãß·Á³½ °ÍÀÌ´Ù.
ÀÌÀüÀÇ DisplaySelf ´Â
DX ÀÇ ³»Àå ÇÔ¼öÀÎ BltFast ¸¦ »ç¿ëÇ߱⠶§¹®¿¡ Åõ¸í
»öÀ» Ç¥ÇöÇϱâ À§Çؼ´Â ±× ÇÔ¼ö¸¦ ÀçÁ¤ÀÇ ÇÏ¿© ±×¿¡ µû¸¥ Åõ¸í»ö Ãâ·Â
ÇÔ¼ö
¸¦ ¸¸µé¾î È£ÃâÇÏ´Â ¹æ¹ýÀ» »ç¿ëÇÑ´Ù.
| procedure TTransparency.DisplaySelf;
|
begin
| Basic.LockBackGround;
// ¹é ¹öÆÛ¸¦ °íÁ¤½ÃŲ´Ù.
|
DisplayEffect(mX,mY,flame_image^,mHP);
// DisplayEffect ¸¦ È£ÃâÇÑ´Ù. (
ÀÌ ÇÔ¼ö´Â ³ªÁß¿¡ ÀÚ¼¼È÷ ¼³¸í )
| mHP := mHP - 8;
// HP ¸¦ °¨¼Ò½ÃŲ´Ù. HP ´Â Åõ¸í»öÀÇ
°µµ¿¡ ¿µÇâÀ» ÁÖ¸ç 0 ÀÌÇÏ°¡
// µÇ¸é °´Ã¼ÀÇ ¼Ò¸êÀ» ¾Ë·ÁÁØ´Ù.
|
Basic.UnlockBackGround;
// ¹é ¹öÆÛ °íÁ¤À» ÇØÁ¦ÇÑ´Ù.
| end;
TMotionBlur.displaySelf ´Â À§ÀÇ TTransparency ¿Í À¯»çÇÏ´Ù.
| procedure TMotionBlur.DisplaySelf;
|
begin
| Basic.LockBackGround;
|
DisplayEffect(mX,mY,flame_image^,mHP);
| mHP := mHP - 15;
|
Basic.UnlockBackGround;
| end;
| function TMotionBlur.DoAction :
boolean;
| var
| i : integer;
| begin
| if (mHP <= 0)
or (mX < 0) or (mX >= MAX_X_LINE-mXSize) or
| (mY
< 0) or (mY >= MAX_Y_LINE-mYSize) then begin
| DoAction :=
FALSE;
| exit;
| end;
// HP °¡ 0 ÀÌÇÏÀ̰ųª À̹ÌÁö°¡ ȸ鿡¼
Á¶±ÝÀÌ¶óµµ ¹þ¾î³ª¸é ¼Ò¸ê
// Á¶°ÇÀÌ µÈ´Ù.
|
| if CheckCrash then begin;
|
if mHP = 100 then begin
| if ((mX + mVX) > 0)
and
| ((mX + mVX) < MAX_X_LINE-mXSize)
and
| ((mY + mVY) > 0) and
| ((mY +
mVY) < MAX_Y_LINE-mYSize) then begin
| if GetFreeObjects(i)
then begin
| Objects[i] :=
new(PMotionBlur,Create(tiFlame,
|
Trunc(mSX+mVX+0.5),Trunc(mSY+mVY+0.5),
|
100,mVX,mVY,0,0));
| end;
|
end;
| end;
| DoAction := TRUE;
| end else
begin
| DoAction := FALSE;
| end;
// CheckCrash ´Â
ÇöÀçÀÇ °´Ã¼°¡, ¿µÇâÀ» ÁÖ´Â ´Ù¸¥ °´Ã¼¿Í Ãæµ¹Çß´Â
// °¡¸¦ ÆǺ°ÇÏ¿© µ¥¹ÌÁö¸¦ ÀÔÈ÷°í ÀÚ½ÅÀº ¼Ò¸êÇÏ´Â ±¸Á¶¸¦
°¡Áø´Ù.
// FALSE °¡ µ¹¾Æ¿Â´Ù¸é ´Ù¸¥ °´Ã¼¿Í Ãæµ¹ÀÌ ÀϾ ÀÚ½ÅÀº ¼Ò¸êµÈ´Ù
// ´Â °ÍÀ» ¾Ë·ÁÁÖ´Â
°ÍÀÌ´Ù.
// ¸¸¾à TRUE °¡ µ¹¾Æ ¿Ô´Ù¸é Á¦ÀÏ Ã³À½ ´Ü Çѹø¸¸ ( mHP = 100 ) ÀÚ
// ½Å°ú
°°Àº °´Ã¼¸¦ âÁ¶Çس»°í ÀÚ½ÅÀº HP ¸¦ ÁÙ¿© ³ª°¡´Â ¸ÞÄ«´ÏÁò
// ÀÌ´Ù. âÁ¶ÇÑ °´Ã¼´Â ÀÚ½ÅÀÇ ¼Óµµ¸¸Å ¾Õ¼¼ »ý¼ºµÇ±â
¶§¹®¿¡ º¸
// ´Â ÀÌ·Î ÇÏ¿©±Ý ±â´Ù¶õ ²¿¸®¸¦ ²ø¸ç ³¯¾Æ°¡´Â °Íó·³ º¸ÀÌ°ÔÇÑ´Ù.
// ±×¸®°í HP °¡
ÁÙ¸é¼ Åõ¸íµµ´Â ¶³¾îÁö°í 0 ÀÌÇÏ°¡ µÇ¸é ¼Ò¸êÇϹÇ
// ·Î ¼¼È÷ »ç¶óÁö´Â È¿°úµµ º¼ ¼ö ÀÖ´Ù.
|
|
end;
±×·³ ¾Õ¿¡¼ ³ª¿Â Ãâ·ÂÇÔ¼ö¸¦ º¸ÀÚ. ÀÌ ÇÔ¼ö¾ß ¸»·Î Æ®·çÄ÷¯¿¡ ÇØ´çÇÏ´Â
À¯ÀÏÇÑ ÇÔ¼öÀÌ´Ù.
Áï À̰͸¸ Á» ¹Ù²Ù°í ÃʱâÈ¿¡¼ 16bit ÇÏÀÌÄ÷¯·Î ÇÑ´Ù¸é
¿ª½Ã µ¿ÀÏÇÑ °á°ú°¡ ³ª¿Â´Ù´Â ¶æÀÌ´Ù. ( 32bit Æ®·çÄ÷¯µµ ¸¶Âù°¡Áö..
)
ÀÌ Åõ¸í»ö ÇÔ¼ö´Â µµ½º¿¡ »ç¿ëÇÏ´ø °ÍÀ» ±×´ë·Î ÄÁ¹öÆÃÇѰŶó ¾à°£ ÁöÀúºÐ
ÇÏÁö¸¸ ±×·¡µµ ÀÌÇØÇØ Áֱ⸦
¹Ù¶õ´Ù.
| procedure DisplayEffect(x, y : integer; var
bitmap_data;
| ratio :
integer);
// x ¿Í y ´Â À̹ÌÁö¸¦ Ãâ·ÂÇÒ ¹é ¹öÆÛÀÇ ÁÂÇ¥ÀÌ°í, bitmap_data
´Â
// ½ºÇÁ¶óÀÌÆ®°¡ µé¾îÀÖ´Â º¯¼ö¸¦ reference ·Î ¹Þ´Â´Ù. ratio ´Â Åõ
// ¸íµµÀÇ ºñÀ²·Î
0 - 100 Á¤µµÀÇ ¹üÀ§¸¦ °¡Áø´Ù.
| var
| r, g, b : word;
| _x, _y,
x_len, y_len, x_len_half, y_len_half : word;
| data :
longint;
| pSour, pDest : PDWORD;
| temp : DWORD;
|
tr1, tr2 : longint;
| tr3, division : word;
| begin
|
if (x < 0) or (y < 0) then exit;
// x, y ÀÇ ¹üÀ§°¡ ȸéÀ» ¹þ¾î³ª¸é
´Ù¿î±îÁöµµ µÈ´Ù.
| if addr(bitmap_data) = nil then exit;
//
@bitmap_data °¡ nil À̶ó¸é ´ç¿¬È÷ exit.
| pSour :=
PDWORD(@bitmap_data);
// bitmap_
data ÀÇ ÁÖ¼Ò¸¦ DWORD ÀÇ Æ÷ÀÎÅÍ ÇüÀ¸·Î ŸÀÔ
ij½ºÆÃÇÏ¿©
// pSour ÀÇ ÁÖ¼Ò·Î »ç¿ëÇÑ´Ù.
| x_len := LoWord(pSour^);
|
y_len := HiWord(pSour^);
// ù¹ø° DWORD ´Â Çì´õÀ̹ǷÎÇÏÀ§ ¿öµå´Â X ±æÀÌ, »óÀ§ ¿öµå´Â
Y
// ±æÀÌÀÌ´Ù.
| inc(pSour);
// pSour++ °ú °°À¸¹Ç·Î ³»ºÎÀûÀ¸·Î
ÁÖ¼Ò°¡ 4 bytes Áõ°¡ÇÑ´Ù.
| x_len_half := x_len div 2;
| y_len_half :=
y_len div 2;
// ¾à°£ÀÇ ¼Óµµ À̵æÀ» º¸°íÀÚ X, Y ÀÇ ±æÀÌ¿¡ ´ëÇÑ / 2 °ªÀ» º¯¼ö·Î
//
µÎ¾ú´Ù.
|
| if (x_len = 0) or (y_len = 0) then exit;
// X ±æÀ̳ª
Y ±æÀÌ°¡ 0 À̶ó¸é ´ç¿¬È÷ exit.
|
| if Basic.FPixelFormat = pfBGR then
begin
| if ColorInfo = ciRed then ColorInfo := ciBlue
| else
if ColorInfo = ciBlue then ColorInfo := ciRed;
| end;
// ¸¸¾à Çȼ¿
±¸Á¶°¡ RGB °¡ ¾Æ´Ñ BGR À̶ó¸é ciRed ¿Í ciBlue ´Â ¼
// ·Î ½º¿ÍÇÎÇØ¾ß Á¦´ë·Î µÈ °á°ú°¡
³ª¿Â´Ù.
|
| division := x_len * y_len div ratio div 2;
//
°øÅëÀûÀ¸·Î ³ª´©¾îÁÙ ¼ö¸¦ ¹Ì¸® °è»êÇصдÙ.
| for _y := 0 to pred(y_len) do begin
|
with Basic.LockDesc do
| pDest :=
PDWORD(longint(lpSurface)+y*lPitch+x*BPP);
// (X,Y) ¿¡ ´ëÇÑ ¸Þ¸ð¸®
ÁÖ¼Ò¸¦ ¾ò´Â´Ù.
| for _x := 0 to pred(x_len) do begin
| data :=
pSour^; inc(pSour);
// ÇöÀçÀÇ ½ºÇÁ¶óÀÌÆ® µ¥ÀÌÅ͸¦ ÀÐ¾î¼ data ¶ó´Â º¯¼ö¿¡
µÐ´Ù.
// ÀÚ½ÅÀº ´ÙÀ½ µ¥ÀÌÅ͸¦ Àбâ À§Çؼ ÇÑ ½ºÅÜ Áõ°¡½ÃŲ´Ù.
| if data
<> longint($0) then begin
// ¸¸¾à data °¡ Åõ¸í»öÀ̶ó¸é....
|
temp := pDest^;
// ÂïÈú °÷ÀÇ DWORD ¸¦ ¹Ì¸® Àоî temp ¿¡
ÀúÀåÇÑ´Ù.
| r := Byte(temp shr 16);
| g :=
Byte(temp shr 8);
| b :=
Byte(temp);
// temp ¿¡ µé¾î¿Â 4 bytes ÀÇ ÀڷḦ ºÐ¼®Çϸé
ÀÌ·¸´Ù.
// [ #### rrrr gggg bbbb ] <- 16 Áø¼ö·Î
Ç¥±â
// ÀÌ·¸±â ¶§¹®¿¡ ½¬ÇÁÆ® ¿¬»ê°ú ŸÀÔ Ä³½ºÆø¸À¸·Î °¢°¢ÀÇ
//
RGB ¿ä¼Ò¸¦ ÃßÃâÇÒ ¼ö ÀÖ´Ù.
// ( ³ªÁß¿¡ #### À̶ó´Â ¿ä¼Ò°¡ ²À ÇÊ¿äÇÏ´Ù.. )
|
tr1 := (x_len_half - abs(integer(_x)- x_len_half));
|
tr2 := (y_len_half - abs(integer(_y)- y_len_half));
|
tr3 := (tr1 * tr2 div division) shl 2;
//
¾ó¸¶³ª ½ºÇÁ¶óÀÌÆ®ÀÇ Á߽ɿ¡ À§Ä¡Çߴ°¡¸¦ °è»ê ÇÏ´Â °Í
// À¸·Î tr3 ¶ó´Â ÃÖÁ¾ º¯¼öÀÇ °ªÀ» ¸¸µé¾î
³½´Ù.
| inc(g,tr3);
| inc(r,tr3);
|
inc(b,DWORD($FF) * ratio div 64);
// Ǫ¸¥»öÀÇ
Åõ¸í»öÀ̹ǷΠG ¿Í R Àº ±×³É µÎ°í B ¿¡ ´ëÇÑ
// °¡°ø¸¸À» ÇÑ´Ù.
|
if r > $FF then r := $FF;
| if g > $FF then g
:= $FF;
| if b > $FF then b := $FF;
//
r,g,b ¸¦ word ·Î ¼±¾ðÇÑ ÀÌÀ¯°¡ À̶§¹®ÀÌ´Ù. ¸¸¾à »ö»ó
// ÀÇ ÃÖ°íÄ¡ÀÎ $FF(255) ¸¦
³Ñ¾î°¡´Â ¼öÄ¡¶ó¸é $FF ·Î ¸¸
// µé¾î ÁØ´Ù. ¸¸¾à byte ÇüÀ¸·Î ¼±¾ðÇß´Ù¸é ¿À¹ö
Ç÷ο찡
// ÀϾ 0 ºÎÅÍ ´Ù½Ã ½ÃÀ۵ǾúÀ» °ÍÀÌ´Ù.
| data :=
(temp and $FF000000) or (longint(r) shl 16) or
|
(longint(g) shl 8) or
longint(b);
// ´Ù½Ã¸¸µç r,g,b ¸¦ ´Ù½Ã DWORD ÇüÀ¸·Î ¸¸µç´Ù.
ùºÎºÐ¿¡
// ´Â À§ÀÇ '####' ºÎºÐÀÇ gabage(?) ¸¦ or ·Î °áÇÕ
½ÃÅ°´Â
// ºÎºÐÀÌ ³ª¿Â´Ù. ÀÌ°ÍÀ» ¾ÈÇØÁÖ¸é ¹Ù·Î ¿À¸¥ÂÊ ¿·ÀÇ Çȼ¿
//
±îÁö ¿µÇâÀ» ¹ÌÄ£´Ù. ±Ã±ÝÇϸé (temp and $FF000000) or
// ºÎºÐÀ» »©°í ½ÇÇà ½ÃÄÑ
º¸¶ó.
| pDest^ := data;
// ÃÖÁ¾ °á°ú¹°ÀÎ DWORD º¯¼ö
data ¸¦ ¹é ¹öÆÛ¿¡ ¾´´Ù.
| end;
|
inc(longint(pDest),BPP);
// pDest ¸¦ BPP ( = 3) ¸¸Å
Áõ°¡½ÃŲ´Ù. ½ÇÁ¦·Î pDest ´Â 4
// bytes Çü Æ÷ÀÎÅÍÀ̹ǷΠ3 bytes ¸¸ ÁÖ¼Ò¸¦ Áõ°¡½ÃÅ°·Á¸é
ÀÌ
// ·¸°Ô ÇÏ´Â °ÍÀÌ ÁÁ´Ù.
//
Âü°í·Î, µµ½ºÀÇ º£»ç ¸ðµå¿¡¼´Â 3 bytes Àü¼ÛÀ» À§ÇØ 2 ¿Í
// 1 ·Î ³ª´©¾î¼ µÎ¹ø Àü¼ÛÇÏ´Â ¹æ¹ýÀ»
¾²°ïÇß´Ù.
| end;
| inc(y);
// y ÁÂÇ¥¸¦ Çϳª Áõ°¡ÇÑ´Ù.
|
end;
| end;
( ** À§ÀÇ ¼Ò½º´Â ÃÖÁ¾ ¹öÀü¿¡¼ ¾à°£ÀÇ ¼öÁ¤ÀÌ ÀÖ¾ú´Ù. )
³ª¸ÓÁö ¼Ò½º¿¡ ´ëÇÑ ¾ð±ÞÀº ÇÇÇϵµ·Ï ÇÏ°Ú´Ù. ÀÌ°ÍÀº ÇÊÀÚÀÇ °ÔÀ¸¸§¿¡µµ Å«
¹®Á¦°¡ ÀÖ°ÚÁö¸¸ ÀÌ °ÁÂÀÇ
ÀÇÀǸ¦ µ¨ÆÄÀÌ ¹®¹ýÀ̳ª À©µµ¿ì ÇÁ·Î±×·¥ ÀÛ¼ºÀÌ
¾Æ´Ñ DX ¿ë¹ýÀ¸·Î ±¹ÇÑ ½ÃÅ°°íÀÚ ÇÏ´Â ÇÊÀÚÀÇ Àǵµ ¶§¹®ÀÌ´Ù.
ÀÌÁ¦ ³²Àº °ÍÀº ´ç½ÅÀÌ ½º½º·Î °ø°³ÀÚ·á½Ç¿¡ ¿Ã¶ó¿Â ÇÊÀÚÀÇ ÃÖÁ¾ ¼Ò½º¸¦ ºÐ
¼®Çؼ Á¦´ë·Î µÈ Æ®·çÄ÷¯
°ÔÀÓÀ» ¸¸µé¾î ³»´Â °ÍÀÌ´Ù. ¸ðµç °ÍÀº ´ç½ÅÀÇ
³ë·ÂÀÇ ¿©ÇÏ¿¡ ´Þ·È´Ù. ÇÊÀÚ°¡ °ÔÀÓ ÇÁ·Î±×·¡¹Ö¿¡¼ ÁÖÀåÇÏ´Â °ÍÀº ¹Ù·Î
ÀÌ
'³ë·Â'À̶ó´Â °ÍÀÌ´Ù. óÀ½ºÎÅÍ ÇÁ·Î±×·¡¹ÖÀ» À§ÇØ Å¸°í³ µÎ³ú¸¦ ¼ÒÀ¯ÇÑ ÀÚ
µµ ºÐ¸íÀÖ°ÚÁö¸¸ ±× ¿ª½Ãµµ ³²º¸´Ù °úÁ¤ÀÌ Á¶±Ý ´õ
½¬¿üÀ»»Ó ÀڽŸ¸ÀÇ ³ë·Â
À» °ÔÀ»¸® ÇÏÁö ¾Ê¾ÒÀ» °ÍÀ̶ó´Â »ý°¢ÀÌ´Ù.
------------------------------------------------------------------------
<< ¿¡ÇÊ·Î±× >>
Áö±Ý±îÁö Áö·çÇÏ´Ù¸é Áö·çÇÑ ¼³¸íÀ» Àоî ÁÖ´À½Ã¶ó°í ¼ö°íÇϼ̽À´Ï´Ù.
¿ø·¡ °Á °èȹ°ú´Â ´Þ¸® ÀÏ¹Ý Ã¥¿¡¼
¾ð±ÞÇÏ´Â ¼öÁØÀ» ¸ø ¹þ¾î ³µ±º¿ä. ±×
³É DX ÃʱâÈÇÏ°í À̹ÌÁö Âï´Â ¼öÁØ¿¡ ±×Ãļ Àúµµ ¾Èµû±î¿ï µû¸§ÀÔ´Ï´Ù. Áö
±ÝºÎÅÍ 2
½Ã°£Èĸé ÀÌ ¾ÆÀ̵𰡠À¯º¸µÇ¾î ¹ö¸®´Â ¹Ù¶÷¿¡ °Á¸¦ ½Ã°£¿¡ ¦i°Ü
¸¶ÃĹö·Á¼ Àú ¿ª½Ã ¾ÈŸ±î¿î ¸¶À½À» ±ÝÇÒ ¼ö ¾ø±º¿ä.
¹ÌõÇÑ ÀúÀÇ °Á¸¦ ÅëÇØ DX ¿¡ ´ëÇÑ ÀÌÇظ¦ ³ÐÇô °¡½Ç ºÐÀÌ ¸î¸î ºÐÀ̶óµµ
µÈ´Ù¸é Á¦°¡ ÀÌ °ÁÂ
ŸÀÌÇÎ ÇÏ´À¶ó º¸³½ 1 ÁÖÀÏÀÇ ½Ã°£Àº ÃæºÐÈ÷ º¸»óµÇ°íµµ
³²À» °ÍÀÔ´Ï´Ù.
¸¸¾à, ¶Ç ÀÌ·± ±âȸ°¡ ã¾Æ¿Â´Ù¸é ´õ¿í ´õ ½Éµµ ±íÀº ³»¿ëÀ¸·Î ´Ù°¡ ¼°í ½Í
Àºµ¥.... ¾ÆÁ÷ ½Ç·Âµµ
ºÎÁ·ÇÏ°í... °ÔÀÓ ÇÁ·Î±×·¡¹Ö¿¡ ÅõÀÚÇÒ ½Ã°£µµ ÀÌÁ¨ ¾ø
°í...
±×·³ ¸¶Áö¸·À¸·Î ÇѸ¶µð ³²±â°Ú½À´Ï´Ù.
" A mountain is a
mountain, Water is water. "
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
98.1.31
¾È¿µ±â