Search code examples
c++sdlsdl-2

Getting keyboard input in SDL2 outside of the main game loop


This is my main game loop.

    while (running)
    {
        window.Clear();
        sceneManager.Update(&event);
        window.SetColor(23, 23, 23, 255);

        while (SDL_PollEvent(&event))
        {
            if (event.type == SDL_QUIT)
            {
                running = false;
            }
        }
        window.Display();
    }

I want to detect keyboard input in my class called 'Scene'. To do this, I attempted to pass in the SDL_Event object to my scene manager every frame, which would then pass it to my scene where I could detect input. When I press a key, nothing is printed. I am wondering how I could correctly get input in a separate class outside of my main loop.

Scene.cpp:

    
void LoadingScene::Update(SDL_Event* event)
{
    rain.Update();
    text.Update();

    if (event->type == SDL_KEYDOWN) 
    {
        cout << "Keydown" << endl;
    }
    

}

Solution

  • scene manager should be called within the event loop

    Like this

    while (running)
        {
            window.Clear();
            window.SetColor(23, 23, 23, 255);
    
            while (SDL_PollEvent(&event))
            {
             
           sceneManager.Update(&event);
                if (event.type == SDL_QUIT)
                {
                    running = false;
                }
            }
            
            window.Display();
        }