介绍游戏手柄的属性。
语法
struct GameInputGamepadInfo
{
GameInputGamepadButtons supportedLayout;
GameInputLabel menuButtonLabel;
GameInputLabel viewButtonLabel;
GameInputLabel aButtonLabel;
GameInputLabel bButtonLabel;
GameInputLabel cButtonLabel;
GameInputLabel xButtonLabel;
GameInputLabel yButtonLabel;
GameInputLabel zButtonLabel;
GameInputLabel dpadUpLabel;
GameInputLabel dpadDownLabel;
GameInputLabel dpadLeftLabel;
GameInputLabel dpadRightLabel;
GameInputLabel leftShoulderButtonLabel;
GameInputLabel rightShoulderButtonLabel;
GameInputLabel leftThumbstickButtonLabel;
GameInputLabel rightThumbstickButtonLabel;
uint32_t extraButtonCount;
uint32_t extraAxisCount;
};
成员
supportedLayout
类型:GameInputGamepadButtons
描述游戏板的布局。 由于轴具有按钮转换,因此这些轴可用于确定游戏板上存在哪些轴。
menuButtonLabel
类型:GameInputLabel
“菜单”按钮的物理标签。
viewButtonLabel
类型:GameInputLabel
“视图”按钮的物理标签。
aButtonLabel
类型:GameInputLabel
按钮 A 物理标签。
bButtonLabel
类型:GameInputLabel
按钮 B 物理标签。
cButtonLabel
类型:GameInputLabel
C 按钮的物理标签。
xButtonLabel
类型:GameInputLabel
按钮 X 物理标签。
yButtonLabel
类型:GameInputLabel
按钮 Y 物理标签。
zButtonLabel
类型:GameInputLabel
Z 按钮的物理标签。
dpadUpLabel
类型:GameInputLabel
向上方向键(D-pad )物理标签
dpadDownLabel
类型:GameInputLabel
向下方向键(D-pad )物理标签
dpadLeftLabel
类型:GameInputLabel
向左方向键(D-pad )物理标签
dpadRightLabel
类型:GameInputLabel
向右方向键(D-pad )物理标签。
leftShoulderButtonLabel
类型:GameInputLabel
左侧肩按钮物理标签。
rightShoulderButtonLabel
类型:GameInputLabel
右侧肩按钮物理标签。
leftThumbstickButtonLabel
类型:GameInputLabel
左摇杆物理标签。
rightThumbstickButtonLabel
类型:GameInputLabel
右摇杆物理标签。
extraButtonCount
类型:uint32_t
未映射到游戏板按钮的设备按钮数。
extraAxisCount
类型:uint32_t
未映射到游戏板轴的设备轴数。
备注
此结构在 GameInputDeviceInfo 结构中使用。
GameInputDeviceInfo 由 IGameInputDevice::GetDeviceInfo 方法使用。
有关详细信息,请参阅 GameInput 设备。
游戏板布局
GameInput 支持游戏板的一系列外形规格,而不是将支持限制为单个标准布局。 这是通过 supportedLayout 此结构的成员作为 GameInputGamepadButtons 类型的位域公开的。 轴也通过轴到按钮转换(例如 GameInputGamepadLeftTriggerButton)存在于此枚举中。 有关这些翻译的详细信息,请参阅 GameInputGamepadButtons。
游戏板没有所需的最低布局,并且它可能具有支持的轴和按钮的任意组合。 任何不支持的按钮或轴都应作为额外的轴或按钮离开并访问。
我们已将游戏板元素和常见布局的一些常见分组定义为常量。 它们可用于快速识别通用布局、筛选特定输入或创建自定义布局。 有关详细信息,请参阅 GameInputGamepadButtons。
由于受支持布局和外形规格的预期范围是无限的,因此我们期望映射和游戏板用户遵循一小组注意事项和行为:
对于有两个的元素(例如纵杆、肩部或触发器),如果中心存在一个元素,则默认元素应为左元素。 如果它位于设备的左侧或右侧,则应相应地映射它。
为了防止由于不同的字形而产生歧义,人脸按钮应根据其物理位置进行映射和读取,而不考虑其字形,如下所示:
下面的代码示例演示如何确定游戏板是否支持布局或特定输入或模块。
bool IsStandardLayout(const GameInputGamepadInfo& gamepadInfo) noexcept
{
// Supports the standard layout and no more
return (gamepadInfo.supportedLayout & GameInputGamepadLayoutStandard) == GameInputGamepadLayoutStandard;
}
bool IsDpadSupported(const GameInputGamepadInfo& gamepadInfo) noexcept
{
// Supports the D-pad module and more
return gamepadInfo.supportedLayout & GameInputGamepadModuleDpad;
}
bool IsXButtonSupported(const GameInputGamepadInfo& gamepadInfo) noexcept
{
return gamepadInfo.supportedLayout & GameInputGamepadX;
}
下面的代码示例演示如何创建自定义布局并确定游戏板是否支持它。
bool IsCustomLayoutSupported(const GameInputGamepadInfo& gamepadInfo) noexcept
{
static const GameInputGamepadButtons customLayout =
GameInputGamepadA |
GameInputGamepadB |
GameInputGamepadC |
GameInputGamepadX |
GameInputGamepadY |
GameInputGamepadZ |
GameInputGamepadModuleShoulders |
GameInputGamepadModuleDpad;
return (gamepadInfo.supportedLayout & customLayout) == GameInputGamepadLayoutCustom;
}
要求
头文件:GameInput.h
支持平台:Windows、Xbox One 系列主机和 Xbox Series 主机