3/0 SDL的事件驱动和扩展库的使用

本文详细介绍了SDL的事件驱动机制,包括事件的定义、事件驱动的概念,以及如何处理初始化、释放、加载图片等操作。此外,还讲解了SDL_Mixer扩展库的使用,包括配置步骤和加载音频文件的方法。通过对窗口事件、键盘事件、鼠标事件的处理,展示了SDL的事件响应能力,并探讨了如何在项目中应用这些技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

6/0 SDL事件驱动

什么是事件?
比如,我们对窗口的大小做出调整的行为叫做事件,既一个个不同的操作叫做不同的事件,窗口将对这些事件作出响应。
什么是事件驱动?
事件由发送器发出;由收集器进行收集;由处理器进行处理。前两者由系统完成,而开发人员需要解决处理器如何处理。
项目的配置
使用了标准库和扩展库。

目标事件处理:1.初始化操作 2.释放SDL库操作 3.加载图片操作
1.初始化操作 0代表初始化不成功 1 代表初始化成功。

int init()
{
    // 初始化SDL库
    if(SDL_Init(SDL_INIT_EVERYTHING) < 0)
    {
        printf("SDL初始化失败!%s\n", SDL_GetError());
        return 0;
    }

    // 创建窗口
    g_pWindow = SDL_CreateWindow("Lesson04", 
        SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
        SCREEN_WIDTH, SCREEN_HEIGHT, 
        SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE);
    if(NULL == g_pWindow)
    {
        printf("创建窗口失败!%s\n", SDL_GetError());
        return 0;
    }

    // 创建渲染器
    g_pRenderer = SDL_CreateRenderer(g_pWindow, -1, SDL_RENDERER_TARGETTEXTURE);
    if(NULL == g_pRenderer)
    {
        printf("创建渲染器失败!%s\n", SDL_GetError());
        return 0;
    }

    return 1;
}

2.完成释放操作。
为什么进行非空判断?
避免由于初始化部分成功和部分不成功,在释放时进行一个必要性的判断。

void close(void)
{
    // 释放图片纹理
    if(g_pTexture != NULL)
    {
        SDL_DestroyTexture(g_pTexture);
        g_pTexture = NULL;
    }

    // 释放渲染器
    if(g_pRenderer != NULL)
    {
        SDL_DestroyRenderer(g_pRenderer);
        g_pRenderer = NULL;
    }

    //释放窗口
    if(g_pWindow != NULL)
    {
        SDL_DestroyWindow(g_pWindow);
        g_pWindow = NULL;
    }

    // 退出SDL库
    SDL_Quit();

    printf("程序释放成功!\n");
}

3.加载图片操作,0代表失败 1 代表成功。根据文件路径加载图片纹理。

int load(const char * szPath)
{
    g_pTexture = IMG_LoadTexture(g_pRenderer, szPath);
    if(NULL == g_pTexture)
    {
        printf("加载 %s 图片失败!\n", szPath);
        return 0;
    }
    return 1;
}

4.事件处理。

// 往渲染器绘制图像并刷新
    SDL_RenderCopy(g_pRenderer, g_pTexture, NULL, NULL);
    SDL_RenderPresent(g_pRenderer);

while(1)
    {
        // 轮寻取事件
        while(SDL_PollEvent(&e) != 0)
        {
            switch(e.type)  // UInt32   32位无符号整型
            {
            case SDL_QUIT:          // 退出事件
                {
                    printf("程序将要关
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值