本文是我的笔记,如有兴趣,请参见视频SDL教程(第3讲)
怎样使窗口停留更长时间,且允许使用者进行多种操作。
1.SDL_Delay()运行时,系统处于繁忙状态,不便对窗口操作。
2.死循环占用资源很大,CPU运行压力大,同样难以对窗口操作。
while(1)
{
}
3.利用事件驱动循环,既能使窗口停留,又能对事件进行处理。
while(1){
while(SDL_PollEvent(&event)){
}
}
对事件的介绍
1.SDL事件包括 键盘事件,鼠标事件,游戏杆事件,系统事件(包括离开事件,自定义事件等等),任何一个窗口程序使用一个事件队列保存这些事件。
2.SDL_Event 是共用体类型,SDL利用它存储事件信息。
常用
SDL_Event event //定义一个事件。
event.type//什么类型的事件
event.button//鼠标事件
event.key//键盘事件
{
其中 event里有SDL_KeyboardEvent key;//结构体类型,定义一个结构体,名为key。
key里有SDL_KeySym keysym//结构体类型,定义一个结构体,名为keysym.(此结构体包含按键信息)
keysym里有 SDLKey sym //表示按键的虚拟码(不用记忆数字,SDL有其预定义宏名)
}
event.quit//退出事件。
常用预定义宏名
SDL_QUIT //退出事件
SDL_MOUSEBUTTONDOWN//鼠标事件
SDL_BUTTON_LEFT//鼠标左键
SDL_BUTTON_RIGHT//鼠标右键
SDL_KEYDOWN//键盘事件
{
其中虚拟码的预定义宏名 SDLK_0 , SDLK_1 ~ SDLK_9 //表示0~9
SDLK_F1 ~SDLK_F12
SDLK_a //诸如此类,表示字母键
SDLK_MINUS //表示'-'
SDLK_EQUALS//表示'+'
}
SDL_PollEvent(SDL_Event* event) 函数表示轮询所有事件(与event 以及循环配合使用。)从事件队列中取出事件,判断类型,然后处理。
为了安全退出,不用exit(0), 设计跳出循环
bool quit = false; //C语言要使用布尔类型需要先包含头文件 #include<stdbool.h>
while(quit == false){
while(SDL_PollEvent(&event)){
if(event.type == SDL_QUIT){
quit = true;