c++ - SDL_MOUSEBUTTONUP 甚至在释放鼠标按钮之前发生?

标签 c++ mouseevent sdl-2

我正在尝试使用 C++ 中的 SDL 和 ffmpeg 制作视频播放器。我创建了两个单独的线程,一个在 SDL 窗口上渲染视频,另一个处理窗口事件。当用户单击并释放视频时,我希望它切换播放/暂停。但是,它会触发多次并且事件甚至在我释放鼠标之前就发生了,这会导致不可预测的行为。

我的代码:

SDL_Event event;

    while (1)
    {
        SDL_PollEvent(&event);

        switch (event.type)
        {
            case SDL_QUIT:
                SDL_DestroyWindow(screen);
                SDL_Quit();
                break;
            case SDL_MOUSEBUTTONUP:
                if (event.button.state == SDL_RELEASED)
                {
                    printf("Mouse released\n");
                }
                break;
        }
    }

当我单击窗口并按住时,我希望它不会打印 Mouse released 直到我释放按钮。但是,它会在我按住鼠标按钮的整个过程中打印 Mouse released。我不知道这是否与我在笔记本电脑上使用触摸板有关。

最佳答案

SDL_PollEvent有一个返回值,你忽略了。

[It] returns 1 if there are any pending events, or 0 if there are none available.

鉴于您的代码逻辑,只要没有未决事件,您就会一遍又一遍地处理前一个事件,直到新事件到达。这导致观察到的行为。

最简单的修复方法是将整个事件处理包装在 if (SDL_PollEvent(&event)) {/* 事件处理 */} 条件中。

关于c++ - SDL_MOUSEBUTTONUP 甚至在释放鼠标按钮之前发生?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49156633/

相关文章:

c++ - 复制构造函数和链接错误

c++ - OpenClaw.exe 中 0x74E733AB (ucrtbase.dll) 处的未处理异常

c++ - 如何使用 Boost 在 C++ 中通过上下文切换执行两个任务

c++ - 使用 clang 和插件编译

c++ - 使用 C++ (Android NDK) 进行音频操作

c++ - 为什么我在使用 SDL2 时仍然收到 'undefined reference' 链接器错误?

C++ 和 SDL2 网格移动太快

python - 使用 matplotlib 存储鼠标单击事件坐标

javafx - 按下按钮时如何检测鼠标在节点上的移动?

java - 如何让 java.awt.Robot 响应鼠标拖动事件?