我一直在浏览SDL_Event
上的文档。有没有办法在SDL_UserEvent
轮询之前从事件队列中删除SDL_PollEvent
?我试过谷歌搜索" sdl remove event
",但想出了bubkis。
答案 0 :(得分:1)
您可以查看SDL_FlushEvent
或SDL_FlushEvents
。
SDL_FlushEvent
可用于从队列中删除一种特定类型的事件,而SDL_FlushEvents
可用于值SDL_USEREVENT
和SDL_LASTEVENT
,以便从中移除每个用户事件队列中。
您可能希望之前使用SDL_PumpEvents
,只是为了更新事件队列。
您还可以查看SDL_PeepEvents
(与minType
相同的maxType
和SDL_FlushEvents
)。
答案 1 :(得分:1)
您可以检查队列中的事件,然后再将它们从队列中取出......然后决定将它们取出。
两者都可以使用SDL_PeepEvents(http://wiki.libsdl.org/SDL_PeepEvents)完成。您可以通过传入SDL_PEEKEVENT作为参数操作来查看下一个N事件;或者用SDL_GETEVENT取出它们。
也应该可以使用SDL_GETEVENT;编辑您获取的事件数组以删除您想要丢弃的事件;然后用SDL_ADDEVENT再次调用它以将它们放回去。
但是,在这一点上,我不得不怀疑你是否真的完成了你想做的事。为什么不轮询事件,忽略您想要丢弃的类型的事件?这就是我这样做的方式。
答案 2 :(得分:0)
我不知道只删除该类型的一个事件的简单方法,但您可以这样做:
SDL_FlushEvents(SDL_USEREVENT, SDL_LASTEVENT);
删除队列中已有的所有待处理用户事件。
答案 3 :(得分:0)
void Game::handleEvent() {
SDL_Event event;
SDL_PumpEvents();
SDL_FlushEvent(SDL_JOYHATMOTION);
SDL_FlushEvent(SDL_JOYAXISMOTION);
SDL_FlushEvent(SDL_CONTROLLERAXISMOTION);
SDL_FlushEvent(SDL_MOUSEMOTION);
SDL_FlushEvent(SDL_MOUSEBUTTONDOWN);
SDL_FlushEvent(SDL_MOUSEBUTTONUP);
SDL_FlushEvent(SDL_FINGERDOWN);
SDL_FlushEvent(SDL_FINGERUP);
SDL_FlushEvent(SDL_FINGERMOTION);
if (SDL_PollEvent(&event))
scene->handleEvent(screen, event)
}