DirectInput DirectInput C/C++ 튜토리얼 튜토리얼 5 :액션 맵의 사용법 스텝 2 :액션 맵의 정의   [목차열람] [주소복사] [슬롯비우기]
스텝 2 :액션 맵의 정의
 
Microsoft DirectX 9.0

스텝 2 :액션 맵의 정의


다음에, 각 게임 액션을, 1 개의 가상 컨트롤 또는 장치 개체에 할당한다. 이러한 컨트롤은 액션 맵핑 정수로서 정의되어 장르 및 서브 장르에 의해 정의된다. 이 예에서는, 플라이트 게임 장르의우주전 서브 장르를 선택하는 것이 적절하다. 이 서브 장르에서는, 이하의 정수를 사용할 수 있다.

우선 순위 1 의 컨트롤
DIAXIS_SPACESIM_LATERAL

DIAXIS_SPACESIM_MOVE

DIAXIS_SPACESIM_THROTTLE

DIBUTTON_SPACESIM_FIRE

DIBUTTON_SPACESIM_MENU

DIBUTTON_SPACESIM_TARGET

DIBUTTON_SPACESIM_WEAPONS

우선 순위 2 의 컨트롤
DIAXIS_SPACESIM_CLIMB

DIAXIS_SPACESIM_ROTATE

DIBUTTON_SPACESIM_BACKWARD_LINK

DIBUTTON_SPACESIM_DEVICE

DIBUTTON_SPACESIM_DISPLAY

DIBUTTON_SPACESIM_FASTER_LINK

DIBUTTON_SPACESIM_FIRESECONDARY

DIBUTTON_SPACESIM_FORWARD_LINK

DIBUTTON_SPACESIM_GEAR

DIBUTTON_SPACESIM_GLANCE_DOWN_LINK

DIBUTTON_SPACESIM_GLANCE_LEFT_LINK

DIBUTTON_SPACESIM_GLANCE_RIGHT_LINK

DIBUTTON_SPACESIM_GLANCE_UP_LINK

DIBUTTON_SPACESIM_LEFT_LINK

DIBUTTON_SPACESIM_LOWER

DIBUTTON_SPACESIM_PAUSE

DIBUTTON_SPACESIM_RAISE

DIBUTTON_SPACESIM_RIGHT_LINK

DIBUTTON_SPACESIM_SLOWER_LINK

DIBUTTON_SPACESIM_TURN_LEFT_LINK

DIBUTTON_SPACESIM_TURN_RIGHT_LINK

DIBUTTON_SPACESIM_VIEW

DIHATSWITCH_SPACESIM_GLANCE

우선 순위 1 의 컨트롤은, 가능한 경우에 장치 개체에 맵핑 할 필요가 있는, 최저한 필요한 컨트롤이다. 우선 순위 2 의 컨트롤은, 기본적인 게임 조작에는 그만큼 중요하지 않고, 필요에 따라서 맵핑 할 수 있다.

게임 액션은,DIACTION 구조체의 배열에 있는 액션 맵핑 정수 컨트롤에 할당할 수 있다. 각 DIACTION 구조체는, 최저 1 개의 게임 액션과 거기에 관련하는 액션 맵핑 정수, 필요한 플래그, 및 액션을 나타내요 셋집 들이마셔 이름이나 식별자 (ID) 캐릭터 라인을 저장 하고 있다. 나머지의 DIACTION 멤버는, 이 시점에서는 사용하지 않는다. 다음 샘플 코드는,DIACTION 구조체의 배열의 정의를 나타내고 있다.

#define NUMBER_OF_ACTIONS 18

DIACTION g_rgGameAction[NUMBER_OF_ACTIONS] =
{
    // Device input pre-defined by DirectInput, according to genre
    {INPUT_LEFTRIGHT_AXIS, DIAXIS_SPACESIM_LATERAL, 0, "Turn",},
    {INPUT_UPDOWN_AXIS, DIAXIS_SPACESIM_MOVE, 0, "Move",},
    {INPUT_FIREWEAPONS, DIBUTTON_SPACESIM_FIRE, 0, "Shoot",},
    {INPUT_ENABLESHIELD, DIBUTTON_SPACESIM_GEAR, 0, "Shield",},
    {INPUT_DISPLAYGAMEMENU, DIBUTTON_SPACESIM_DISPLAY, 0, "Display",},
    {INPUT_QUITGAME, DIBUTTON_SPACESIM_MENU, 0, "Quit Game",},

    // Keyboard input mappings
    {INPUT_TURNLEFT, DIKEYBOARD_LEFT, 0, "Turn left", },
    {INPUT_TURNRIGHT, DIKEYBOARD_RIGHT, 0, "Turn right", },
    {INPUT_FORWARDTHRUST, DIKEYBOARD_UP, 0, "Forward thrust", },
    {INPUT_REVERSETHRUST, DIKEYBOARD_DOWN, 0, "Reverse thrust", },
    {INPUT_FIREWEAPONS, DIKEYBOARD_F, 0, "Fire weapons", },
    {INPUT_ENABLESHIELD, DIKEYBOARD_S, 0, "Enable shields", },
    {INPUT_DISPLAYGAMEMENU, DIKEYBOARD_D, DIA_APPFIXED, 
                                      "Display game menu"), },
    {INPUT_QUITGAME, DIKEYBOARD_ESCAPE, DIA_APPFIXED, "Quit game", },

    // Mouse input mappings
    {INPUT_LEFTRIGHT_AXIS, DIMOUSE_XAXIS, 0, "Turn", },
    {INPUT_UPDOWN_AXIS, DIMOUSE_YAXIS, 0, "Move", },
    {INPUT_FIREWEAPONS, DIMOUSE_BUTTON0, 0, "Fire weapons", },
    {INPUT_ENABLESHIELD, DIMOUSE_BUTTON1, 0, "Enable shields", },
};

다음에,DIACTIONFORMAT 구조체가 초기화되어 전에 정의한 DIACTION 배열 g_rgGameAction 가 저장 된다. 또,DIACTIONFORMAT 구조체는, 장르, 버퍼 사이즈, 축스케일링, 및 액션 맵의 알기 쉬운 이름을 정의한다. g_AppGuid 값은 애플리케이션으로 정의된 글로벌 일의 식별자 (GUID)이며, 액션 맵을 식별한다. GUID 의 생성 방법에 대해서는, 「COM 개체란」을 참조할것.

DIACTIONFORMAT diaf;
diaf.dwSize        = sizeof(DIACTIONFORMAT);
diaf.dwActionSize  = sizeof(DIACTION);
diaf.dwDataSize    = NUMBER_OF_ACTIONS * sizeof(DWORD);
diaf.dwNumActions  = NUMBER_OF_ACTIONS;
diaf.guidActionMap = g_AppGuid;
diaf.dwGenre       = DIVIRTUAL_SPACESIM;
diaf.rgoAction     = g_rgGameAction;
diaf.dwBufferSize  = 16;
diaf.lAxisMin      = -100;
diaf.lAxisMax      = 100;
diaf.tszActionMap  = "DI Test";

DIACTIONFORMAT 구조체가 열거된 장치와 조합되어 「스텝 3 :장치에의 액션의 맵핑」으로 최적으로 일치하는 것이 검색된다.



© 2002 Microsoft Corporation. All rights reserved.
↑TOP