如何从事件队列中删除SDL_Event?

时间:2014-08-25 18:58:55

标签: sdl-2

我一直在浏览SDL_Event上的文档。有没有办法在SDL_UserEvent轮询之前从事件队列中删除SDL_PollEvent?我试过谷歌搜索" sdl remove event",但想出了bubkis。

4 个答案:

答案 0 :(得分:1)

您可以查看SDL_FlushEventSDL_FlushEventsSDL_FlushEvent可用于从队列中删除一种特定类型的事件,而SDL_FlushEvents可用于值SDL_USEREVENTSDL_LASTEVENT,以便从中移除每个用户事件队列中。

您可能希望之前使用SDL_PumpEvents,只是为了更新事件队列。

您还可以查看SDL_PeepEvents(与minType相同的maxTypeSDL_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)
}