首页 > 其他分享 >SDL事件之简单退出事件SDL_QUIT

SDL事件之简单退出事件SDL_QUIT

时间:2023-11-14 14:56:23浏览次数:38  
标签:QUIT surface window 事件 SDL event renderer

一、概述

  上一篇使用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();

 

标签:QUIT,surface,window,事件,SDL,event,renderer
From: https://www.cnblogs.com/tony-yang-flutter/p/17831582.html

相关文章

  • SDL2加载一个图片
    一、概述使用SDL2+SDL2_Image显示一张图片操作步骤:SDL2的操作流程:1.初始化SDLSDL_Init2.创建SDL_WindowSDL_CreateWindow3.创建渲染器SDL_RendererSDL_CreateRenderer4.生成一个SDL_Surface,这个Surfac......
  • SDL2 无法解析的外部符号 main,函数 "int __cdecl invoke_main(void)" (?invoke_main@@
    一、概述在使用VisualStudio+CMake集成SDL2的过程中。运行一个Demo示例出现了以下错误提示无法解析的外部符号main,函数"int__cdeclinvoke_main(void)"(?invoke_main@@YAHXZ) 二、解决办法上面问题的主要原因是程序找不到入口函数因为SDL中自己也定义了......
  • 1821_ChibiOS中的事件机制
    GreyZhang/g_ChibiOS:IfoundanewRTOScalledChibiOSanditseemsinteresting!(github.com)1.这里开篇就讲了ChibiOS中的事件机制非常强大,算是OS的一个子系统功能。提供了多事件等待、事件与线程多对多、异步广播同步检查等功能。2.事件机制涉及到的三个对类别分别是:事件......
  • 浏览器事件循环Event Loop
    引言:事件循环不是浏览器独有的,从字面上看,“循环”可以简单地认为就是重复,比如for循环,就是重复地执行for循环体中的语句,所以事件循环,可以理解为重复地处理事件,那么下一个问题是,处理的是什么事件,事件的相关信息从哪里获取。因为我没有用nodejs做过什么项目,所以这里我暂且只关注浏......
  • JavaScript 事件的类型
    单击事件:当用户单击HTML元素时,会触发单击事件,这对于创建响应式和交互式界面至关重要。它们经常用于按钮单击或链接导航等操作,从而增强整体用户体验。鼠标事件:鼠标事件捕获涉及鼠标的用户操作,例如在元素上移动(鼠标悬停)、离开元素(鼠标移出)。为悬停效果或复杂的拖放交互等功能提供......
  • Hash模式基于锚点,以及onhashchange事件 —— 通过锚点的值作为路由地址
    前端路由有两种模式:mode:hash/histroyhash:1.hash的优点是兼容性比较高,可以直接在项目布署上线时使用。2.hash的缺点是#不美观影响url的美感,并且如果移动端分享严格限制,可能会报错history:1.history的优点是不会影响到url的美感,提高了可观赏性2.history的缺点是需要与后端搭配,......
  • HTML和webAPI之根据时间和事件来变实现图片的转换
    一:概述在一些前端的设计场景中,我们会发现有很多的场景需要根据时间然后去变换图片。在不同时间都会出现不同的图片。下面来写一个案例,来更换图片,并显示当前的时间(xx年xx月xx日)。二:案例实现在这里需要用到的知识是事件的使用以及JavaScript内置对象(时间函数)的使用。以及时间的......
  • 医院等级评审,离不开不良事件上报系统【医院不良事件报告源码】
    不良事件上报系统对事件的报告、处置、跟踪、评价、分析、改进、学习等进行了综合管理,通过双向互评机制实现临床科室与职能部门之间的进一步互动,加强不良事件报告处置过程中的信息互通能力。围绕患者安全、医疗、护理、药品、器械耗材、输血、感染、后勤、治安、患者满意度、职业暴......
  • RTOS中的“大事记”:事件组带你走进并发的奇妙世界!
    引言:嘿,RTOS的小伙伴们!你是不是有时候觉得任务之间的沟通有点麻烦,像是在用古老的通信方式?今天我们要介绍的主角是“事件组”——就像是任务之间的私密通信手段,让你的RTOS应用更加轻松愉快!在这次的“大事记”中,我们将探索事件组的神奇之处,揭开它与任务之间的联系!背景:在RTOS的大舞台......
  • 阿里云崩了,我们更愿意读“事件说明”还是“避坑指南”?
    做软件的人:“工作体验好,好事才能来。”双十一后第一天,阿里云崩了从下图能看出,这次虽然只崩了3个多小时,但受影响的产品多,地域广。如图1。图1这次崩了受影响的产品多,地域广应该说,阿里云的健康状态页设计得还是很不错的。我很快就能找到这次崩了的持续时长,以及所影响的产品和......