Я работаю над перемещением маленького прямоугольника вокруг экрана с помощью джойстика на контроллере 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);
Я наконец получил решение этой проблемы. Я добавил переменные 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);
}`
Проблема в том, что мышь Вход «Относительное движение» и джойстик — это вход «Абсолютное движение». То, что вам нужно сделать, это когда вы работаете с большой ручкой, ваша последняя строка должна быть что-то вроде
graphics->rectangle(xOld + dx, yOld + dy);
где xOld
а также yOld
расположение квадрата до применения функции.
Может быть, немного поздно, но у меня есть очень простая в использовании оболочка C ++ XInput. Посмотри Вот
Это буквально занимает несколько строк кода, и у вас есть полная поддержка контроллеров XInput в вашем приложении 🙂