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

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 -= qt

SOURCES += \
        main.c

INCLUDEPATH += \
         $$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 pointer
    SDL_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 title
        SDL_WINDOWPOS_UNDEFINED, // initial x position
        SDL_WINDOWPOS_UNDEFINED, // initial y position
        640, // width, in pixels
        480, // height, in pixels
        SDL_WINDOW_SHOWN | SDL_WINDOW_BORDERLESS // flags - see below
    );

    // Check that the window was successfully created
    if (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 renderer
    if (renderer)
        SDL_DestroyRenderer(renderer);

    // Close and destroy the window
    if (window)
        SDL_DestroyWindow(window);

    // Clean up
    SDL_Quit();
    return 0;
}


http://www.kler.cn/a/388910.html

相关文章:

  • LLMs之Code:Github Spark的简介、安装和使用方法、案例应用之详细攻略
  • Java中的不可变集合:性能与安全并重的最佳实践
  • 985研一学习日记 - 2024.11.12
  • LLMs之MindFormers:基于国产硬件华为Atlas针对GLM-4-9B实现模型全参微调(单机8卡)→模型推理(单卡多batch推理)
  • uni-app表单⑪
  • WPF 应用程序中使用 Prism 框架时,有多种方式可以注册服务和依赖项
  • 中安OCR电子行驶证、驾驶证识别,助力便捷出行与智慧交通
  • Objective-C 1.0和2.0有什么区别?
  • git中使用tag(标签)的方法及重要性
  • 股票量化实时行情接口WebSocket接入Python封装
  • netcat工具安装和使用
  • 目前对于后期的打算
  • ubuntu使用DeepSpeech进行语音识别(包含交叉编译)
  • linux笔记(selinux)
  • 欢迎 Stable Diffusion 3.5 Large 加入 Diffusers
  • Android MavenCentral 仓库更新问题
  • 【9692】基于springcloud+vue的智慧养老平台
  • Linux:理解动静态库
  • Linux安装与配置 Gitblit 1.9.3 服务
  • 如何在 Linux 服务器上安装 Git
  • Linux——入门
  • 搭建监控系统Prometheus + Grafana
  • 独立站 API 接口的性能优化策略
  • CALL处 F8的“bug“
  • 7个常用的JavaScript数组操作进阶用法
  • Spring MVC(一)