首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SDL第四篇」事件处理

SDL事件处理 要想了解 SDL事件处理,我们必须要知道的一个原理是,SDL将所有事件都存放在一个队列。所有对事件的操作,其实就是对队列的操作。...SDL_WaitEventTimeout: 与SDL_WaitEvent的区别时,当到达超时时间后,退出阻塞状态。 SDL_PeekEvent: 从队列取出事件,但该事件不从队列删除。...SDL_KeyboardEvent : 键盘相关的事件SDL_MouseMotionEvent : 鼠标移动相关的事件SDL_QuitEvent : 退出事件。...能不能窗口一直显示,直到检测到用户按了ctrl+c 或 使用鼠标点击关闭按钮后才关闭呢? 当然是可以的。我们只需要在之前的程序的末尾增加下面这段代码即可。它会一直检测用户是否按下了退出按钮。...即然有 SDL_WaitEvent了,为什么还要有SDL_PollEvent呢?这主要是由于使用的场景不同。

1.1K10

(译)SDL编程入门(3)事件驱动编程

//主循环标志 bool quit = false; //事件处理程序 SDL_Event e; 在我们的代码,在SDL被初始化并加载媒体后(如前面教程中提到的),我们声明一个退出标志,以跟踪用户是否已经退出...我们还声明一个SDL_Event[1] union。一个SDL事件就是一些类似于按键按下[2]、鼠标移动[3]、操纵杆按钮按下[4]等。在这个应用程序,我们要寻找退出事件来结束应用程序。...在主循环的顶部,我们有我们的事件循环。它的作用是不断处理事件队列,直到它清空。 当你按下一个键、移动鼠标或触摸屏幕时,你就会把事件放到事件队列。 ?...事件队列将按照事件发生的顺序存储它们,等待你处理它们。当你想知道发生了什么事件以便处理它们时,你可以通过调用SDL_PollEvent[5]对事件队列进行轮询以获得最近的事件。...当队列为空时,SDL_PollEvent将返回0。因此,这段代码所做的就是不断地从事件队列轮询事件,直到它为空。

89920
您找到你想要的搜索结果了吗?
是的
没有找到

(译)SDL编程入门(18)按键状态

按键状态 正如我们在鼠标输入教程中看到的那样,除了使用事件之外,还有其他方法可以获得输入设备(鼠标、键盘等)的状态。在本教程,我们将使用按键状态而不是事件来重新制作键盘输入教程。...,我们没有在事件循环中检查按键事件。...关于SDL如何处理键状态,有一点很重要,那就是你仍然需要一个事件循环运行。...SDL的内部键状态每次调用SDL_PollEvent[1]时都会更新,所以在检查键状态之前要确保你已经轮询了队列上的所有事件。 这里我们设置了要渲染的纹理。...您所要做的就是检查某个键是否被关闭,检查它在键状态数组的状态。正如你在上面的代码中所看到的那样,如果键是按下的,我们将当前的纹理设置为相应的纹理。如果键都没有按下,我们就设置默认的纹理。

1.1K40

【FFmpeg】SDL 音视频开发 ③ ( SDL 事件处理 | SDL_Event 数据结构分析 | 事件处理流程 | SDL 事件获取函数 | SDL_WaitEvent 函数 )

键盘 / 鼠标 ) 传入的事件 , 如 鼠标移动 , 鼠标点击 , 键盘按键 等事件 ; 2、SDL 事件处理步骤 SDL 事件处理步骤 : 首先 , 调用 SDL_Init 函数 , 初始化 SDL...具体类型 , 在下面的 SDL_Event 联合体的代码注释中有详细说明 ; SDL_Event 是一个联合体 定义在 SDL_event.h 头文件 , 该 SDL_Event 联合体是一种特殊的数据结构...; /**< 鼠标按钮事件数据 */ SDL_MouseWheelEvent wheel; /**< 鼠标滚轮事件数据 */ SDL_JoyAxisEvent jaxis...break; } } 三、SDL 事件函数 1、SDL_PollEvent 函数 在上面的示例 , 使用了 SDL_PollEvent 函数 , 检测是否有事件发生..., 如果有事件发生 , 则通过参数SDL_Event 指针返回该事件 , 函数返回值 1 ; 如果没有事件发生 , 函数返回 0 , SDL_Event 指针参数不变 ; SDL_PollEvent

8310

(译)SDL编程入门(17)鼠标事件

