- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在学习 CodeProject 上的教程有了输入,我想我会自己做一些。所以我尝试生成以下代码,但是当我按下方向键或其他按钮时,什么也没有发生。但是当我按下“开始”和“返回”按钮时,它会注册。提前致谢。
CXBOXController
类
#ifndef _XBOX_CONTROLLER_H_
#define _XBOX_CONTROLLER_H_
// No MFC
#define WIN32_LEAN_AND_MEAN
// We need the Windows Header and the XInput Header
#include <windows.h>
#include <XInput.h>
// Now, the XInput Library
// NOTE: COMMENT THIS OUT IF YOU ARE NOT USING
// A COMPILER THAT SUPPORTS THIS METHOD OF LINKING LIBRARIES
#pragma comment(lib, "XInput.lib")
// XBOX Controller Class Definition
class CXBOXController
{
private:
XINPUT_STATE _controllerState;
int _controllerNum;
public:
CXBOXController(int playerNumber);
XINPUT_STATE GetState();
bool IsConnected();
void Vibrate(int leftVal = 0, int rightVal = 0);
};
#endif
CXBOXController::CXBOXController(int playerNumber)
{
// Set the Controller Number
_controllerNum = playerNumber - 1;
}
XINPUT_STATE CXBOXController::GetState()
{
// Zeroise the state
ZeroMemory(&_controllerState, sizeof(XINPUT_STATE));
// Get the state
XInputGetState(_controllerNum, &_controllerState);
return _controllerState;
}
bool CXBOXController::IsConnected()
{
// Zeroise the state
ZeroMemory(&_controllerState, sizeof(XINPUT_STATE));
// Get the state
DWORD Result = XInputGetState(_controllerNum, &_controllerState);
if(Result == ERROR_SUCCESS)
{
return true;
}
else
{
return false;
}
}
void CXBOXController::Vibrate(int leftVal, int rightVal)
{
// Create a Vibraton State
XINPUT_VIBRATION Vibration;
// Zeroise the Vibration
ZeroMemory(&Vibration, sizeof(XINPUT_VIBRATION));
// Set the Vibration Values
Vibration.wLeftMotorSpeed = leftVal;
Vibration.wRightMotorSpeed = rightVal;
// Vibrate the controller
XInputSetState(_controllerNum, &Vibration);
}
代码
Player1 = new CXBOXController(1);
if(Player1->GetState().Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_UP)
{
std::cout << "Up";
}
if(Player1->GetState().Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_DOWN)
{
std::cout << "Down";
}
if(Player1->GetState().Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_RIGHT)
{
std::cout << "Right";
}
if(Player1->GetState().Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_LEFT)
{
std::cout << "Left";
}
if(Player1->GetState().Gamepad.wButtons & XINPUT_GAMEPAD_B)
{
std::cout << "Right-Click";
}
if(Player1->GetState().Gamepad.wButtons & XINPUT_GAMEPAD_A)
{
std::cout << "Click";
}
最佳答案
我在我的游戏引擎中使用以下代码;区分上升键和下降键的技巧是测量游戏 handle 前后的状态:
void Nitro::GamePadState::GetState(u32 playerIndex)
{
XINPUT_STATE xinputState;
DWORD result = XInputGetState(playerIndex, &xinputState);
if (result == ERROR_SUCCESS)
{
Triggers.Left = xinputState.Gamepad.bLeftTrigger;
Triggers.Right = xinputState.Gamepad.bRightTrigger;
ThumbSticks.Left = short2 (xinputState.Gamepad.sThumbLX, xinputState.Gamepad.sThumbLY);
ThumbSticks.Right = short2 (xinputState.Gamepad.sThumbRX, xinputState.Gamepad.sThumbRY);
mButtonStates.Update(xinputState.Gamepad.wButtons);
}
}
class NitroAPI ButtonState
{
private:
u32 mButtonStates; // Current buttons' state
u32 mPrevButtonStates; // Previous buttons' state
u32 mButtonDowns; // 1 = button pressed this frame
u32 mButtonUps; // 1 = button released this frame
public:
ButtonState();
void Update(u32 newState);
bool IsButtonDown(Buttons button) const;
bool IsButtonFalling(Buttons button) const;
bool IsButtonUp(Buttons button) const;
bool IsButtonRising(Buttons button) const;
};
重要的方法是 Update 和 IsButton*。我对之前和当前的按钮状态进行异或以区分更改的内容:
void Nitro::ButtonState::Update(u32 newState)
{
mPrevButtonStates = mButtonStates;
mButtonStates = newState;
u32 buttonChanges = mButtonStates ^ mPrevButtonStates;
mButtonDowns = buttonChanges & mButtonStates;
mButtonUps = buttonChanges & (~mButtonStates);
}
然后就是一个简单的对比,看看哪个按钮发生了变化:
bool Nitro::ButtonState::IsButtonFalling(Buttons button) const
{
return ((mButtonStates & button) != 0) && ((mPrevButtonStates & button) == 0);
}
bool Nitro::ButtonState::IsButtonRising(Buttons button) const
{
return ((mButtonStates & button) == 0) && ((mPrevButtonStates & button) != 0);
}
bool Nitro::ButtonState::IsButtonDown(Buttons button) const
{
return ((mButtonStates & button) != 0);
}
bool Nitro::ButtonState::IsButtonUp(Buttons button) const
{
return ((mButtonStates & button) == 0);
}
在你的情况下,你可以通过将你的代码放在一个 while 循环中来缓解这个问题,或者使用类似于我发布的东西来跟踪瞬变:
while (true)
{
DWORD Result = XInputGetState(_controllerNum, &_controllerState);
if (result == ERROR_SUCCESS)
{
if(_controllerState.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_UP)
// ...
}
}
关于c++ - 为什么 Xbox Controller 没有响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11379466/
我想知道是否有适用于 Xbox One 的 API 允许您启动它(类似于 Windows 10 上的 Xbox 应用程序如何启动它)等等? 最佳答案 有一个 API,但它似乎是专有的,可能不会由 Mi
我在这里没有看到很多关于 Microsoft 提供的 xbox live api 的帖子。谁能给我指一个有活跃的 xbox live api 社区的网站? 最佳答案 这是相当模糊的,所以我会提供一个广
我需要让用户在我的应用程序中使用他们的 Xbox 登录。这是我的代码片段: base_url = 'https://login.live.com/oauth20_authorize.srf?'
我想要实现的是能够告诉 XBox 360 从某个服务器播放 HTTP/MP3 流,我想远程控制它(即不使用 XBox Controller /电视屏幕)。 我知道 XBox 检测到 UPnP 媒体服务
{{d.username}} {{d.description}}
注意:我的设备是 xbox 360 kinect 设备而不是 kinect for windows。我尝试过不同的 Linux 内核和不同的 libfreenect 编译,但没有雪茄。 连接线上的灯呈
我对 XBox 开发比较陌生,想知道最好的地方开始寻找了解有关 XBox Live 公开哪些 API 的更多信息。特别是围绕玩家和游戏成就、玩家详细信息、他们正在玩的其他游戏——诸如此类。 我见过ht
我正在使用新的 C# XBox Live API ( https://github.com/Microsoft/xbox-live-api-csharp ) 通过 UWP 应用程序进行官方访问。 我能
背景:我有一款游戏,主要是在(低规范)笔记本电脑上进行测试。它运行良好。在 xbox 上进行测试时,有一种方法在调用时似乎会严重影响性能/fps。在 PC 上,您不会注意到任何减速/跳帧。 我在 xb
我的目标是在不使用第三方 API 的情况下检索 Xbox 游戏的所有成就数据。 我在这里注册了一个应用程序:https://apps.dev.microsoft.com 我正在使用 Postman 来
有没有办法在不处理屏幕抓取等的情况下从 Xbox 获取用户的成就列表? 网站怎么样http://www.trueachievements.com做吗? (他们绝对不是屏幕抓取,因为他们没有我的 Liv
我到处都能找到有关 Xbox 360 游戏的热议。但是我想知道如何为 xbox 360 开发正常的应用程序。主要是基于 silverlight。 我也不确定这个自制的东西是关于什么的? Xbox 36
试图在C#wpf中获取光束 Angular ,If PropertyChange上引发了异常。有没有人举这个项目的例子,如果需要,我可以提供更多信息。我正在尝试使麦克风更改属性,但会引发异常
我只是在 Microsoft 完成了开发人员的注册,在远程访问设置中进入开发模式(在已注册的控制台中)不要给我允许通过浏览器访问 Xbox 远程访问的 IP 号码和提供的地址:https://xbox
有谁知道我在哪里可以获得 api 来获取特定游戏的所有成就?不适用于特定玩家代号。我需要 Xbox 游戏的所有成就。 我没有一些报废,但我想将我的应用程序提升到一个新的水平,并且我不想依赖报废网站。
我只是在 Microsoft 完成了开发人员的注册,在远程访问设置中进入开发模式(在已注册的控制台中)不要给我允许通过浏览器访问 Xbox 远程访问的 IP 号码和提供的地址:https://xbox
我在让应用程序在 Xbox One 上以零售模式运行时遇到严重问题。 该应用程序在开发模式下运行良好,我已上传到商店并顺利通过认证,但是当该应用程序随后通过商店安装到 Retail Xbox One
我尝试了多种模式来单独检测 B 按钮,但这些模式不起作用,或者它们还发现了 RB 和 LB。 我试过: /B(?!^LB$|^RB$)/g /^B$|^B,$|^ B,$/g /^B$|^B,$|^
我正在使用 xbox Controller 上的摇杆在屏幕周围移动一个小矩形。我非常适合鼠标输入,但我似乎遇到了 Controller 问题。该正方形出现在屏幕上的 (0,0) Controller
我设法找到了一个启动 xbox 360 Controller 以发出隆隆声(振动)的脚本,但我无法将其关闭。有没有办法将其设置为 5 秒后隆隆声停止? import ctypes # Define n
我是一名优秀的程序员,十分优秀!