Ввод пальца контроллера Xbox

Я работаю над перемещением маленького прямоугольника вокруг экрана с помощью джойстика на контроллере 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);

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

Другие решения

Проблема в том, что мышь Вход «Относительное движение» и джойстик — это вход «Абсолютное движение». То, что вам нужно сделать, это когда вы работаете с большой ручкой, ваша последняя строка должна быть что-то вроде

graphics->rectangle(xOld + dx, yOld + dy);

где xOld а также yOld расположение квадрата до применения функции.

0

Может быть, немного поздно, но у меня есть очень простая в использовании оболочка C ++ XInput. Посмотри Вот

Это буквально занимает несколько строк кода, и у вас есть полная поддержка контроллеров XInput в вашем приложении 🙂

0
По вопросам рекламы [email protected]