Событие джойстика SDL2 не запускается

Итак, у меня есть этот код:

void Engine::Run() {
// initialize all components
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK))
throw Exception("couldn't initialize SDL\n" + string(SDL_GetError()), 1);

// other code

run = true;
SDL_Event event;

while (run) {
// other code

uint32 timeout = SDL_GetTicks() + 50;
while (SDL_PollEvent(&event) && timeout - SDL_GetTicks() > 0)
HandleEvent(event);
}
}

void Engine::HandleEvent(const SDL_Event& event) {
switch (event.type) {
case SDL_KEYDOWN:
inputSys->KeyDownEvent(event.key);
break;
case SDL_KEYUP:
inputSys->KeyUpEvent(event.key);
break;
case SDL_JOYBUTTONDOWN:
cout << "button" << endl;
break;
case SDL_JOYHATMOTION:
cout << "hat" << endl;
break;
case SDL_JOYAXISMOTION:
cout << "axis" << endl;
break;
case SDL_JOYDEVICEADDED: case SDL_JOYDEVICEREMOVED:
inputSys->UpdateControllers();
break;
// other code
}
}

Проблема в том, что единственными событиями, которые не вызываются, являются события джойстика, шляпы и оси. Два других события, связанных с джойстиком, работают просто отлично.
Я использую точно такой же код в другом проекте, где все события джойстика вызываются без проблем, но поскольку я переместил код в свой новый проект, они больше не вызываются.
SDL распознает подключенный контроллер, и я могу использовать такие функции, как SDL_JoystickGetAxis, но по какой-то причине эти три события не работают. Есть идеи, почему это так?

0

Решение

Вы должны позвонить SDL_JoystickOpen чтобы получить эти события. Вот их пример:

SDL_Joystick *joy;

// Initialize the joystick subsystem
SDL_InitSubSystem(SDL_INIT_JOYSTICK);

// Check for joystick
if (SDL_NumJoysticks() > 0) {
// Open joystick
joy = SDL_JoystickOpen(0);

if (joy) {
printf("Opened Joystick 0\n");
printf("Name: %s\n", SDL_JoystickNameForIndex(0));
printf("Number of Axes: %d\n", SDL_JoystickNumAxes(joy));
printf("Number of Buttons: %d\n", SDL_JoystickNumButtons(joy));
printf("Number of Balls: %d\n", SDL_JoystickNumBalls(joy));
} else {
printf("Couldn't open Joystick 0\n");
}

// Close if opened
if (SDL_JoystickGetAttached(joy)) {
SDL_JoystickClose(joy);
}
}
3

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

Других решений пока нет …

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