SDL_PollEvent有时在屏幕重新连接后没有捕获触摸事件

时间:2018-05-24 16:27:41

标签: c++ sdl-2 touchscreen

我正在使用SDL libarary在屏幕上捕获触摸和鼠标事件。但如果我断开触摸屏并重新连接它,有时我会停止手指触摸事件,即SDL_FINGERMOTION,SDL_FINGERDOWN,SDL_FINGERUP。

以下是我正在使用的代码:

while(SDL_PollEvent(&event))
    {
        switch(event.type)
        {
            case SDL_QUIT:{
                //Some Code
            }
            case SDL_MOUSEBUTTONDOWN:{
                //Some Code
            }
            case SDL_MOUSEBUTTONUP:{
                //Some Code
            }
            case SDL_MOUSEMOTION:{
               //Some Code
            }
        case SDL_FINGERMOTION:
        case SDL_FINGERDOWN:
        case SDL_FINGERUP: {
             //Some Code
            }
        }
    }
    return true;
}

任何建议都会有所帮助。

P.S使用opensuse 42.2和SDL2

1 个答案:

答案 0 :(得分:1)

在Linux上,SDL会在您拨打SDL_Init(... | SDL_INIT_EVENTS)时打开每个可用的输入事件设备。如果从系统中删除输入设备,SDL将在尝试轮询时收到错误。但是,SDL在添加新输入设备时不会收到通知,因此它永远不会打开新的输入事件设备。

解决方法可能是定期自行检查/dev/input/event*,查看是否有任何更改,如果有,请执行SDL_QuitSubSystem(SDL_INIT_EVENTS); SDL_Init(SDL_INIT_EVENTS)。但是,这是一个黑客,可能无法可靠地工作。