이 정보는 당신이 객체 클래스를 만들고 그것들을 사용하는 것에 익숙하고 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;
}
또한, 나는이 단지 도움을위한 입증하고 내 코드를 제출하고있는 점에 유의하시기 바랍니다, 복사 할 수 없습니다. 감사!
[some more code] (http://sscce.org)를 게시하고 싶을 수도 있습니다. – zneak
wButtons가 모든 버튼의 비트 필드라고 추측하고 있습니다. 따라서 단일 비트를 테스트하고 싶을 수 있습니다. if (... wButtons & XINPUT_GAMEPAD_A) {...} – PaulHK
문제 설명이 단순히 "작동하지 않는다"는 경우 솔루션을 제공하기가 어렵습니다. 일어날 것으로 예상되는 것과 그 결과가 실제 결과와 어떻게 다른지에 대한 자세한 설명을 제공하려면 질문을 편집하십시오. 좋은 설명이 무엇인지 힌트를 얻으려면 [ask]를 참조하십시오. –