当前位置: 首页 > news >正文

SDL事件相关

文章目录

    • 事件相关的函数和数据结构
      • 用户自定义事件
      • 代码相关:

事件相关的函数和数据结构

  • SDL_WaitEvent :等待一个事件
  • SDL_PushEvent 发送一个事件
  • SDL_PumpEvents(): 将硬件设备产生的时间放入事件队列 ,用于读取事件,在调用该函数之前,必须调用SDL_PumpEVents搜集键盘等事件
  • SDL_PeepEvents(): 从事件队列提取一个事件
    -数据结构 SDL_Event :代表一个事件

可以监控到的事件在SDL_events.h文件里面可以找到
在这里插入图片描述

用户自定义事件

#define FF_QUIT_EVENT (SDL_USEREVENT + 2) // 用户自定义事件
在这里插入图片描述

代码相关:

TEMPLATE = app
CONFIG += console thread
CONFIG -= app_bundle
CONFIG -= qtSOURCES += \main.cINCLUDEPATH += \$$PWD/../SDL2-2.0.10/include/LIBS += \$$PWD/../SDL2-2.0.10/lib/x86/SDL2.lib

main.c

#include <SDL.h>
#include <stdio.h>
#define FF_QUIT_EVENT (SDL_USEREVENT + 2) // 用户自定义事件
#undef main
int main(int argc, char *argv[]) {SDL_Window *window = NULL; // Declare a pointerSDL_Renderer *renderer = NULL;SDL_Init(SDL_INIT_VIDEO); // Initialize SDL2// Create an application window with the following settings:window = SDL_CreateWindow("An SDL2 window", // window titleSDL_WINDOWPOS_UNDEFINED, // initial x positionSDL_WINDOWPOS_UNDEFINED, // initial y position640, // width, in pixels480, // height, in pixelsSDL_WINDOW_SHOWN | SDL_WINDOW_BORDERLESS // flags - see below);// Check that the window was successfully createdif (window == NULL) {// In the case that the window could not be made...printf("Could not create window: %s\n", SDL_GetError());return 1;}/* We must call SDL_CreateRenderer in order for draw calls to affect this window. */renderer = SDL_CreateRenderer(window, -1, 0);/* Select the color for drawing. It is set to red here. */SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255);/* Clear the entire screen to our selected color. */SDL_RenderClear(renderer);/* Up until now everything was drawn behind the scenes.This will show the new, red contents of the window. */SDL_RenderPresent(renderer);SDL_Event event;int b_exit = 0;for (;;) {SDL_WaitEvent(&event);switch (event.type) {case SDL_KEYDOWN: /* 键盘事件 */switch (event.key.keysym.sym) {case SDLK_a:printf("key down a\n");break;case SDLK_s:printf("key down s\n");break;case SDLK_d:printf("key down d\n");break;case SDLK_q:printf("key down q and push quit event\n");SDL_Event event_q;event_q.type = FF_QUIT_EVENT;SDL_PushEvent(&event_q);break;default:printf("key down 0x%x\n", event.key.keysym.sym);break;}break;case SDL_MOUSEBUTTONDOWN: /* 鼠标按下事件 */if (event.button.button == SDL_BUTTON_LEFT) {printf("mouse down left\n");} else if (event.button.button == SDL_BUTTON_RIGHT) {printf("mouse down right\n");} else {printf("mouse down %d\n", event.button.button);}break;case SDL_MOUSEMOTION: /* 鼠标移动事件 */printf("mouse movie (%d,%d)\n", event.button.x, event.button.y);break;case FF_QUIT_EVENT://如果是收到自定义的退出信号 则退出接受事件的循环printf("receive quit event\n");b_exit = 1;break;}if (b_exit)break;}// destory rendererif (renderer)SDL_DestroyRenderer(renderer);// Close and destroy the windowif (window)SDL_DestroyWindow(window);// Clean upSDL_Quit();return 0;
}
http://www.lryc.cn/news/481174.html

相关文章:

  • 探索App Intents:让你的应用与Siri无缝互动的新方式
  • 冒泡排序法
  • MATLAB 将fig格式另存为可编辑的eps格式,但乱码问题解决
  • Hadoop:单节点配置YARN
  • 【前端】Svelte:组件间通信
  • 数学建模-----假设性检验引入+三个经典应用场景(三种不同的假设性检验类型)
  • Unity——对RectTransform进行操作
  • 使用jmeter查询项目数据库信息,保存至本地txt或excel文件1108
  • ubuntu 22.04 server 安装 mysql 5.7.40 更改 datadir 目录 LTS
  • 网站架构知识之Ansible进阶2(day023)
  • Java 中的 Function:让转换逻辑更灵活
  • 10. java基础知识(下)
  • kafka 在Linux安上的装部署
  • kill-start系统进程的研究
  • 【系统架构设计师】2024年下半年真题论文: 论面向服务的架构设计(包括解题思路和参考素材)
  • 吴恩达深度学习笔记:序列模型(Sequence Models) 1.1-1.2
  • 【Spring】Spring Web MVC基础入门~(含大量例子)
  • 使用ThorUi
  • 【Promise】自定义promise
  • Docker容器部署Windows系统教程
  • js id数组转字符串
  • 如何在 Android 上增加 SELinux 权限
  • MySQL:数据类型建表
  • Linux:版本控制器git的简单使用+gdb/cgdb调试器的使用
  • 【React.js】AntDesignPro左侧菜单栏栏目名称不显示的解决方案
  • 力扣力扣力:91.解码方法
  • 一些面试题总结(二)
  • Hive-testbench套件使用文档
  • 大数据新视界 -- 大数据大厂之 Impala 性能优化:新技术融合的无限可能(下)(12/30)
  • Python | Leetcode Python题解之第540题有序数组中的单一元素