2016-08-10 4 views
0

Visual Studio에서 C++로 프로그램을 작성하여 XBOX 컨트롤러의 일부 기능을 테스트하려고합니다. 컨트롤러가 내 컴퓨터에 연결되어있는 경우 xinput을 사용하여 등록 할 수 있지만 버튼을 눌렀는지 확인하는 방법을 알아낼 수 있습니다. 지금까지 내가C++에서 Xbox 단추 누르기

if (state.Gamepad.wButtons == XINPUT_GAMEPAD_A) { 
    cout << "A\n"; 
} 

지금 난 단지는 'A'를 인쇄 할 체크 버튼 기능으로 이것을 가지고 있지만 작동하지 않는, 내가 추가 할 필요가 또 있나요?

+0

[some more code] (http://sscce.org)를 게시하고 싶을 수도 있습니다. – zneak

+0

wButtons가 모든 버튼의 비트 필드라고 추측하고 있습니다. 따라서 단일 비트를 테스트하고 싶을 수 있습니다. if (... wButtons & XINPUT_GAMEPAD_A) {...} – PaulHK

+0

문제 설명이 단순히 "작동하지 않는다"는 경우 솔루션을 제공하기가 어렵습니다. 일어날 것으로 예상되는 것과 그 결과가 실제 결과와 어떻게 다른지에 대한 자세한 설명을 제공하려면 질문을 편집하십시오. 좋은 설명이 무엇인지 힌트를 얻으려면 [ask]를 참조하십시오. –

답변

0

이 정보는 당신이 객체 클래스를 만들고 그것들을 사용하는 것에 익숙하고 Uni를 위해 완료해야했던 ​​과제에 기초한 경우에 유용합니다.

먼저 각 연결된 컨트롤러에 대한 데이터를 저장할 클래스를 만들어야 할 수 있습니다.

class xboxController { 
private: 

public: 
}; 

이제 어딘가에 있지만 여러 컨트롤러를 추가 할 수 없습니까? 한 컨트롤러에서 다른 컨트롤러에서 다른 작업을하고 싶다면 어떻게해야할까요? 컨트롤러에 대한 인덱스를 수동으로 할당 할 수있는 오버로드 된 생성자를 만들 수 있습니다 (힌트 : 나중에 사용하기 위해이 값을 저장하는 것이 필요합니다) (HINT2 : 인덱스가 0부터 시작됨).

class xboxController { 
private: 

public: 
    //Default constructor 
    xboxController(); 
    //overloaded constructor 
    xboxController(int i){...}; 
}; 

그런 다음 특정 컨트롤러를 확인하는 데 사용할 수있는 기능과 버튼을 눌렀습니다.

//NOTE, this takes in a parameter defined by you and checks it. 
bool checkButtonPress(WORD button){...}; 

을하지만 당신은 또한 당신이 컨트롤러의 상태를 저장할 수있는 클래스의 구성원 (X 박스 컨트롤러가 구조체 XINPUT_STATE를 사용)를 필요 : 아래 그림과 같이 클래스에 대한 이전 할당, 나는 부울을 사용 .

XINPUT_STATE controllerState 

지금이 상태를 저장하는 곳이, 당신은 부울을 완료 할 수 있습니다

bool checkButtonPress(WORD press){ 
    return (controllerState.Gamepad.wButtons & press) != 0; 
} 

XInput에 컨트롤러의 상태에 관한 정보를 수신 할 수있는 기능을 제공한다. 간단히하기 위해 컨트롤러의 상태를 업데이트/가져올 필요가있을 때마다이 함수를 호출하기위한 함수를 만들어야합니다.

void getState(){ 
//Understand what these lines are doing, and how to use them for your own needs. 
    ZeroMemory(&controllerState, sizeof(XINPUT_STATE)); 
    XInputGetState(controllerNumber,&controllerState); 
} 

따라서, 메인, 당신은) 오버로드 된 생성자를 사용하여 컨트롤러의 상태를 검색하여 해당 컨트롤러의 당신의 쉬운 관리를 위해 인덱스에 컨트롤러를 할당 할 수 있습니다. 그러면 각 컨트롤러에 대해 개체를 사용할 수 있고 각 컨트롤러에 명령을 보낼 수 있습니다. bool을 사용하면 어떤 버튼이 눌려 있는지 확인할 수 있고 컨트롤러 또는 컴퓨터에 입력 내용을 알릴 수 있습니다.

다음과 같은 코드가 사용하는 방법에 약간의 조각 :이 MTRN2500에 대한 경우

//This program will keep checking and print a message when 
//A is pressed on the controller and will terminate when you press B 
int main() { 
    xboxController xbox(1); 
    bool isFinished = false; 
    while (isFinished == false) { 
    xbox.getState(); 
    if(xbox.checkButtonPress(XINPUT_GAMEPAD_A)){ 
     cout << "Button A was pressed" endl; 
    } 
    else if(xbox.checkButtonPress(XINPUT_GAMEPAD_B)){ 
     cout << "Program will now terminate" << endl; 
     isFinished = true; 
    } 
    } 
    return 0; 
} 

또한, 나는이 단지 도움을위한 입증하고 내 코드를 제출하고있는 점에 유의하시기 바랍니다, 복사 할 수 없습니다. 감사!

관련 문제