我正在使用xbox控制器上的拇指操纵杆在屏幕上移动一个小矩形。我有它完美的鼠标输入,但我似乎遇到了控制器的问题。方块出现在屏幕上(0,0)控制器的死区。当我移动拇指操纵杆时,方形移动一个特定的数量而不再进一步,当我从指甲上抬起手指时,它会回到(0,0)。代码如下,其非常简单的代码,但无法使其工作。谢谢你的帮助。
这是第一部分。
void Graphics::rectangle(int x, int y)
{
{
r1.x1 = x;
r1.y1 = y;
r1.x2 = r1.x1 + 50;
r1.y2 = r1.y1 + 50;
}
}
这是第二部分。
LONG x = input->getGamepadThumbRX(0);
LONG y = input->getGamepadThumbRY(0);
float x1 = x/32767;
float y1 = y/32767;
if(x1 > 0 && x1 < 0.2f || x1 < 0 && x1 > -0.2f){
x1 = 0;
}
if(y1 > 0 && y1 < 0.2f || y1 < 0 && y1 > -0.2f){
y1 = 0;
}
float factor = 10;
int dx = int(factor * x1);
int dy = int(factor * y1);
graphics->rectangle(dx,dy);
答案 0 :(得分:1)
我终于找到了解决这个问题的方法。我添加了变量xNew和yNew,它们取x和y的值并将它们添加到现有值上。这让我可以在屏幕周围移动方块。 xNew和yNew在下面的类顶部初始化是来自控制器的输入代码和矩形结果。
`
void Graphics::rectangle(int x, int y)
{
xNew += x;
yNew += -y;
{
r1.x1 = xNew;
r1.y1 = yNew;
r1.x2 = r1.x1 + 50;
r1.y2 = r1.y1 + 50;
}
}
void Game::update()
{
LONG x = input->getGamepadThumbRX(0);
LONG y = input->getGamepadThumbRY(0);
float x1 = x/32767;
float y1 = y/32767;
float factor = 10;
int dx = int(factor * x1);
int dy = int(factor * y1);
graphics->rectangle(dx,dy);
}`
答案 1 :(得分:0)
问题是鼠标是"Relative Movement" Input and the thumb-stick is a "Absolute Movement" input。你需要做的是当你使用拇指杆时,你的最后一行需要像
graphics->rectangle(xOld + dx, yOld + dy);
其中xOld
和yOld
是应用函数前方形的位置。
答案 2 :(得分:0)
可能有点晚了,但我确实有一个非常易于使用的C ++ XInput包装器。看看here
它实际上需要几行代码,您完全支持应用程序中的XInput控制器:)