Проблемы с вводом джойстика GLFW

#c #glfw

#c #glfw

Вопрос:

Я пытаюсь получить ввод с джойстика (Thrustmaster Hotas x, если это имеет значение) с помощью GLFW, но использование glfwGetJoystickAxes и кнопок работает не так, как ожидалось. Оси выводятся как 00007FF77FC0D820, и нет никакой информации о состоянии кнопок. Что бы я здесь делал не так?

 const float* Joystick::getAxesState()
{
    axes = glfwGetJoystickAxes(GLFW_JOYSTICK_1, amp;axesCount);
    return axes;
}

const unsigned char* Joystick::getButtonState()
{
    buttons = glfwGetJoystickButtons(GLFW_JOYSTICK_1, amp;buttonCount);
    return buttons;
}
  

Комментарии:

1. glfwGetJoystickAxes и glfwGetJoystickButtons возвращают массивы символов с плавающей точкой и без знака соответственно. Попробуйте получить к ним доступ как <axes_return> [индекс] и <buttons_return>[индекс]. Они имеют длину <whatever_count_you_fed_it>

2. @NathanWride, Который устранил проблему, добавьте ее в качестве ответа

3. Не забывайте, что вы должны вызывать эти функции только один раз. Они возвращают указатель на встроенные буферы состояния GLFW, которые обновляются самостоятельно с помощью event pump.

4. @Quentin Я добавлю это к своему ответу

5. Если вы сохраняете эти указатели дольше, чем кадр, убедитесь, что вы зарегистрировали обратный вызов джойстика. Указатели станут недействительными, если джойстик / контроллер отключен.

Ответ №1:

glfwGetJoystickAxes(<joystick>,<count>) возвращает массив из float[<count>] glfwGetJoystickButtons(<joystick>,<count>) возвращает массив из unsigned char[<count>]

Попробуйте получить к ним доступ как <axes_return>[index] и <buttons_return>[index] .

Также, как упоминал @Quentin, вы должны вызывать эти функции только один раз, потому что возвращаемые значения являются указателями на внутренне сохраненные состояния glfw.