用c++按Xbox按钮

Xbox button pressed in C++

本文关键字:按钮 Xbox c++      更新时间:2023-10-16

我试图在Visual Studio中用c++编写程序,以测试XBOX控制器的一些功能。我正在使用输入输入,因此如果控制器连接到我的计算机,我可以注册,但是,我可以弄清楚如何判断是否按下了按钮。到目前为止,我把它作为复选按钮函数

if (state.Gamepad.wButtons == XINPUT_GAMEPAD_A) {
   cout << "An";
}

现在我只希望它打印出'A',但它不工作,还有什么我需要添加的?

如果您熟悉创建和使用对象类,并且基于我必须完成的Uni作业,则此信息很有帮助。

首先,你可能想要通过创建一个类来为你连接的每个单独的控制器存储数据。

class xboxController {
private:
public:
};

现在你有地方开始,但仍然将无法添加多个控制器?如果你想在一个控制器上做一些事,在另一个控制器上做另一些事呢?您可以创建一个重载的构造函数,您可以手动为控制器分配索引。(提示:您将需要一些东西来存储它以供以后使用)(提示2:index's start at 0)。

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

然后你需要一个函数,你可以用它来检查特定的控制器,哪个按钮被按下了。在前面的类赋值中,我使用了bool类型,如下所示:

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

但是你还需要一个成员在你的类中,你可以存储控制器的状态(Xbox控制器使用结构XINPUT_STATE)。

XINPUT_STATE controllerState

现在您有了存储状态的地方,您可以完成bool:

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);
}

因此,在main中,您将能够将控制器分配给索引,以便通过使用重载构造函数和检索控制器的状态来轻松管理该控制器)。然后,您将能够为每个控制器使用对象,并能够向每个控制器发送命令。通过使用bool,您将能够检查哪个按钮被按下,并能够告诉控制器或计算机如何处理该输入。

下面是如何使用该代码的一小段代码:
//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;
}

此外,如果这是MTRN2500,请注意,我已经演示并提交了我的代码,这只是为了帮助,而不是复制。谢谢!