2016-08-08 10 views
0

Also habe ich diesen Code bekam:SDL2 Joystick Ereignistriggerung nicht

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 
    } 
} 

Das Problem ist, dass die einzigen Ereignisse, die nicht genannt werden, sind die Joystick-Taste, Hut und Achse Ereignisse. Die anderen zwei Joystick-bezogenen Ereignisse funktionieren gut.
Ich verwende den exakt gleichen Code in einem anderen Projekt, wo alle Joystick-Ereignisse ohne Problem aufgerufen werden, aber seit ich den Code in mein neues Projekt verschoben habe, werden sie nicht mehr aufgerufen.
SDL erkennt den eingesteckten Controller und ich kann Funktionen wie SDL_JoystickGetAxis verwenden, aber aus irgendeinem Grund scheinen diese drei Ereignisse nicht zu funktionieren. Irgendeine Idee warum das ist?

Antwort

3

Sie müssen SDL_JoystickOpen aufrufen, um diese Ereignisse zu erhalten. Hier ist ihr Beispiel:

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); 
    } 
}