鼠标事件 和按键一样,SDL也有事件结构来处理鼠标事件,如鼠标运动、鼠标按钮按下和鼠标按钮释放。在本教程,我们将制作一堆可以与之交互的按钮。 ?...在这种情况下,它说如果SDL_ttf没有被定义,忽略这段代码。...这个函数将在事件循环中被调用,并处理从事件队列获取的单个按钮的事件。...首先,我们检查进入的事件是否是一个鼠标事件,特别是鼠标运动事件(当鼠标移动时),鼠标按钮按下事件(当你点击鼠标按钮时),或鼠标按钮抬起事件(当你释放鼠标点击时)。...这就是这段代码的作用。 如果鼠标位置在按钮之外,则它将内部标记标记为false。 否则,它将保持初始真实值。 最后,我们根据鼠标是否位于按钮内以及鼠标事件来设置按钮精灵。

1.5K41

【音视频连载-003】基础学习篇-SDL 消息循环和事件响应

在前面的文章已经创建了一个 SDL 窗口并且显示指定的颜色。 为了让窗口显示出来,在程序写了一个死循环,这几行代码就是 SDL 消息循环和事件响应的核心缩影了。.../ } SDL_EventType; 如上所示,有键盘、鼠标事件还有窗口事件和应用退出的事件,基本上也就用到这些了。...鼠标响应 除此之外还可以监听鼠标事件,比如鼠标是否按下、抬起、移动和坐标之类的。...break; default: break; } } } 以上代码就是监听鼠标点击事件...总结 以上就是关于 SDL 消息循环和事件响应的学习连载 003 篇。基本上后续所有的 SDL 代码都会有这样一个消息循环作为程序的主框架,所以这个时候弄明白了,方面后面代码的学习。

1.2K20

Python游戏工具包---Pygame最常用的15个模块详解(附pdf版本)

在 Pygame 的例子目录,有一个演示代码(prevent_display_stretching.py)展示如何在微软系统(Vista 以上系统)关闭 Pygame 显示的自动拉伸属性。...在对Channel.stop()或的任何其他呼叫清除它 Channel.play()。 如果在频道上没有主动播放声音,则声音将立即开始播放。...当鼠标运动时,大量的运动事件会被放入相应的队列中等待处理。没有及时清除掉一些运动事件是队列被塞满的主要原因。...一般情况下方法用于窗口模式。在全屏模式下,该方法总会返回 True。 注意:在 MS Windows 系统,一个窗口可以同时对鼠标和键盘事件保持监听。...但是在 X-Windows 系统,需要用一个窗口监听鼠标事件而另一个窗口监听键盘事件。pygame.mouse.get_focused() 可以表示 pygame 窗口是否在接收鼠标事件

15.5K55

SDL系列讲解(一) 简介

什么是 SDL Simple DirectMedia Layer(SDL)是一个跨平台开发库,主要提供对音频,键盘,鼠标,操纵杆的操作,通过OpenGL和Direct3D来实现直接访问图像硬件。...SDL官方支持Windows,Mac OS X,Linux,iOS和Android。在源代码可以找到对其他平台的支持。...如果想要快速的掌握SDL,去阅读下头文件以及test下的测试代码,那里面有更多示例教程,以及很好的注释,帮助你去学习,理解,掌握....应用程序和窗口状态更改 鼠标输入 键盘输入 操纵杆和游戏控制器输入 多点触控手势 可以使用SDL_EventState()启用或禁用每个事件...简单线程创建API 简单线程本地存储API 互斥量,信号量和条件变量 用于无锁编程的原子操作 计时器 获取流逝的毫秒数 等待指定的毫秒数 在单独的线程创建与代码并行运行的计时器

3K50

(译)SDL编程入门(19)游戏手柄和操纵杆

游戏手柄和操纵杆 就像[鼠标输入]和[键盘输入]一样,SDL也有能力读取来自操纵杆/游戏手柄/游戏控制器的输入。在本教程,我们将根据操纵杆的输入使箭头旋转。...首先我们调用SDL_NumJoysticks来检查是否至少有一个操纵杆连接。如果有,我们调用SDL_JoystickOpen来打开索引0的操纵杆。操纵杆打开后,现在它将向SDL事件队列报告事件。...; 在这个演示,我们要跟踪x和y的方向。...我们使用cmath函数atan2进行操作,该函数代表反正切2,即AKA反正切2。 对于熟悉三角函数的人来说,这基本上是反正切函数,其中包含一些附加代码,这些附加代码考虑了值来自哪个象限。...还有其他的操纵杆事件,比如按钮按下[4]、pov hats[5]和插入或移除控制器[6]。它们都相当简单,你应该可以通过查看文档和实验来了解它们。 在 这里[7]下载本教程的媒体和源代码

1.8K20

【FFmpeg】SDL 音视频开发 ① ( SDL 窗口绘制 | SDL 视频显示函数 | SDL_Window 窗口 | SDL_Renderer 渲染器 | SDL_Texture 纹理 )

