gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 04:46:32 24 4
gpt4 key购买 nike

我正在尝试使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com