SDL事件之简单退出事件SDL_QUIT
一、概述
上一篇使用SDL加载了一张图片,图片展示后3秒窗口会自动关闭,如果不想让窗口自动关闭,而是用户自己指定啥时候关闭就啥时候关闭,该怎么弄?
那就有必要加上SDL的事件了。
加入一个简单的SDL事件非常简单。以点击X号关闭窗口为例:
1.初始化SDL事件
//初始化SDL事件 SDL_Event event; bool quit = false;//窗口结束条件
2.创建一个死循环,使用SDL_WaitEvent来接收触发的事件,如果有事件到来,则event中就会接收到传递过来的事件
while (!quit) { //主消息循环,如果有事件过来就拿到这个事件对象 SDL_WaitEvent(&event); switch (event.type) { case SDL_QUIT://输入事件冲菜单退出(其实就是点击右上角的叉号的时候会执行这个) cout << "关闭了窗口" << endl; quit = true; break; } }
二、代码示例(完整示例代码)
加上了SDL的事件后,SDL显示的窗口就不会很僵硬的等待3秒关闭了。而是用户随时都可以关闭。
//初始化SDL事件 SDL_Event event; bool quit = false;//窗口结束条件 //初始化SDL SDL_Init(SDL_INIT_EVERYTHING); //创建一个Surface SDL_Surface* surface = IMG_Load("E:/tony/demo/visualstudio_workspace/SDLDemo/SDLDemo/images/cat2.jpg"); //创建SDL窗口,这里window的宽高直接指定为surface的宽高即可 SDL_Window* window = SDL_CreateWindow("window name", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, surface->w,surface->h,0); //初始化SDL_IMAGE(这个主要是为了方便加载图片) IMG_Init(IMG_INIT_PNG|IMG_INIT_JPG); //创建渲染器 SDL_Renderer* renderer = SDL_CreateRenderer(window,-1,0); //创建纹理 SDL_Texture* texture = SDL_CreateTextureFromSurface(renderer,surface); while (!quit) { //主消息循环,如果有事件过来就拿到这个事件对象 SDL_WaitEvent(&event); switch (event.type) { case SDL_QUIT://输入事件冲菜单退出(其实就是点击右上角的叉号的时候会执行这个) cout << "关闭了窗口" << endl; quit = true; break; } //如果有事件过来就更新一次UI //把纹理渲染到渲染器上 SDL_RenderCopy(renderer, texture, NULL, NULL); //把渲染器中的数据渲染到屏幕上 SDL_RenderPresent(renderer); } //执行销毁动作 //销毁纹理 SDL_DestroyTexture(texture); //释放surface SDL_FreeSurface(surface); //销毁渲染器 SDL_DestroyRenderer(renderer); //销毁window SDL_DestroyWindow(window); //退出SDL_Image库 IMG_Quit(); //退出SDL SDL_Quit();
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
2014-11-14 Unable to execute dex: Multiple dex files defineLcom/google/gson/JsonDeserializer;
2014-11-14 Android 工程引入自定义Library后,工程无法识别Library中的类