Как использовать выходные значения Analogue Sticks (джойстика) для вращения объекта с использованием матрицы преобразования? - PullRequest
0 голосов
/ 23 ноября 2018

Учитывая, что аналоговые джойстики выводят значения

float xaxisval = controller->left_stick_x_axis(); //-1 is left, 1 is right
float yaxisval = controller->left_stick_y_axis(); //-1 is up, 1 is down

Значения варьируются от 0 до 1, с которыми можно использовать чувствительность.

Я перемещаю персонажа в направлении джойстика в трехмерной среде так же, как в игре, такой как Diablo.Я добавляю и убираю эти значения из положения X и Z, чтобы переместить его.Но персонаж всегда сталкивается с одним и тем же увлечением.Как я могу использовать эти значения и преобразовать их в градусы?

xaxisval += controller->left_stick_x_axis() /100;
yaxisval += controller->left_stick_y_axis() /100;
distAdjust.SetTranslation(Vector4(xaxisval, 0, yaxisval));

rotateAdjust.RotationX(rotateDegrees);

player_->set_transform(player_transform *distAdjust *rotateAdjust)

У меня проблема в том, что движение работает только с фиксированным вращением, если я поворачиваю объект, то он движется в другом направлении.

1 Ответ

0 голосов
/ 23 ноября 2018

Я не знаю, что ваша функция "rotateAdjust.RotationX (rotateDegrees);"действительно так.

Но вы должны для каждого игрового цикла брать значение от 0 до 1 с вашего джойстика, а затем умножать его на постоянный угол в зависимости от вашей скорости вращения.

const float Angle = 1.0f; // Or whatever you want. Set more to increase rotation speed.

...

// Game loop
while ( true )
{
  ...

  float xSensitivity = controller->left_stick_x_axis(); // example 0.33f for that cycle

  myGuy.xRotate(Angle * xSensitivity);

  ...
}

«Угол» является постоянной величиной и может быть выражен в градусах или радианах в зависимости от вашей функции вращения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...