1.简介
SDL(Simple DirectMedia Layer)是一个跨平台的多媒体开发库,使用C语言写成,用于实现音频、图形、输入以及窗口功能的处理。它提供了一个简单、易用的API,可以帮助开发者快速构建跨平台的多媒体应用程序。
SDL库分为 Video、Audio、CD-ROM、Joystick 和 Timer 等若干子系统。
- Video(图像)—图像控制以及线程(thread)和事件管理(event)。
- Audio(声音)—声音控制
- Joystick(摇杆)—游戏摇杆控制
- CD-ROM(光盘驱动器)—光盘媒体控制
- Window Management(视窗管理)-与视窗程序设计集成
- Event(事件驱动)-处理事件驱动
除此之外,还有一些单独的官方扩充函数库。这些库由官方网站提供,并包含在官方文档中,共同组成了SDL的“标准库”:
- SDL_image—支持时下流行的图像格式:BMP、PPM、XPM、 PCX、GIF、JPEG、PNG、TGA。
- SDL_mixer—更多的声音输出函数以及更多的声音格式支持。
- SDL_net—网络支持。
- SDL_ttf—TrueType字体渲染支持。
- SDL_rtf—简单的RTF渲染支持。
2.SDL库的主要特点
- 简单易用:SDL库提供了一套简洁清晰的API,可以快速上手。它的文档详尽,示例丰富。
- 跨平台:SDL库可以在多个操作系统上使用。
- 多媒体处理:SDL库提供了对音频、图形的处理能力。
- 输入处理:SDL库可以处理多种输入设备,包括键盘、鼠标、游戏手柄等。
- 窗口管理:SDL库提供了窗口管理功能,可以创建和管理窗口。
3.编译
SDL2.0源码下载地址:
GitHub - libsdl-org/SDL at SDL2
解压源码包:
使用cmake进行编译:设置源码的路径,以及编译后的存放路径,
点击Configure,再点击Generate,最后Open Project,编译成库。
最后库文件生成到Release目录下。
4.配置
新建解决方案工程文件SDL2Test.sln
在解决方案工程文件SDL2Test.sln基础上新建项目SinglestTest。
在SinglestTest同级目录下新建目录thirdPart
thirdPart目录结构如下所示thirdPart\SDL2
分别将编译好的lib、dll库文件放到lib目录、bin目录下。
将源码中的SDL-SDL2\include目录下所有文件拷贝到include目录下。
SinglestTest工程配置include和lib。
C/C++->常规->附加包含目录:$(SolutionDir)thirdPart\SDL2\include
链接器->常规->附加库目录:$(SolutionDir)thirdPart\SDL2\lib
链接器->输入->附加依赖项:SDL2.lib
至此环境已经配置完成。
5.示例
// SinglestTest.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#include <SDL.h>
#undef main
int main()
{
SDL_Window *window = SDL_CreateWindow("demo", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640, 480, SDL_WINDOW_SHOWN);
SDL_Renderer *renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
bool quit = false;
SDL_Event event;
SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
while (!quit) {
while (SDL_PollEvent(&event)) {
switch (event.type) {
case SDL_QUIT:
quit = true;
break;
case SDL_MOUSEMOTION:
if (SDL_GetMouseState(NULL, NULL) &SDL_BUTTON(1))
SDL_RenderDrawPoint(renderer, event.motion.x, event.motion.y);
break;
}
}
SDL_RenderPresent(renderer);
SDL_Delay(1000 / 60);
}
SDL_DestroyWindow(window);
SDL_DestroyRenderer(renderer);
return 0;
}