ÀÌ°ÍÀº 1999³â ÇÏÀÌÅÚ °ÔÀÓ Á¦ÀÛ µ¿È£È¸¿¡ ¿Ã·È´ø °Á 2ȸºÐ ÀÔ´Ï´Ù.
#####################################################
------------------------------------------------------------------------
### µ¨ÆÄÀÌ·Î ÇÏ´Â Direct X - Direct Input (1/2)
------------------------------------------------------------------------
ÀÛ¼ºÀÚ
: ¾È¿µ±â ( HiTEL ID : SMgal )
Direct Input À̶õ ¹«¾ùÀΰ¡ ? Direct X ÀÇ
±¸¼º ¿ä¼Ò Áß¿¡¼ Direct Setup
´ÙÀ½À¸·Î ½¬¿î ¿ä¼ÒÀÌ´Ù.
Direct InputÀº ÀÔ·Â ÀåÄ¡¿¡ ´ëÇÑ ¸ðµç Á¤º¸¸¦ Á¦¾îÇϱâ
À§ÇÑ Direct XÀÇ ±¸
¼º¿ä¼ÒÀε¥, ÁÖ·Î °ü¸®ÇÏ´Â ÂÊÀÌ Å°º¸µå, ¸¶¿ì½º, Á¶À̽ºÆ½ÀÌ´Ù.
¸¶¿ì½º·Î´Â 3Â÷¿ø ¸¶¿ì½º±îÁö Áö¿øÇÏ°í, Á¶À̽ºÆ½À¸·Î´Â
ÀϹÝÀûÀÎ 2Ãà 4¹öÆ°
»Ó¸¸ ¾Æ´Ï¶ó »çÀÌ´õ¿ÍÀδõ°°Àº ºñÇà±â Á¶Á¾°£À̳ª ½ºÆ¼¾î¸µ ±â´ÉÀÌ ÀÖ´Â ·¹ÀÌ
½º¿ë Á¶À̽ºÆ½±îÁö Áö¿øÇÑ´Ù. ( ÇÏÁö¸¸ ÇÊÀÚ°¡ 3Â÷¿ø ¸¶¿ì½º³ª Á¶À̽ºÆ½À» °¡
Áö°íÀÖÁö ¾Ê±â ¶§¹®¿¡ °Á¿¡¼´Â ¾ð±ÞÇÏÁö ¾Ê°Ú´Ù. )
Direct Input °Á´ ÃÑ 2 ÆíÀ¸·Î ±¸¼ºµÉ ¿¹Á¤Àε¥, 1ÆíÀº
Å°º¸µå °ü¸®°í 2Æí
Àº ¸¶¿ì½º °ü¸®·Î ÇÒ ¿¹Á¤ÀÌ´Ù.
------------------------------------------------------------------------
(1) Direct Input ÀÇ Keyboard ¸¦ ¿Ö »ç¿ëÇϴ°¡ ?
À©µµ¿ìÁî¿¡´Â Å°º¸µå¸¦ °¨ÁöÇϱâ À§ÇÑ ÁÁÀº API ÇÔ¼ö°¡ ÀÌ¹Ì ÀÖ´Ù.
GetAsyncKeyState() ¶ó´Â ÇÔ¼öÀε¥ ÀÌ ÇÔ¼ö¸¸
»ç¿ëÇصµ ÇöÀçÀÇ Å°°¡ ´·¯Á®
ÀÖ´ÂÁö.. ¾Æ´Ï¸é ÀÌ ÇÔ¼ö¸¦ È£ÃâÇϱâ Àü¿¡ ƯÁ¤ Å°°¡ ´·¯Áø ÀûÀÌ ÀÖ´ÂÁö¸¦
¾Ë ¼ö ÀÖ´Ù.
ÀϹÝÀûÀÎ °ÔÀÓ( À©µµ¿ì ±â¹ÝÀÇ °ÔÀÓ )¿¡¼´Â ÀÌ ÇÔ¼ö¸¸À¸·Îµµ
ÃæºÐÈ÷ Å°º¸µå
°ü¸®¸¦ ÇÒ ¼ö ÀÖ°í Direct X ±â¹ÝÀÇ °ÔÀÓÀ̶ó°í ÇÏ´õ¶óµµ ÀÌ ÇÔ¼ö·Îµµ ÃæºÐÈ÷
Å°º¸µå ÀԷ¿¡ ¹«¸®¾øÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
±×·¸´Ù¸é Direct Input ÀÇ Keyboard ¸¦ ¿Ö »ç¿ëÇϴ°¡ ?
ÇÊÀÚ°¡ »ý°¢ÇÏ´Â ÀÌÀ¯´Â ÀÌ·¸´Ù... Direct Input ÀÇ
Keyboard ´Â DOS ½ÃÀý¿¡
°ÔÀÓ ÇÁ·Î±×·¡¸Ó°¡ Å°º¸µå ÀÎÅÍ·´Æ®¸¦ °¡·Îä¼ ¸¸µç Multi Key ¶ó´Â ±â¹ý¿¡
°¡Àå °¡±î¿î ¿ë¹ýÀ¸·Î ¾²À̱⠶§¹®¿¡ °ÔÀÓ ÇÁ·Î±×·¡¸Óµé¿¡°Ô Àͼ÷ÇÑ »ç¿ë¹ýÀ»
Á¦°øÇÑ´Ù. ±×¸®°í Å° Á¶ÇÕÀÌ ¸¹Àº ¾ÆÄÉÀ̵峪 ¾×¼Ç °ÔÀӵ¼ Å°Á¶ÇÕÀÌ °£´Ü
ÇÏ°í ±× ¼Óµµ°¡ ºü¸£´Ù.
ÀÌ Á¤µµ¸é ÃæºÐÇÑ ÀÌÀ¯°¡ µÇ¾ú´Ù°í »ý°¢ÇÏ°í ±¸ÇöÀ¸·Î µé¾î°¡°Ú´Ù.
------------------------------------------------------------------------
(2) Direct Input ÀÇ Keyboard °´Ã¼ ±¸Çö
| type
|
| TKeyState = array[0..255] of Byte;
|
| TDxInput = class
| constructor Create(hInstance : integer;
Handle : integer);
| procedure Free;
| private
| public
| DirectInput :
IDirectInput;
| DirectInputKeyboard : IDirectInputDevice;
| procedure GetKeyState(var KeyState : TKeyState);
| end;
ÀÌ·¸°Ô °£´ÜÇÑ °´Ã¼·Î Direct Input ÀÇ Keyboard °´Ã¼°¡ ¸¸µé¾îÁø´Ù.
»ý¼ºÀÚ, ¼Ò¸êÀÚ, ±×¸®°í º¯¼ö 2 °³¿Í ÇÔ¼öÇϳª...
¿ì¸®´Â Ç×»ó ±×·¸µí 10ÁÙÀÇ ¼³¸í º¸´Ù´Â 10ÁÙÀÇ Äڵ带
´õ »¡¸® ÀÌÇØÇϱ⠶§
¹®¿¡ implementation¿¡ ±¸ÇöµÇ¾î ÀÖ´Â °´Ã¼ ¸Þ¼Òµå¸¦ Á÷Á¢ º¸¸é¼ ¼³¸íÇÏ°Ú´Ù.
¾Æ·¡¿¡ º¸ÀÌ´Â °ÍÀÌ »ý¼ºÀÚ´Ù.
ÆĶó¸ÞÅÍ´Â Instance¿Í HandleÀ» ¹Þ´Â´Ù.
| constructor TDxInput.Create(hInstance
: integer; Handle : integer);
| var
| HR : HResult;
| begin
| // ¼±Á¶ÀÇ Create¸¦ ½ÇÇàÇÑ´Ù.
| Inherited Create;
|
| // Direct Input °´Ã¼¸¦ ¸¸µç´Ù.
| HR := DirectInputCreate(hInstance,DIRECTINPUT_VERSION,
| DirectInput,nil);
| if HR <> DI_OK then exit;
|
| // Å°º¸µå µð¹ÙÀ̽º¸¦ »ý¼ºÇÑ´Ù.
| HR := DirectInput.CreateDevice(GUID_SysKeyboard,
| DirectInputKeyboard,nil);
| if HR <> DI_OK then exit;
|
| // Å°º¸µå¿¡ ´ëÇÑ µ¥ÀÌÅÍ Æ÷¸ËÀ» ¼³Á¤ÇÑ´Ù.
| HR := DirectInputKeyboard.SetDataFormat(c_dfDIKeyboard);
| if HR <> DI_OK then exit;
|
| // »óÈ£ Çù·Â ·¹º§À» ¼³Á¤ÇÑ´Ù.
| HR := DirectInputKeyboard.SetCooperativeLevel(Handle,
| DISCL_NONEXCLUSIVE
or DISCL_FOREGROUND);
| if HR <> DI_OK then exit;
|
| // Å°º¸µåÀÇ Á¢±Ù ±ÇÇÑÀ» ¾ò´Â´Ù.
| HR := DirectInputKeyboard.Acquire;
| if (HR <> DI_OK) and (HR <> DI_NOEFFECT) then
begin
| // ½ÇÆÐÇßÀ» ¶§ ±× ¿øÀÎÀ» ¾Ë¾Æ º»´Ù.
| case HR of
| DIERR_NOTINITIALIZED
:
| ShowMessage('Direct
Input Error : NOTINITIALIZED');
| DIERR_INVALIDPARAM :
| ShowMessage('Direct
Input Error : INVALIDPARAM');
| DIERR_OTHERAPPHASPRIO
:
| ShowMessage('Direct
Input Error : OTHERAPPHASPRIO');
| else
| ShowMessage('Direct
Input Error');
| end;
| end;
| end;
ÀÌ°É·Î Direct InputÀÇ Keyboard¿¡ ´ëÇÑ ÃʱâÈ°¡
¸ðµÎ ³¡³µ´Ù. ±×·³ ¼øÂ÷Àû
À¸·Î ´Ù½Ã ÀÚ¼¼ÇÏ°Ô ¼³¸íÇØ º¸¸é.....
1) DirectInputCreate(hInstance,DIRECTINPUT_VERSION,DirectInput,nil);
Direct Input °´Ã¼¸¦ »ý¼ºÇÏ´Â ÇÔ¼ö´Ù.
ù¹ø° ÆĶó¸ÞÅÍ : ÀÌ °´Ã¼¸¦ »ý¼ºÇÏ·Á´Â
ÇÁ·Î±×·¥ÀÇ ÀνºÅϽº
µÎ¹ø° ÆĶó¸ÞÅÍ : Direct Input ÀÇ ¹öÀü ³Ñ¹ö, ¾Æ·¡Ã³·³ Á¤ÀǵǾî
ÀÖ´Ù.
{$IFDEF
DIRECTX3}
DIRECTINPUT_VERSION
= $0300;
{$ELSE}
DIRECTINPUT_VERSION
= $0500;
{$ENDIF}
¼¼¹ø° ÆĶó¸ÞÅÍ : Direct Input ÀÇ ÁÖ °´Ã¼ÀÎ IDirectInput ·Î
¼±¾ðµÈ º¯
¼ö°¡
var ·Î µé¾î°¡°Ô µÈ´Ù. ¼º°øÇϸé nilÀÌ ¾Æ´Ñ °ªÀÌ
µé¾î¿Â´Ù.
³×¹ø° ÆĶó¸ÞÅÍ : ¹«Á¶°Ç nilÀ» ¾´´Ù.
2) DirectInput.CreateDevice(GUID_SysKeyboard,DirectInputKeyboard,nil);
»ç¿ëÇÒ µð¹ÙÀ̽º¸¦ »ý¼ºÇÑ´Ù.
ù¹ø° ÆĶó¸ÞÅÍ : »ç¿ëÇÒ µð¹ÙÀ̽ºÀÇ
GUID¸¦ ³Ö´Â´Ù. ÀÌ¹Ì Á¤ÀǵǾî ÀÖ´Â
'½Ã½ºÅÛ
Å°º¸µå'¿¡ ´ëÇÑ GUIDÀÎ GUID_SysKeyboard¸¦ ³Ö
À¸¸é
µÈ´Ù. Âü°í·Î °Á 2Æí¿¡ ³ª¿Ã '¸¶¿ì½º' ¿¡ ´ëÇÑ
GUID´Â
GUID_SysMouse ÀÌ´Ù.
µÎ¹ø° ÆĶó¸ÞÅÍ : IDirectInputDevice ·Î ¼±¾ðµÈ º¯¼ö°¡ var
·Î µé¾î°£´Ù.
¿ª½Ã
¼º°øÇϸé nilÀÌ ¾Æ´Ñ °ªÀÌ µé¾î ¿Â´Ù.
¼¼¹ø° ÆĶó¸ÞÅÍ : ¹«Á¶°Ç nilÀ» ¾´´Ù.
3) DirectInputKeyboard.SetDataFormat(c_dfDIKeyboard);
µð¹ÙÀ̽º¿¡ ´ëÇÑ µ¥ÀÌÅÍ Æ÷¸ËÀ» ¼³Á¤ÇÑ´Ù.
ÇöÀç´Â Å°º¸µå µð¹ÙÀ̽ºÀ̹ǷΠŰº¸µå¿¡ ´ëÇÑ µ¥ÀÌÅÍ Á¤º¸¸¦ º¸³Â´Ù.
ù¹ø° ÆĶó¸ÞÅÍ : ³ªÁß¿¡ Direct InputÀ¸·ÎºÎÅÍ
µ¹·Á ¹ÞÀ» µ¥ÀÌÅÍÀÇ ÇüÀÇ
±¸Á¶Ã¼¸¦
³Ö´Â´Ù. ÀÌ¹Ì c_dfDIKeyboard, c_dfDIMouse,
c_dfDIJoystick,
c_dfDIJoystick2 µîÀÌ Á¤ÀǵǾî ÀÖÀ¸
¸ç
ÀڽŸ¸ÀÇ µ¥ÀÌÅÍ Çüµµ Á¤ÀÇÇÒ ¼ö ÀÖ´Ù.
4) DirectInputKeyboard.SetCooperativeLevel(Handle,
DISCL_NONEXCLUSIVE
or DISCL_FOREGROUND);
»óÈ£ Çù·Â ·¹º§À» ¼³Á¤ÇÑ´Ù. ÀÌ°ÍÀº µð¹ÙÀ̽º¸¦
ÀÚ½ÅÀÌ µ¶Á¡ÇÒ °ÍÀΰ¡? ¾Æ
´Ï¸é ´Ù¸¥ ÇÁ·Î±×·¥µµ µ¿½Ã¿¡ »ç¿ëÇÒ ¼ö ÀÖ°Ô ÇÏ´À³Ä¿¡ ´ëÇÑ °ÍÀ»
Á¤ÀÇ ÇÑ
´Ù. ÆĶó¸ÞÅÍ À̸§À» º¸¸é ¾Ë°ÚÁö¸¸ NONEXCLUSIVE ÇÏ¸é¼ FOREGROUND
¿¡¼
¸¸ µ¿ÀÛÇϵµ·Ï Çß´Ù. ( ½±°Ô ¸»ÇÏ¸é µý ÇÁ·Î±×·¥µµ Å°º¸µå ¾µ
¼öÀÖ°í ÇöÀç
HandleÀ» º¸³½ À©µµ¿ì¿¡ Focus °¡ ÀÖÀ» ¶§¸¸ Å°º¸µå Á¤º¸¸¦
¹ÞÀ» ¼ö ÀÖ°Ô
¼³Á¤Çß´Ù. )
ù¹ø° ÆĶó¸ÞÅÍ : Å°º¸µå Á¤º¸¸¦ ¹ÞÀ» À©µµ¿ìÀÇ ÇÚµé
µÎ¹ø° ÆĶó¸ÞÅÍ : Çù·Â ·¹º§¿¡ ´ëÇÑ Ç÷¡±×°¡ µé¾î°£´Ù.
DISCL_EXCLUSIVE
- µý ÇÁ·Î±×·¥¿¡¼´Â Aquire() ÇÏ°í ÀÖ´Â µ¿¾È¿¡
Å°º¸µå¸¦
»ç¿ëÇÒ ¼ö°¡ ¾ø´Ù.
DISCL_NONEXCLUSIVE - µý ÇÁ·Î±×·¥°ú
ŵµå Á¤º¸¸¦ °øÀ¯ÇÑ´Ù.
DISCL_FOREGROUND -
À©µµ¿ì¿¡ Focus°¡ ÀÖÀ» ¶§¸¸ Å°º¸µå Á¤º¸¸¦ ¹Þ
À»
¼ö ÀÖ´Ù.
DISCL_BACKGROUND -
À©µµ¿ì°¡ ºñÈ°¼ºµÇ¾îµµ Å°º¸µå Á¤º¸¸¦ ¹ÞÀ» ¼ö
°¡
ÀÖ´Ù.
( DISCL_EXCLUSIVE
¿Í DISCL_NONEXCLUSIVE ´Â µ¿½Ã¿¡ »ç¿ëÇÒ ¼ö ¾ø°í
DISCL_FOREGROUND
¿Í DISCL_BACKGROUND µµ ¸¶Âù°¡Áö´Ù. )
5) DirectInputKeyboard.Acquire;
µð¹ÙÀ̽ºÀÇ Á¢±Ù ±ÇÇÑÀ» ¾ò´Â´Ù. ÇöÀç´Â
Å°º¸µå·Î Á¤ÀǵǾî ÀÖÀ¸¹Ç·Î Å°º¸
µå¿¡ ´ëÇÑ Á¢±Ù ±ÇÇÑÀÌ´Ù. Acquire¸¦ È£Ãâ ÇÏÁö ¾ÊÀ¸¸é Å°º¸µåÀÇ
µ¥ÀÌÅ͸¦
°¡Á® ¿Ã ¼ö ¾ø´Ù.
±×¸®°í ¸®ÅÏ °ªÀÌ À§ÀÇ ´Ù¸¥ ÇÔ¼ö¿Í´Â Á» ´Ù¸£´Ù´Â °ÍÀ» ´À²¼À» °ÍÀÌ´Ù.
if (HR <> DI_OK) and (HR <> DI_NOEFFECT) then
ÀÌ·± ½ÄÀ¸·Î ¼º°øÇßÀ» ¶§ÀÇ °ªÀº DI_OK
»Ó¸¸ ¾Æ´Ï¶ó S_FALSE ¶ó´Â °ªÀÏ ¼ö
µµ ÀÖ´Ù. DI_OK ´Â Direct InputÀÌ ¼º°øÇßÀ» ¶§ Ç×»ó µ¹·ÁÁÖ´Â
HResult °ª
À̸ç, DI_NOEFFECT´Â ÀÌ¹Ì Acquire¸¦ ÀÌ¹Ì È£Ãâ ÇÑ »óÅÂÀÏ ¶§ÀÇ
¸®ÅÏ °ªÀÌ
´Ù.
ÀÌ·¸°Ô »ý¼ºÀÚ¿¡ ´ëÇÑ ºÎºÐÀÌ ±¸¼ºµÈ´Ù.
±×·¯¸é À̹ø¿¡´Â ¼Ò¸êÀÚ¿¡ ´ëÇؼ ¾Ë¾Æ º¸ÀÚ.
| procedure TDxInput.Free;
| begin
| // Å°º¸µå Á¢±Ù ±ÇÇÑ ÇØÁ¦
| DirectInputKeyboard.Unacquire;
|
| // Direct Input µð¹ÙÀ̽º °´Ã¼ ÇØÁ¦
| DirectInputKeyboard._Release;
| Pointer(DirectInputKeyboard) := nil;
|
| // Direct Input °´Ã¼ ÇØÁ¦
| DirectInput._Release;
| Pointer(DirectInput) := nil;
|
| // ¼±Á¶ÀÇ Free¸¦ ½ÇÇàÇÑ´Ù.
| Inherited;
| end;
»ý¼ºÀÚ¿¡ ºñÇؼ´Â ºñ±³Àû °£´ÜÇÏ´Ù. ±×·³ ¼³¸í ÇÏÀÚ¸é...
1) DirectInputKeyboard.Unacquire;
Aquire ¸Þ¼Òµå¿¡ ÀÇÇØ ¾ò¾îÁø Á¢±Ù ±ÇÇÑÀ» ÇØÁ¦ÇÑ´Ù.
2) DirectInputKeyboard._Release;
Pointer(DirectInputKeyboard) := nil;
Direct Input µð¹ÙÀ̽º °´Ã¼¸¦ ÇØÁ¦ÇÑ´Ù.
COM ¿¡¼´Â ±×³É Release¸¦ »ç¿ë
Çϴµ¥ _Release »ç¿ëÇÏ´Â ÀÌÀ¯´Â, µ¨ÆÄÀÌ 2 ÀÇ OLE2 ¿Í´Â ´Ù¸¥,
µ¨ÆÄÀÌ 3
ÀÇ À̻󿡼 Áö¿øÇÏ´Â IUnknown ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇϱ⠶§¹®ÀÌ´Ù.
3) DirectInput._Release;
Pointer(DirectInput) := nil;
Direct Input °´Ã¼¸¦ ÇØÁ¦ÇÑ´Ù. ¿Ö Release¶ó´Â
°úÁ¤ÀÌ ÇÊ¿äÇÑÁö´Â COM ¿¡
°ü·ÃµÈ Ã¥ÀÚ¸¦ ÀÐ¾î º¸±â ¹Ù¶õ´Ù. Âü°í·Î Direct X ´Â ¸ðµÎ COM
±â¹ÝÀÌ´Ù.
±×·³ ÀÌÁ¦ µü ÇϳªÀÇ ÇÔ¼ö¸¸ ³²¾Ò´Ù.
| procedure TDxInput.GetKeyState(var
KeyState : TKeyState);
| var
| HR : HResult;
| begin
| // Å°º¸µåÀÇ »óŸ¦ Àд´Ù.
| HR := DirectInputKeyboard.GetDeviceState(SizeOf(KeyState),@KeyState);
| // ¸¸¾à ÀÔ·Â ÀåÄ¡¿¡ ´ëÇÑ Á¤º¸¸¦ ÀÐ¾î ¹ö·ÈÀ¸¸é ´Ù½Ã Aquire
ÇÑ´Ù.
| if HR = DIERR_INPUTLOST then DirectInputKeyboard.Acquire;
| end;
1) DirectInputKeyboard.GetDeviceState(SizeOf(KeyState),@KeyState);
µð¹ÙÀ̽ºÀÇ »óŸ¦ Àд´Ù. ÇöÀç´Â DirectInputKeyboard
°¡ Å°º¸µå·Î Á¤ÀÇ
µÇ¾úÀ¸¹Ç·Î Å°º¸µå¿¡ ´ëÇÑ Á¤º¸¸¦ ÀÐ¾î ¿Â´Ù.
ù¹ø° ÆĶó¸ÞÅÍ : µÎ¹ø° ÆĶó¸ÞÅÍ¿¡ µé¾î°¡´Â ¹öÆÛÀÇ »çÀÌÁ ³Ö´Â´Ù.
µÎ¹ø° ÆĶó¸ÞÅÍ : ÀÔ·Â ÀåÄ¡ÀÇ Á¤º¸¸¦
°¡Á®¿À´Â ¹öÆÛÀÇ Æ÷ÀÎÅ͸¦ ³Ö´Â´Ù.
¹°·Ð
±× ±¸Á¶´Â SetDataFormat() ¿¡¼ ÀÌ¹Ì Á¤ÀÇÇß´Ù.
------------------------------------------------------------------------
(3) Direct Input ÀÇ Keyboard °´Ã¼ ¿ë¹ý
°´Ã¼¸¦ ±¸ÇöÇßÀ¸´Ï ÀÌÁ¦´Â »ç¿ëÇÏ´Â ¹æ¹ý¸¸ ³²¾Ò´Ù.
ÀÏ´Ü °´Ã¼ÀÇ ¼±¾ðÀº ´ÙÀ½Ã³·³ ÇÏ¸é µÈ´Ù.
DxInput : TDxInput;
±×¸®°í »ý¼ºÀº
DxInput := TDxInput.Create(hInstance,Handle);
¼Ò¸êÀº
DxInput.Free;
DxInput := nil;
ÀÌ·¸°Ô »ç¿ëÇÑ´Ù.
±×·¸´Ù¸é ¿ë¹ýÀ» º¸ÀÚ...
| var
| KeyState : TKeyState;
|
| begin
| // KeyState ¿¡ Å°º¸µå »óŸ¦ °¡Á®¿Â´Ù.
| DxInput.GetKeyState(KeyState);
|
| // ¿À¸¥ÂÊ È»ìǥŰ°¡ ´·¯Á® ÀÖ´Â »óÅÂÀΰ¡ ?
| if KeyState[DIK_RIGHT] and $80 > 0 then
| // ¿ÞÂÊ È»ìǥŰ°¡ ´·¯Á® ÀÖ´Â »óÅÂÀΰ¡ ?
| if KeyState[DIK_LEFT ] and $80 > 0 then
| // À§ÂÊ È»ìǥŰ°¡ ´·¯Á® ÀÖ´Â »óÅÂÀΰ¡ ?
| if KeyState[DIK_UP ] and $80 > 0 then
| // ¾Æ·¡ÂÊ È»ìǥŰ°¡ ´·¯Á® ÀÖ´Â »óÅÂÀΰ¡ ?
| if KeyState[DIK_DOWN ] and $80 > 0 then
| end;
KeyState ¿¡ µÇµ¹¾Æ ¿À´Â °ªÀº TKeyState ¿¡ ¼±¾ðµÈ ´ë·Î
256 °³ÀÇ byte ¹è¿
ÀÌ´Ù. ±×¸®°í ±× ¹è¿µéÀº Direct Input Çì´õ¿¡ Á¤ÀÇµÈ DIK_RIGHT ¿Í °°Àº »ó
¼ö¿¡ ÀÇÇØ Æ¯Á¤ Á¤º¸¸¦ °¡Á®¿Ã ¼ö°¡ ÀÖ´Ù. DOS ¶§ÀÇ ½ºÄµÄÚµå¿Í À¯»çÇÏ°Ô Å°
º¸µåÀÇ ½ÇÁ¦ ¹°¸®ÀûÀÎ ¹öÆ°¿¡ ¹Ù·Î ´ëÀÀÇÑ´Ù. Áï 'a' Å°¸¦ ´©¸£¸é ¹«Á¶°Ç 'a'
Å°·Î ÀνÄÇÑ´Ù. ( ÀϹÝÀûÀÎ Å°º¸µå¶ó¸é Sfhit - 'a' °¡ µÇ¸é 'A' ·Î ÀνÄÇÏÁö
¸¸ ¿©±â¿¡¼´Â '¿ÞÂÊ Shift' ¿Í 'a'·Î µû·Î ÀνÄÇÑ´Ù. )
±× ¹è¿µé¿¡ ÀúÀåµÈ °ªÀÇ MSB(ÃÖ»óÀ§ºñÆ®)°¡ 1À̸é ÇöÀç
±× Å°°¡ ´·¯Áø °ÍÀÌ
°í 0 À̶ó¸é Å°°¡ ¶¼¾îÁø °ÍÀÌ´Ù. ÀÌ Á¤º¸¸¦ °¡Áö°í DOS ¶§ÀÇ Multi-Key ó·³
Çڵ鸵Çϸé ÀÌÀü¿¡ ´·¯Á³¾ú´ÂÁö.. ¶Ç´Â ÇöÀç ¸î°³ÀÇ Å°°¡ Á¶ÇյǾú´ÂÁö µîÀ»
¾Ë¼ö°¡ÀÖ´Ù. ( BM98 À̶ó´Â À½¾Ç °ÔÀÓ¿¡ º¸¸é µ¿½Ã¿¡ 6Å°¸¦ ´·¯µµ µ¿½Ã¿¡ ¸ð
µÎ ÀνÄÀ» ÇØ ³»´Â °ÍÀ» º¼ ¼ö ÀÖÀ»°ÍÀÌ´Ù. )
------------------------------------------------------------------------
(4) Direct Input ÀÇ Keyboard °´Ã¼ »ç¿ë ¿¹Á¦
±×·³ ½ÇÁ¦·Î »ç¿ëÀ» Çغ¸ÀÚ¸é....
1. À§¿¡¼ ¸¸µç Direct Input °´Ã¼¸¦ µû·Î Unit ·Î ÀúÀåÇÑ´Ù.
2. »õ·Î¿î ÇÁ·ÎÁ§Æ®¸¦ ¸¸µé°í, Unit1 ¿¡´Â ¹æ±Ý ¸¸µç Direct
Input °´Ã¼°¡ ÀÖ
´Â unit¸¦ usesÇÑ´Ù. ±×¸®°í Direct Input Çì´õÀÎ DInput.Pas
µµ usesÇÑ´Ù.
3. Æû¿¡´Â ŸÀ̸Ó, ¶óº§, ¹öÆ°À» ¸¸µç´Ù.
4. TForm1 ÀÇ public ¿¡ 'DxInput : TDxInput;' À» Ãß°¡ÇÑ´Ù.
5. ¹öÆ°ÀÇ Å¬¸¯ À̺¥Æ®¿¡ ´ÙÀ½°ú °°ÀÌ ÀÔ·ÂÇÑ´Ù.
DxInput := TDxInput.Create(hInstance,Handle);
Timer1.Enabled := TRUE;
6. Form ÀÇ Close À̺¥Æ®¿¡ ´ÙÀ½°ú °°ÀÌ ÀÔ·ÂÇÑ´Ù.
Timer1.Enabled := FALSE;
DxInput.Free;
DxInput := nil;
7. ŸÀÌ¸Ó À̺¥Æ®ÀÇ IntervalÀ» 1·Î ÇÏ°í À̺¥Æ®¿¡´Â ´ÙÀ½°ú °°ÀÌ ÀÔ·ÂÇÑ´Ù.
var
KeyState : TKeyState;
s : string;
begin
DxInput.GetKeyState(KeyState);
s := '';
if KeyState[DIK_RIGHT] and $80 > 0 then s := s + 'Right
';
if KeyState[DIK_LEFT ] and $80 > 0 then s := s + 'Left
';
if KeyState[DIK_UP ] and $80 > 0 then s :=
s + 'Up ';
if KeyState[DIK_DOWN ] and $80 > 0 then s := s + 'Down
';
Label1.Caption := s;
end;
8. ½ÇÇàÇÑ´Ù.
9. ¹öÆ°À» ´©¸£¸é Direct Input ÀÇ Å°º¸µå Çڵ鸵ÀÌ ½ÃÀ۵Ǵµ¥...
ÇöÀç´Â È
»ìÇ¥ Å°¿¡¸¸ ¹ÝÀÀÇÑ´Ù. µ¿½Ã¿¡ È»ìǥ۸¦ ¿©·¯°³ ´©¸£°Å³ª µ¿½Ã¿¡
4°³¸¦
´·¯µµ ¸ðµÎ ¹ÝÀÀÇÑ´Ù.
³ª¸ÓÁö Å°¿¡ ´ëÇÑ »ó¼ö °ªÀº µ¨ÆÄÀÌ¿ë Direct X ÀÇ DInput.Pas
¿¡ º¸¸é Àß ³ª
¿Í ÀÖ´Ù.
------------------------------------------------------------------------
1999 / 10 / 31
#####################################################
------------------------------------------------------------------------
###
µ¨ÆÄÀÌ·Î ÇÏ´Â Direct X - Direct Input
(2/2)
------------------------------------------------------------------------
ÀÛ¼ºÀÚ
: ¾È¿µ±â ( HiTEL ID : SMgal )
¾Õ Àå¿¡¼ ¿ì¸®´Â Direct Input ¿¡ ÀÇÇÑ Å°º¸µå »óÅ Àб⸦ Çß¾ú´Ù.
±×·¸´Ù¸é ÀÌÁ¦´Â ¸¶¿ì½º¿¡ ´ëÇÑ »óŸ¦ Àоî¾ß ÇÒ Â÷·ÊÀε¥.... ¾Õ Àå¿¡¼µµ
°£·«ÇÏ°Ô ¾ð±ÞÇßµíÀÌ
Å°º¸µå¿¡¼ Çß´ø ¹æ½ÄÀ¸·Î ½±°Ô Á¢±Ù ÇÒ ¼ö°¡ ÀÖ´Ù.
------------------------------------------------------------------------
(1) Direct Input ÀÇ Mouse ¸¦ ¿Ö »ç¿ëÇϴ°¡ ?
À©µµ¿ìÁî¿¡´Â ¸¶¿ì½º À§Ä¡¸¦ °¨ÁöÇϱâ À§ÇÑ ÁÁÀº API ÇÔ¼ö°¡ ÀÌ¹Ì ÀÖ´Ù.
GetCursorPos() ¶ó´Â ÇÔ¼öÀε¥ ÀÌ ÇÔ¼ö¸¸ »ç¿ëÇصµ ÇöÀçÀÇ ¸¶¿ì½ºÀÇ À§Ä¡¸¦
¾Ë ¼ö°¡ ÀÖ°í,
¾Õ¿¡¼ ¾ð±ÞÇÑ GetAsyncKeyState() ÇÔ¼ö¿¡¼ VK_LBUTTON µîÀ»
»ç¿ëÇϸé ÇöÀçÀÇ ¸¶¿ì½º ¹öÆ° »óŵµ ¾Ë ¼ö°¡
ÀÖ´Ù.
ÀϹÝÀûÀÎ °ÔÀÓ( À©µµ¿ì ±â¹ÝÀÇ °ÔÀÓ )¿¡¼´Â ÀÌ ÇÔ¼ö¸¸À¸·Îµµ ÃæºÐÈ÷ ¸¶¿ì½º
°ü¸®¸¦ ÇÒ ¼ö ÀÖ°í
Direct X ±â¹ÝÀÇ °ÔÀÓÀ̶ó°í ÇÏ´õ¶óµµ ÀÌ ÇÔ¼ö·Îµµ ÃæºÐÈ÷
¸¶¿ì½º »óÅ Á¤º¸ ¾ò´Âµ¥ ¹«¸®¾øÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
±×·¸´Ù¸é Direct Input ÀÇ Mouse ¸¦ ¿Ö »ç¿ëÇϴ°¡ ?
½ÇÁ¦·Î ¸¶¿ì½º ¹öÆ°ÀÇ »óŸ¦ ¾ò±â À§Çؼ´Â GetAsyncKeyState() ¸¦ »ç¿ëÇÏ
³ª Direct
Input ¸¦ »ç¿ëÇϳª ¶È°°´Ù. ÇÏÁö¸¸ Direct Input ¸¦ »ç¿ëÇÏ¸é µ¿
½Ã¿¡ ¸¶¿ì½º ¹öÆ°µéÀÇ »óÅÂ¿Í ¸¶¿ì½º À§Ä¡ Á¤º¸¸¦ ¾ò¾î ¿À±â
¶§¹®¿¡ ¼Óµµ°¡
»¡¶óÁø´Ù. ±×¸®°í GetCursorPos() ¶ó´Â ÇÔ¼ö´Â ´ÜÁö À©µµ¿ì ¹ÙÅÁȸ鿡¼ÀÇ
Àý´ëÀûÀÎ À§Ä¡¸¸À» µ¹·ÁÁÖÁö¸¸
Direct Input ¿¡¼´Â X, Y Ãà¿¡ ´ëÇÑ À̵¿ º¯
·®(Delta)À» ±âÁØÀ¸·Î Çϱ⠶§¹®¿¡ ¸¶¿ì½ºÀÇ À§Ä¡¸¦ Àâ´Â °Í »Ó¾Æ´Ï¶ó
¸¶¿ì
½º°¡ ´ÜÀ§ ½Ã°£¿¡ ¾ó¸¶¸¸ÅÀÇ ¼Óµµ·Î ¿òÁ÷¿´´ÂÁö±îÁöµµ ¾Ë¾Æ ³¾ ¼ö°¡ ÀÖ´Ù.
¿¹¸¦µé¾î ´ç±¸ °ÔÀÓÀ» ¸¸µå´Âµ¥ ¸¶¿ì½º¸¦ ¹Ð¾î¼ Å¥´ë¸¦ Á¶Á¾ÇÑ´Ù°í Çϸé
°øÀ» Ä¥ ¶§ ¼ø°£ÀûÀÎ y
º¯·®À¸·Î ÈûÀÇ ¼¼±â¸¦ ÃøÁ¤ÇÏ°í x ÀÇ º¯·®À¸·Î ºø³ª
°£ Á¤µµ¸¦ ¾Ë ¼ö ÀÖÀ» °ÍÀÌ´Ù.
ÀÌ Á¤µµ¸é ÃæºÐÇÑ ÀÌÀ¯°¡ µÇ¾ú´Ù°í »ý°¢ÇÏ°í ±¸ÇöÀ¸·Î µé¾î°¡°Ú´Ù.
------------------------------------------------------------------------
(2) Direct Input ÀÇ Mouse °´Ã¼ ±¸Çö
| type
| TMouseState =
TDIMouseState;
|
| TDxInput = class
| constructor
Create(hInstance : integer; Handle : integer);
| procedure Free;
|
private
| public
| DirectInput : IDirectInput;
|
DirectInputMouse : IDirectInputDevice;
| procedure
GetMouseState(var MouseState : TMouseState);
| end;
ÀÌ·¸°Ô °£´ÜÇÑ °´Ã¼·Î Direct Input ÀÇ Mouse °´Ã¼°¡ ¸¸µé¾îÁø´Ù.
»ý¼ºÀÚ, ¼Ò¸êÀÚ, ±×¸®°í º¯¼ö 2 °³¿Í ÇÔ¼öÇϳª...
¿ì¸®´Â Ç×»ó ±×·¸µí 10ÁÙÀÇ ¼³¸í º¸´Ù´Â 10ÁÙÀÇ Äڵ带 ´õ »¡¸® ÀÌÇØÇϱ⠶§
¹®¿¡
implementation¿¡ ±¸ÇöµÇ¾î ÀÖ´Â °´Ã¼ ¸Þ¼Òµå¸¦ Á÷Á¢ º¸¸é¼ ¼³¸íÇÏ°Ú´Ù.
¾Æ·¡¿¡ º¸ÀÌ´Â °ÍÀÌ »ý¼ºÀÚ´Ù.
ÆĶó¸ÞÅÍ´Â Instance¿Í HandleÀ» ¹Þ´Â´Ù.
| constructor TDxInput.Create(hInstance :
integer; Handle : integer);
| var
| HR : HResult;
| begin
| //
¼±Á¶ÀÇ Create¸¦ ½ÇÇàÇÑ´Ù.
| Inherited Create;
|
| // Direct Input °´Ã¼¸¦
¸¸µç´Ù.
| HR := DirectInputCreate(hInstance,DIRECTINPUT_VERSION,
|
DirectInput,nil);
| if HR <>
DI_OK then exit;
|
| // ¸¶¿ì½º µð¹ÙÀ̽º¸¦ »ý¼ºÇÑ´Ù.
| HR :=
DirectInput.CreateDevice(GUID_SysMouse,DirectInputMouse,nil);
| if HR
<> DI_OK then exit;
|
| // ¸¶¿ì½º¿¡ ´ëÇÑ µ¥ÀÌÅÍ Æ÷¸ËÀ» ¼³Á¤ÇÑ´Ù.
| HR :=
DirectInputMouse.SetDataFormat(c_dfDIMouse);
| if HR <> DI_OK then
exit;
|
| // »óÈ£ Çù·Â ·¹º§À» ¼³Á¤ÇÑ´Ù.
| HR :=
DirectInputMouse.SetCooperativeLevel(Handle,
|
DISCL_EXCLUSIVE or DISCL_FOREGROUND);
|
if HR <> DI_OK then exit;
|
| // ¸¶¿ì½ºÀÇ Á¢±Ù ±ÇÇÑÀ» ¾ò´Â´Ù.
| HR
:= DirectInputMouse.Acquire;
| if (HR <> DI_OK) and (HR <>
DI_NOEFFECT) then begin
| // ½ÇÆÐÇßÀ» ¶§ ±× ¿øÀÎÀ» ¾Ë¾Æ º»´Ù.
| case HR
of
| DIERR_NOTINITIALIZED :
| ShowMessage('Direct
Input Error : NOTINITIALIZED');
| DIERR_INVALIDPARAM :
|
ShowMessage('Direct Input Error : INVALIDPARAM');
|
DIERR_OTHERAPPHASPRIO :
| ShowMessage('Direct Input
Error : OTHERAPPHASPRIO');
| else
|
ShowMessage('Direct Input Error');
| end;
|
end;
ÀÌ°É·Î Direct InputÀÇ Mouse¿¡ ´ëÇÑ ÃʱâÈ°¡ ¸ðµÎ ³¡³µ´Ù. ±×·³ ¼øÂ÷ÀûÀ¸
·Î ´Ù½Ã
´ëÃæ ¼³¸íÇØ º¸¸é..... ( 1 Æí¿¡¼ ÀÚ¼¼ÇÏ°Ô Ç߱⠶§¹®¿¡.. )
1) DirectInputCreate(hInstance,DIRECTINPUT_VERSION,DirectInput,nil);
Direct Input °´Ã¼¸¦ »ý¼ºÇÏ´Â ÇÔ¼ö´Ù.
Keyboard ÀÏ ¶§¿Í °°Àº
¸í·É¾î´Ù.
2)
DirectInput.CreateDevice(GUID_SysMouse,DirectInputMouse,nil);
»ç¿ëÇÒ
µð¹ÙÀ̽º¸¦ »ý¼ºÇÑ´Ù.
GUID_SysMouse°¡ ù¹ø° ÆĶó¸ÞÅÍ·Î µé¾î °¬±â ¶§¹®¿¡ IDirectInputDevice
·Î
¼±¾ðµÈ º¯¼öÀÎ DirectInputMouseÀº ¸¶¿ì½º µð¹ÙÀ̽º·Î »ý¼ºµÈ´Ù.
3) DirectInputMouse.SetDataFormat(c_dfDIMouse);
µð¹ÙÀ̽º¿¡ ´ëÇÑ µ¥ÀÌÅÍ Æ÷¸ËÀ» ¼³Á¤ÇÑ´Ù.
ÇöÀç´Â ¸¶¿ì½º µð¹ÙÀ̽ºÀ̹ǷÎ, ¸¶¿ì½º Á¤º¸¸¦ À§ÇÑ
±¸Á¶Ã¼ Æ÷¸ËÀ̶ó´Â °Í
À» µð¹ÙÀ̽º¿¡°Ô ¾Ë·ÁÁØ´Ù.
4)
DirectInputMouse.SetCooperativeLevel(Handle,
DISCL_EXCLUSIVE
or DISCL_FOREGROUND);
»óÈ£ Çù·Â ·¹º§À» ¼³Á¤ÇÑ´Ù. Å°º¸µå µð¹ÙÀ̽ºÀÏ ¶§¿Í´Â ´Þ¸® EXCLUSIVE ·Î
¼³Á¤À» ÇÑ °ÍÀ»
´«¿©°Ü º¸±â ¹Ù¶õ´Ù. DISCL_EXCLUSIVE ·Î ¼³Á¤À» ÇÏ¸é ´Ù
¸¥ ÇÁ·Î±×·¥¿¡ ´ëÇؼ´Â ¹èŸÀûÀ¸·Î ¸¶¿ì½º Á¤º¸¸¦ µ¶Á¡ÇÒ ¼ö°¡
ÀÖÀ¸¸ç ¸¶
¿ì½º Ä¿¼´Â GDI ȯ°æ¿¡¼ »ç¶óÁö°Ô µÈ´Ù. Áï ¸¶¿ì½º Ä¿¼´Â ÀÚ½ÅÀÌ Á÷Á¢
±×·ÁÁÖ¾î¾ß Çϴµ¥... ¸ðµç °ÔÀÓÀÌ
±×·¸µí µðÆúÆ® ¸¶¿ì½º´Â »ç¶óÁö°í ÀÚ½Å
ÀÇ °ÔÀÓ¿¡ ¸Â´Â ¸¶¿ì½º Ä¿¼°¡ ¶°¾ß ÇÒ °ÍÀÌ´Ù.
¹°·Ð DISCL_NONEXCLUSIVE ·Îµµ ¼³Á¤Çصµ µÈ´Ù. ±×·¸°Ô ÇÏ¸é ¸¶¿ì½º Ä¿¼°¡
´«¿¡
º¸ÀÌ°Ô µÈ´Ù. ÇÏÁö¸¸ ¸¶¿ì½º¸¦ Àâ°í ³µ¿À» ºÎ¸®¸é¼ ¾Æ·¡ À§·Î Ä¿¼
¸¦ ¿òÁ÷¿© º¸¸é ¿ø·¡ ¿øÇß´ø ÁÂÇ¥·ÎºÎÅÍ ÀÚ²Ù ¹þ¾î³´Ù(¿ÀÂ÷°¡
³´Ù)´Â °Í
À» ¾Ë ¼ö ÀÖÀ» °ÍÀÌ´Ù. ( ¿©±â¼ ÁÂÇ¥¶õ ³í¸®ÀûÀ¸·Î º¯·®À» °è»êÇؼ ³ªÅ¸
³»´Â ¸¶¿ì½º À§Ä¡¸¦ ¸»ÇÑ´Ù.
)
±×¸®°í Å°º¸µå ÇÒ ¶§ »© ¸ÔÀº ºÎºÐÀÌ Àִµ¥, Å°º¸µå´Â ±âº»ÀûÀ¸·Î ¹èŸÀû
À¸·Î »ç¿ëµÇ¾î Áú¼ö°¡
¾ø´Ù. ÇÏÁö¸¸ Direct X 7.0 ¿¡¼´Â Å°º¸µåµµ ¹èŸ
ÀûÀ¸·Î »ç¿ëµÉ ¼ö ÀÖ´Ù°í ÇÏ´Ï Âü°í·Î ¾Ë¾Æ µÎÀÚ.
5) DirectInputMouse.Acquire;
µð¹ÙÀ̽ºÀÇ Á¢±Ù ±ÇÇÑÀ» ¾ò´Â´Ù. ÇöÀç´Â ¸¶¿ì½º·Î Á¤ÀǵǾî ÀÖÀ¸¹Ç·Î ¸¶¿ì
½º¿¡ ´ëÇÑ Á¢±Ù
±ÇÇÑÀÌ´Ù. Acquire¸¦ È£Ãâ ÇÏÁö ¾ÊÀ¸¸é ¸¶¿ì½ºÀÇ µ¥ÀÌÅ͸¦
°¡Á® ¿Ã ¼ö ¾ø´Ù. ³ª¸ÓÁö´Â Å°º¸µåÀÏ ¶§¿Í °°´Ù.
±×·¯¸é À̹ø¿¡´Â ¼Ò¸êÀÚ¿¡ ´ëÇؼ ¾Ë¾Æ º¸ÀÚ.
| procedure TDxInput.Free;
| begin
|
// ¸¶¿ì½º Á¢±Ù ±ÇÇÑ ÇØÁ¦
| DirectInputMouse.Unacquire;
|
| // Direct
Input µð¹ÙÀ̽º °´Ã¼ ÇØÁ¦
| DirectInputMouse._Release;
|
Pointer(DirectInputMouse) := nil;
|
| // Direct Input °´Ã¼ ÇØÁ¦
|
DirectInput._Release;
| Pointer(DirectInput) := nil;
|
| //
¼±Á¶ÀÇ Free¸¦ ½ÇÇàÇÑ´Ù.
| Inherited;
| end;
³»¿ëÀº Å°º¸µå À϶§¿Í ¿ÏÀüÈ÷ °°´Ù.
±×·³ ÀÌÁ¦ µü Çϳª ³²Àº °¡Àå Áß¿äÇÑ ÇÔ¼ö¸¦ º¸ÀÚ.
¿ª½Ã Å°º¸µåÀÏ ¶§¿Í ¿ë¹ýÀº
°°´Ù.
| procedure TDxInput.GetMouseState(var MouseState
: TMouseState);
| var
| HR : HResult;
| begin
| HR :=
DirectInputmouse.GetDeviceState(SizeOf(MouseState),@MouseState);
| if HR =
DIERR_INPUTLOST then DirectInputMouse.Acquire;
| end;
1) DirectInputMouse.GetDeviceState(SizeOf(KeyState),@KeyState);
µð¹ÙÀ̽ºÀÇ »óŸ¦ Àд´Ù. ÇöÀç´Â DirectInputMouse°¡ ¸¶¿ì½º·Î Á¤ÀǵǾú
À¸¹Ç·Î
¸¶¿ì½º¿¡ ´ëÇÑ Á¤º¸¸¦ ÀÐ¾î ¿Â´Ù.
Å°º¸µåÀÏ ¶§¿Í ´Ù¸¥ Á¡Àº TMouseState ¶ó´Â ±¸Á¶Ã¼ÀÌ´Ù..
| type
| TMouseState =
TDIMouseState;
À§ÀÇ ¼Ò½º¿¡ º¸¸é ÀÌ·± ºÎºÐÀÌ ÀÖ´Ù. DInput Çì´õ¿¡ ÀÖ´Â TDIMouseState¸¦
±×´ë·Î
»ç¿ëÇÑ °ÍÀε¥ TDIMouseState ÀÇ ±¸Á¶´Â ´ÙÀ½°ú °°´Ù.
TDIMouseState = packed record
lX:
Longint;
lY: Longint;
lZ: Longint;
rgbButtons:
Array [0..3] of BYTE;
end;
IX - ¸¶¿ì½º°¡ X ÃàÀ¸·Î À̵¿ÇÑ º¯·®
IY - ¸¶¿ì½º°¡ Y ÃàÀ¸·Î À̵¿ÇÑ
º¯·®
IZ - ¸¶¿ì½º°¡ Z ÃàÀ¸·Î À̵¿ÇÑ º¯·® ( 3 Â÷¿ø ¸¶¿ì½º Áö¿ø¿ëÀÌ´Ù. )
rgbButtons[0] - ¿ÞÂÊ ¸¶¿ì½º
¹öÆ°ÀÌ ´·¯Áö¸é MSB°¡ 1 ±×·¸Áö ¾ÊÀ¸¸é 0
rgbButtons[1] - ¿À¸¥ÂÊ ¸¶¿ì½º ¹öÆ°ÀÌ ´·¯Áö¸é MSB°¡ 1 ±×·¸Áö ¾ÊÀ¸¸é
0
rgbButtons[2] - 2 ¹öÆ° ÀÌ»óÀÇ ¸¶¿ì½º Áö¿ø¿ë
rgbButtons[3] - 2 ¹öÆ° ÀÌ»óÀÇ ¸¶¿ì½º
Áö¿ø¿ë
ÀÌ·¸°Ô ÀÌ·ç¾îÁ® ÀÖ´Ù.
------------------------------------------------------------------------
(3) Direct Input ÀÇ Mouse °´Ã¼ ¿ë¹ý
°´Ã¼¸¦ ±¸ÇöÇßÀ¸´Ï ÀÌÁ¦´Â »ç¿ëÇÏ´Â ¹æ¹ý¸¸ ³²¾Ò´Ù.
ÀÏ´Ü °´Ã¼ÀÇ ¼±¾ðÀº ´ÙÀ½Ã³·³ ÇÏ¸é µÈ´Ù.
DxInput : TDxInput;
±×¸®°í »ý¼ºÀº
DxInput :=
TDxInput.Create(hInstance,Handle);
¼Ò¸êÀº
DxInput.Free;
DxInput := nil;
ÀÌ·¸°Ô »ç¿ëÇÑ´Ù.
±×·¸´Ù¸é ¿ë¹ýÀ» º¸ÀÚ...
| var
| MouseState : TMouseState;
|
|
begin
| // MouseState ¿¡ ¸¶¿ì½º »óŸ¦ °¡Á®¿Â´Ù.
|
DxInput.GetMouseState(MouseState);
|
| // ÇöÀçÀÇ x, y º¯·®À» ´õÇÑ´Ù.
|
Inc(MousePos.X,MouseState.lX);
| Inc(MousePos.Y,MouseState.lY);
|
// ¸¶¿ì½º ¹öÆ°ÀÌ ´·ÁÁ³´ÂÁöÀÇ ¿©ºÎ¸¦ ¾Ë¾Æ º»´Ù.
| if MouseState.rgbButtons[0] and $80 >
0 then
| if MouseState.rgbButtons[1] and $80 > 0 then
º¸´Ù½ÃÇÇ ÇÑ ¹ø¿¡ ¸¶¿ì½º À§Ä¡ Á¤º¸¿Í ¸¶¿ì½º ¹öÆ° Á¤º¸¸¦ ¾ò¾î ¿À±â ¶§¹®¿¡
ºü¸¦¼ö ¹Û¿¡ ¾ø´Ù. ±×¸®°í
À©µµ¿ìÀÇ ¸Þ¼¼ÁöµîÀ» °ÅÄ¡Áö ¾Ê±â°í ¹Ù·Î Çϵå¿þ¾î
ÀÎÅÍ·´Æ®¿¡¼ ¾ò¾î ¿À±â ¶§¹®¿¡ ºÎÇϵµ Àû´Ù.
------------------------------------------------------------------------
(4) Direct Input ÀÇ Mouse °´Ã¼ »ç¿ë ¿¹Á¦
±×·³ ½ÇÁ¦·Î »ç¿ëÀ» Çغ¸ÀÚ¸é....
1. À§¿¡¼ ¸¸µç Direct Input °´Ã¼¸¦ µû·Î Unit ·Î ÀúÀåÇÑ´Ù.
2. »õ·Î¿î ÇÁ·ÎÁ§Æ®¸¦ ¸¸µé°í, Unit1 ¿¡´Â ¹æ±Ý ¸¸µç Direct Input °´Ã¼°¡ ÀÖ
´Â
unit¸¦ usesÇÑ´Ù. ±×¸®°í Direct Input Çì´õÀÎ DInput.Pas µµ usesÇÑ´Ù.
3. Æû¿¡´Â ŸÀ̸Ó, ¶óº§, ¹öÆ°À» ¸¸µç´Ù.
4. TForm1 ÀÇ public ¿¡ 'DxInput : TDxInput;' À» Ãß°¡ÇÑ´Ù.
±×¸®°í
'MousePos : TPoint;' µµ Ãß°¡ÇÑ´Ù. ÀÌ°ÍÀº ¸¶¿ì½º Ä¿¼ÀÇ ÇöÀ§Ä¡
¸¦ ±â¾ïÇØ µÎ±â À§Çؼ
ÇÊ¿äÇÏ´Ù.
5. ¹öÆ°ÀÇ Å¬¸¯ À̺¥Æ®¿¡ ´ÙÀ½°ú °°ÀÌ ÀÔ·ÂÇÑ´Ù.
DxInput :=
TDxInput.Create(hInstance,Handle);
MousePos :=
Point(0,0);
Timer1.Enabled := TRUE;
6. Form ÀÇ Close À̺¥Æ®¿¡ ´ÙÀ½°ú °°ÀÌ ÀÔ·ÂÇÑ´Ù.
Timer1.Enabled := FALSE;
DxInput.Free;
DxInput
:= nil;
7. ŸÀÌ¸Ó À̺¥Æ®ÀÇ IntervalÀ» 1·Î ÇÏ°í À̺¥Æ®¿¡´Â ´ÙÀ½°ú °°ÀÌ ÀÔ·ÂÇÑ´Ù.
var
MouseState : TMouseState;
s :
string;
begin
DxInput.GetMouseState(MouseState);
Inc(MousePos.X,MouseState.lX);
Inc(MousePos.Y,MouseState.lY);
s
:= Format('(%4d,%4d) ',[MousePos.X,MousePos.Y]);
if
MouseState.rgbButtons[0] and $80 > 0 then s := s + 'Left Button ';
if
MouseState.rgbButtons[1] and $80 > 0 then s := s + 'Right Button
';
Label1.Caption := s;
end;
8. ½ÇÇàÇÑ´Ù.
9. ¹öÆ°À» ´©¸£¸é Direct Input ÀÇ ¸¶¿ì½º Çڵ鸵ÀÌ ½ÃÀ۵Ǵµ¥... ¸¶¿ì½ºÀÇ
¿òÁ÷ÀÓÀ̳ª
¹öÆ°ÀÇ ´©¸§À» Ç¥½ÃÇØ ÁØ´Ù. µ¿½Ã¿¡ ¹öÆ°À» ´·¯µµ ¿ª½Ã °á°ú
´Â °°´Ù. ( ¸¶¿ì½º ÁÂÇ¥ÀÇ ±âÁØÀº Direct InputÀÌ ½ÃÀÛÇÒ¶§ÀÇ
¸¶¿ì½º À§Ä¡
°¡ (0,0) À¸·Î ¼³Á¤µÈ´Ù. )
------------------------------------------------------------------------
<< ¿¡ÇÊ·Î±× >>
Áö±Ý±îÁö ¼³¸íÇÑ °ÍÀº Direct X ÀÇ ÀÔ·Â µð¹ÙÀ̽º ºÎºÐÀÎ Direct Input ºÎºÐ
À̾ú½À´Ï´Ù.
µ¨ÆÄÀÌ·Î °ÔÀÓ ¸¸µå½Ã·Á´Â ºÐµé²² Á¶±ÝÀ̳ª¸¶ µµ¿òÀÌ µÇ¾úÀ¸¸é
ÁÁ°Ú½À´Ï´Ù.
Áö±Ý±îÁö µ¨ÆÄÀÌ·Î Direct Draw, ¸ÖƼ¹Ìµð¾î ŸÀ̸Ó, DIB, Direct Input ¿¡
´ëÇÑ
°Á¸¦ Çߴµ¥..... ¾ÕÀ¸·Î µ¨ÆÄÀÌ·Î ÇÏ´Â Direct Sound, Direct Music,
Direct Play ¿¡ ´ëÇÑ °Á¸¦ ´õ
ÇÏ°í ½Í½À´Ï´Ù..
ÀÏ¿äÀÏ ÇϷ縦 ÅõÀÚÇؼ 2Æí ºÐ·®ÀÇ °Á¸¦ ÇßÀ¸´Ï, ¾ÕÀ¸·Îµµ ÀÏ¿äÀϸ¶´Ù ÀÌ
Á¤µµ ºÐ·®ÀÇ °Á¸¦ ÇØ ³ª°¡°í
½Í½À´Ï´Ù. ±×·³ °ü½É ÀÖÀ¸½Å ºÐµéÀº ¸¹ÀÌ ±â´ë
ÇØ ÁÖ¼¼¿ä..
±×·³ ¸¶Áö¸·À¸·Î ÇѸ¶µð ³²±â°Ú½À´Ï´Ù.
" A mountain is a
mountain, Water is water.
"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1999
/ 10 / 31