: 视频子系统 , 可以 实现 创建窗口 , 渲染器 , 纹理 等功能 ; SDL_INIT_AUDIO:音频子系统 , 可进行声音播放 ; SDL_INIT_EVENTS:事件子系统 , 可处理 鼠标...键盘 等事件 ; SDL_INIT_TIMER : 定时器子系统 , 可实现 SDL 定时器 功能 ; 返回值 : 如果 SDL 系统初始化成功 , 则返回 0 ; 如果初始化失败 , 返回负数 ;...操作系统 , 每个应用的窗口都是一个 SDL_Window 对象 ; 在 SDL_Window 窗口 , 可以 有多个 SDL_Renderer 渲染器 , 渲染器 可以用于渲染 / 显示 纹理...下载 SDL 开发库 | 拷贝动态库到 C:\Windows\SysWOW64 目录 | 将 SDL 开发库配置到 Qt 项目 ) 代码的基础上 , 编写的代码 ; 完整代码参考 https://download.csdn.net...); // 清除屏幕 SDL_RenderClear(renderer); // 在 (100, 100) 位置绘制 100x100 像素大小的矩形 SDL_Rect

8210

freeglut与GLFW介绍及其差别

因此,OpenGL在二维平面或三维空间中执行几何图形和图像的渲染,但是它并不对窗口进行管理,也不会处理输入事件。         ...这些库节省了我们书写操作系统相关代码的时间,提供给我们一个窗口和上下文用来渲染。...managing OpenGL windows) freeglut GLFW GLUT 多媒体库(multimedia libraries) Allegro version 5 SDL...在回调函数方式 ,用户提供给GLFW的回调函数用来处理用户输入操作如键盘按键或鼠标操作。当用户按下或者松开按键时,它都会被触发,包括一些特殊的键位(例如 Shift、Caps Lock、Esc等)。...而在轮询方式,程序可以直接查询系统是否已经按下了任意键,或者更具体一点,是否按下了某个特定的键。

1.2K10

SDL系列讲解(六) SDL_Activity流程

SDL系列讲解(一) 简介 SDL系列讲解(二) 环境搭建 SDL系列讲解(三) 工具安装 SDL是什么,能干什么,为什么我们要学习它?...SDL系列讲解(四) demo讲解 SDL系列讲解(五) 调试c代码 前言 总是会出其不意,讲解随性一些不好吗? 只讲如何使用,明显不是我的风格,于是乎,近期会开展SDL的框架原理的系列分析。...于是,这节开始展开,SDL的java端的代码剖析。 SDLActivity时序图 一张时序图,展开系列。 首先,这里需要默认,你是懂android的开发的,Activity是我们界面展示的主体。...开发的代码。...找到对应的实现,然后会调用这些c方法,这些方法便是SDL适配的android版本。然后我们在c代码,进行相应SDL提供的事件监测,回调方法,来进行处理事件,如此便完成了SDL的整个调用过程。

1.4K100

【Python100天学习笔记】Day10 图形用户界面和游戏开发

Pygame建立在SDL的基础上,SDL是一套跨平台的多媒体开发库,用C语言实现,被广泛的应用于游戏、模拟器、播放器等的开发。...可以在事件循环中对鼠标事件进行处理,通过事件对象的type属性可以判定事件类型,再通过pos属性就可以获得鼠标点击的位置。...如果要处理键盘事件也是在这个地方,做法与处理鼠标事件类似。...if event.type == pygame.QUIT: running = False # 处理鼠标事件代码 if...其实上面的代码还有很多值得改进的地方,比如刷新窗口以及让球移动起来的代码并不应该放在事件循环中,等学习了多线程的知识后,用一个后台线程来处理这些事可能是更好的选择。

2.5K20

(译)SDL编程入门(8)几何图形渲染

( gRenderer ); } 在主循环的顶部,我们像之前一样处理退出事件清除屏幕。...另外,请注意,我们在每一帧都用SDL_SetRenderDrawColor将清除颜色设置为白色,而不是在初始化函数设置一次。我们将在主循环结束时介绍为什么会发生这种情况。...你也可以使用SDL_RenderDrawRect[3]绘制一个空心的矩形轮廓。正如你所看到的那样,它的工作原理和一个实心填充的矩形差不多,因为这段代码和上面的代码几乎一样。...还有一点要知道的是,SDL从左上角渲染矩形、表面和纹理。 下面是使用SDL_RenderDrawLine[4]绘制一条像素细线的代码。...如果没有这个调用,那么屏幕就会用上次用 SDL_SetRenderDrawColor 设置的任何颜色来清除,在本例中就会产生黄色背景。 在 这里[7]下载本教程的媒体和源代码

1.4K30
领券