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;
}

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