(译)SDL编程入门(3)事件驱动编程
事件驱动编程
除了在屏幕上放置图像外,游戏还要求您处理用户的输入。你可以通过SDL使用事件处理系统来实现这一点。
//主循环标志
bool quit = false;
//事件处理程序
SDL_Event e;
在我们的代码中,在SDL被初始化并加载媒体后(如前面教程中提到的),我们声明一个退出标志,以跟踪用户是否已经退出。由于此时我们刚刚启动应用程序,所以很明显它被初始化为false。
我们还声明一个SDL_Event[1] union
。一个SDL事件就是一些类似于按键按下[2]、鼠标移动[3]、操纵杆按钮按下[4]等。在这个应用程序中,我们要寻找退出事件来结束应用程序。
//当应用程序运行时
while( !quit ){
//处理队列中的事件
while( SDL_PollEvent( &e ) != 0 ){
//用户请求退出
if( e.type == SDL_QUIT )
{
quit = true;
}
}
//应用图片
SDL_BlitSurface( gXOut, NULL, gScreenSurface, NULL );
//更新表面
SDL_UpdateWindowSurface( gWindow );
}
在之前的教程中,我们让程序等待几秒钟再关闭。在这个程序中,我们要让程序等待到用户退出后再关闭。
所以我们要让应用程序在用户还没有退出的时候进行循环。这个在应用程序活动时一直运行的循环称为主循环,有时也称为游戏循环。它是任何游戏应用的核心。
在主循环的顶部,我们有我们的事件循环。它的作用是不断处理事件队列,直到它清空。
当你按下一个键、移动鼠标或触摸屏幕时,你就会把事件放到事件队列中。
事件队列将按照事件发生的顺序存储它们,等待你处理它们。当你想知道发生了什么事件以便处理它们时,你可以通过调用SDL_PollEvent[5]对事件队列进行轮询以获得最近的事件。
SDL_PollEvent所做的工作是从事件队列中获取最近的事件,并将事件中的数据放入我们传递到函数中的SDL_Event中。
SDL_PollEvent会一直从队列中抽取事件,直到队列清空。当队列为空时,SDL_PollEvent将返回0。因此,这段代码所做的就是不断地从事件队列中轮询事件,直到它为空。如果事件队列中的一个事件是SDL_QUIT事件(就是当用户从窗口中点击X按钮时的事件),我们将退出标志设置为true,这样我们就可以退出应用程序。
在我们处理完框架的事件后,我们绘制到屏幕上并更新它(如前面的教程中所讨论的)。如果quit标志被设置为true,应用程序将在循环结束时退出。如果它仍然是false,它将继续进行,直到用户点击X离开窗口。
参考资料
[1]
SDL_Event: https://wiki.libsdl.org/SDL_Event?highlight=%28SDL_Event%29
[2]
按键按下: https://wiki.libsdl.org/SDL_KeyboardEvent?highlight=%28SDL_KeyboardEvent%29
[3]
鼠标移动: https://wiki.libsdl.org/SDL_MouseMotionEvent?highlight=%28SDL_MouseMotionEvent%29
[4]
操纵杆按钮按下: https://wiki.libsdl.org/SDL_JoyButtonEvent?highlight=%28SDL_JoyButtonEvent%29
[5]
SDL_PollEvent: https://wiki.libsdl.org/SDL_PollEvent?highlight=%28SDL_PollEvent%29
[6]
这里: http://www.lazyfoo.net/tutorials/SDL/03_event_driven_programming/03_event_driven_programming.zip
[7]
原文链接: http://www.lazyfoo.net/tutorials/SDL/03_event_driven_programming/index.php
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法