博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SDL2.0-简介
阅读量:2378 次
发布时间:2019-05-10

本文共 3243 字,大约阅读时间需要 10 分钟。

文章目录

SDL,“Simple DirecMedia Layer”,是一套跨平台的多媒体开发库。用于游戏开发中的多媒体处理,比如视频渲染,音频播放,鼠标/键盘控制等。对外提供统一的接口,内部会根据不同的平台调用底层的API。这里我们主要分析播放音频和视频的接口。

1、安装SDL

  • 官网 http://www.libsdl.org/

  • 使用:windows可以直接下载sdl的头文件,libdll。使用时,需要包含头文件和库文件,运行时需要dll文件。linux平台可以自己编译

  • 下载windows VC的开发包,解压后内容如下

    ├─docs							//一些文档│      ├─include						//头文件│      └─lib							//lib和dll    ├─x64    │      SDL2.dll    │      SDL2.lib    │      SDL2main.lib    │      SDL2test.lib    │          └─x86            SDL2.dll            SDL2.lib            SDL2main.lib            SDL2test.lib

2、事件处理

SDL通过消息循环处理各种事件。

  • SDL_PollEvent取出消息。返回值:0-没有消息,1-有消息

  • SDL_Event 消息事件,其中type指定具体的事件类型。一些事件类型定义如下

    //SDL_event.h中SDL_QUIT 			退出,点右上角的xSDL_KEYDOWN 		键盘相关SDL_KEYUPSDL_MOUSEMOTION		鼠标相关SDL_MOUSEBUTTONDOWNSDL_MOUSEBUTTONUPSDL_MOUSEWHEEL...
  • 自定义事件

    1. 定义事件类型的宏

      #define SDL_CUSTOM_EVENT (SDL_USEREVENT + 1)

    2. 发送自定义事件

      SDL_Event event;event.type = SDL_CUSTOM_EVENT;SDL_PushEvent(&event);

3、Demo

头文件

#ifndef _SDL_HEADER_H__#define _SDL_HEADER_H__#ifdef __cplusplusextern "C"{#endif#include "SDL.h"#include "SDL_main.h"#include "SDL_types.h"#ifdef __cplusplus}#endif#pragma comment(lib, "SDL2.lib")#pragma comment(lib, "SDL2main.lib")#endif

实现:

#include "SDLHeader.h"#include 
#include
#define SDL_CUSTOM_EVENT (SDL_USEREVENT+1)int main(int argc, char* argv[]){ bool quit = false; SDL_Window* window = nullptr; SDL_Renderer* renderer = nullptr; SDL_Init(SDL_INIT_VIDEO); //init sdl window = SDL_CreateWindow( //init window "First Window", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE ); if (!window) return -1; renderer = SDL_CreateRenderer(window, -1, 0); //init renderer if (!renderer) return -1; SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255); //设置渲染器颜色 SDL_RenderClear(renderer); //清理renderer SDL_RenderPresent(renderer); //绘制renderer //启动线程,创建自定义的事件 std::thread th([]() { SDL_Delay(3000); SDL_Event event; event.type = SDL_CUSTOM_EVENT; SDL_PushEvent(&event); return 0; }); SDL_Event windowsEvent; while (!quit) { while (SDL_PollEvent(&windowsEvent)) { switch (windowsEvent.type) { case SDL_QUIT: quit = true; break; case SDL_KEYDOWN: std::cout << "key down event" << std::endl; break; case SDL_KEYUP: std::cout << "key up event" << std::endl; break; case SDL_MOUSEBUTTONUP: std::cout << "mouse button up event" << std::endl; break; default: std::cout << "event type=" << windowsEvent.type << " come" << std::endl; break; } } } if (th.joinable()) th.join(); SDL_DestroyRenderer(renderer); //销毁renderer SDL_DestroyWindow(window); //销毁windows SDL_Quit(); //退出 return 0;}

转载地址:http://ftmxb.baihongyu.com/

你可能感兴趣的文章
原创BPR之企业流程分析模型图 FDD
查看>>
PLM技术促进现代模具企业精益化和规模化
查看>>
独一无二的IFS CAD与PDM集成工具发布
查看>>
BPR-FDD 模型图原始档
查看>>
mail
查看>>
团队管理的五项职能--学习笔记加个人理解总结
查看>>
自勉三句话--关于职业生涯规划
查看>>
grace
查看>>
test
查看>>
用友实施方法论
查看>>
系统功能清单
查看>>
ERP&MES&SCM 三兄弟发展史
查看>>
Grace的简历-v3.1
查看>>
file2
查看>>
file456
查看>>
flow
查看>>
需求定位模型
查看>>
BOM
查看>>
Eclipse Debug调试详解
查看>>
Type Dynamic Web Module 4.0 requires Java 1.8 or newer----彻底杀死Bug
查看>>