SDL解析——SDL事件处理(1)

来源:互联网 发布:php权限管理 编辑:程序博客网 时间:2024/05/18 17:03

原文出处http://www.leeos.org/cms/show_article/89002.html

SDL图形化的基本问题解决了,但图形窗口依旧是一闪而过。我们需要使用SDL内部事件处理机制来解决问题。

    SDL的事件处理允许程序响应来自用户的输入(键盘,鼠标……)。而等待相应的时候,程序就会阻塞,从而将图形窗口定格在屏幕当中。

2010-08-26-143412_419x414_scrot.png

    将上面的代码添加到原有程序当中,我们就能实现图形窗口的停留,同时在用户关闭窗口时,退出程序。而实现方法就是首先定义一个SDL_Event类型的数据,然后通过SDL_PollEvent函数来监听。如果却有用户输入,则从阻塞状态中返回,同时SDL_Event也被赋予了代表某个事件的特定值。

    SDL_Event是一个枚举类型,其中包含了SDL支持的所有实际事件。

2010-08-26-144038_348x364_scrot.png

    而在获取输入的问题上,SDL采用了最通常的做法,使用一个SDL_EventQ结构体来描述输入队列。

2010-08-26-145225_449x208_scrot.png

    而SDL_PollEvents函数则首先通过SDL_PumpEvents函数来处理硬件独立的事件后,再通过SDL_PeepEvents从队列中提取事件。可想而知,SDL_PumpEvents最终还是要调用相应SDL_VideoDevice内部的PumpEvents函数。