快速按钮输入无法在SDL 1.2.15

时间:2015-09-14 13:03:33

标签: c++ macos sdl

假设我们有一个控制器输入设备。另外,假设我们还有一些使用“SDL_PollEvent(...)”检查事件的构造。

在我的测试中,每3秒检查一次“SDL_PollEvent(...)”,如果在延迟期间快速点击一次按钮或甚至多次点击,SDL将不会生成按钮按下或按钮释放事件。如果现在按下并按下控制器上轻触的按钮,则SDL剂量会产生这些事件。

除了同样的测试之外,如果在非常极端的“SDL_Delay(...)”测试期间只快速点击一次键盘键,则始终会生成按下按钮的事件。

从控制器设备按下并释放快速按钮将生成带有“SDL_WaitEvent(...)”的事件。但是,SDL_INIT_VIDEO和SDL_INIT_EVENTTHREAD必须在同一个线程中,因为在我的情况下它们不能在多个SDL_Thread [s]之间分开。

鉴于事件轮询与按下按钮的时间之间的延迟,我的情况需要知道该按钮至少被按下了一次。

在这种情况下可以做些什么?那么SDL会以与键盘设备相同的方式生成/轮询控制器事件吗?

SDL 1.2无法做到这一点吗?是否有其他库能够更好地保证生成按钮点击事件?谢谢!

bool activity(1);

while(activity) // event polling used in testing
{
    std::cout << "\nWaiting...";
    SDL_Delay(3000U); // <--- simulating delay for purpose of test

    while(SDL_PollEvent(&event_))
    {
        switch(event_.type)
        {
            case SDL_JOYBUTTONDOWN :

                switch(event_.jbutton.button)
                {
                    case  0U :
                        ...
                        break;
                    case  1U :
                        ...
                        break;
                }

                break;
            case SDL_KEYDOWN :

                switch(event_.key.keysym.sym)
                {
                    case SDLK_a :
                        ...
                        break;
                }

                break;
        }
    }
}

0 个答案:

没有答案