赞
踩
SDL
,“Simple DirecMedia Layer
”,是一套跨平台的多媒体开发库。用于游戏开发中的多媒体处理,比如视频渲染,音频播放,鼠标/键盘控制等。对外提供统一的接口,内部会根据不同的平台调用底层的API
。这里我们主要分析播放音频和视频的接口。
官网 http://www.libsdl.org/
使用:windows可以直接下载sdl的头文件,lib
和dll
。使用时,需要包含头文件和库文件,运行时需要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
SDL
通过消息循环处理各种事件。
SDL_PollEvent
取出消息。返回值:0-没有消息,1-有消息
SDL_Event
消息事件,其中type
指定具体的事件类型。一些事件类型定义如下
//SDL_event.h中
SDL_QUIT 退出,点右上角的x
SDL_KEYDOWN 键盘相关
SDL_KEYUP
SDL_MOUSEMOTION 鼠标相关
SDL_MOUSEBUTTONDOWN
SDL_MOUSEBUTTONUP
SDL_MOUSEWHEEL
...
自定义事件
定义事件类型的宏
#define SDL_CUSTOM_EVENT (SDL_USEREVENT + 1)
发送自定义事件
SDL_Event event;
event.type = SDL_CUSTOM_EVENT;
SDL_PushEvent(&event);
头文件
#ifndef _SDL_HEADER_H__ #define _SDL_HEADER_H__ #ifdef __cplusplus extern "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 <iostream> #include <thread> #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; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。