在 C++ 中按下 Xbox 按钮

Posted

技术标签:

【中文标题】在 C++ 中按下 Xbox 按钮【英文标题】:Xbox button pressed in C++ 【发布时间】:2016-08-10 02:44:47 【问题描述】:

我正在尝试在 Visual Studio 中用 C++ 编写程序,以测试 XBOX 控制器的一些功能。我正在使用 xinput ,因此可以注册控制器是否连接到我的计算机,但是,我可以弄清楚如何判断是否按下了按钮。到目前为止,我有这个作为检查按钮功能

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

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

【问题讨论】:

你可能想发帖some more code。 我猜 wButtons 是所有按钮的位字段,因此您可能想要测试单个位。 if(...wButtons & XINPUT_GAMEPAD_A) ... 当问题陈述很简单时,很难提供解决方案,“它不起作用”。请edit您的问题更完整地描述您预期会发生什么以及这与实际结果有何不同。请参阅 How to Ask 以获取有关什么是好的解释的提示。 【参考方案1】:

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

首先,您可能希望创建一个类来存储您连接的每个单独控制器的数据。

class xboxController 
private:

public:
;

现在您可以从某个地方开始,但仍然无法添加多个控制器?如果您想在一个控制器上做某事而在另一个控制器上做其他事情怎么办?您可以创建一个重载的构造函数,您可以手动为控制器分配一个索引。(提示:您需要一些东西来存储它以供进一步使用)(提示2:索引从 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)...;

但您还需要您的类中的一个成员,您可以在其中存储控制器的状态(Xbox 控制器使用 Struct 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);

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

一点sn-p的使用方法如下:

//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 的,请注意我已经演示并提交了我的代码,这仅用于帮助,请勿复制。谢谢!

【讨论】:

以上是关于在 C++ 中按下 Xbox 按钮的主要内容,如果未能解决你的问题,请参考以下文章

知道何时在 ios 中按下 facebook 登录按钮

更改在 UITableview 中按下的特定按钮的图像

EnterKey 在 VBA 用户窗体中按下按钮

在 PyQt5 中按下时如何切换按钮文本

(Kivy Python)在 .py 文件中按下按钮时切换屏幕

在SwiftUI中按下按钮时的随机图像[关闭]