📅  最后修改于: 2023-12-03 15:13:44.439000             🧑  作者: Mango
SDL库是Simple DirectMedia Layer的缩写,它是一个跨平台的图形、音频、输入、事件以及线程库。SDL库提供了底层硬件访问和高层软件抽象的结合,相对于其他图形库来说它更加直接和轻量级。该库被广泛应用在游戏、模拟器、媒体播放器等多个领域。当前SDL库有两个版本:SDL1和SDL2。SDL2更新了很多API,并且加入了新的特性,如全屏、多窗口等。
在下面几个方面,SDL库有着不同于其他库的优势:
下载地址:https://www.libsdl.org/release/SDL-1.2.15.tar.gz
安装步骤:
tar zxvf SDL-1.2.15.tar.gz
cd SDL-1.2.15
./configure
make
sudo make install
下载地址:https://www.libsdl.org/release/SDL2-2.0.14.tar.gz
安装步骤:
tar zxvf SDL2-2.0.14.tar.gz
cd SDL2-2.0.14
./configure
make
sudo make install
注意:在Windows平台上,可以直接下载对应的SDL库的预编译版本并安装。
下面就让我们来看一些SDL库的基础示例。
#include <stdio.h>
#include <SDL.h>
int main(int argc, char* argv[]) {
// 初始化SDL库
if (SDL_Init(SDL_INIT_VIDEO) != 0) {
printf("SDL_Init Error: %s", SDL_GetError());
return 1;
}
// 释放所有资源并退出SDL库
SDL_Quit();
return 0;
}
#include <stdio.h>
#include <SDL.h>
int main(int argc, char* argv[]) {
if (SDL_Init(SDL_INIT_VIDEO) != 0) {
printf("SDL_Init Error: %s", SDL_GetError());
return 1;
}
// 创建SDL的窗口对象
SDL_Window* window = SDL_CreateWindow("SDL Example",
SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
640, 480, SDL_WINDOW_SHOWN);
if (window == NULL) {
printf("SDL_CreateWindow Error: %s", SDL_GetError());
SDL_Quit();
return 1;
}
// 创建SDL的渲染器对象
SDL_Renderer* renderer =
SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
if (renderer == NULL) {
printf("SDL_CreateRenderer Error: %s", SDL_GetError());
SDL_DestroyWindow(window);
SDL_Quit();
return 1;
}
// 设置背景颜色
SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255);
// 清空窗口
SDL_RenderClear(renderer);
// 刷新窗口
SDL_RenderPresent(renderer);
// 等待3秒
SDL_Delay(3000);
// 释放资源
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}
#include <stdio.h>
#include <SDL.h>
int main(int argc, char* argv[]) {
if (SDL_Init(SDL_INIT_VIDEO) != 0) {
printf("SDL_Init Error: %s", SDL_GetError());
return 1;
}
SDL_Window* window = SDL_CreateWindow("SDL Example",
SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
640, 480, SDL_WINDOW_SHOWN);
if (window == NULL) {
printf("SDL_CreateWindow Error: %s", SDL_GetError());
SDL_Quit();
return 1;
}
SDL_Renderer* renderer =
SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
if (renderer == NULL) {
printf("SDL_CreateRenderer Error: %s", SDL_GetError());
SDL_DestroyWindow(window);
SDL_Quit();
return 1;
}
SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255);
SDL_RenderClear(renderer);
SDL_RenderPresent(renderer);
int running = 1;
SDL_Event event;
while (running) {
while (SDL_PollEvent(&event) != 0) {
// 用户关闭窗口事件
if (event.type == SDL_QUIT) {
running = 0;
}
// 键盘按下事件
if (event.type == SDL_KEYDOWN) {
if (event.key.keysym.sym == SDLK_ESCAPE) {
running = 0;
}
}
}
}
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}
本文介绍了SDL库的基础知识和示例代码,SDL库可以协助程序员开发直接、轻量级,且跨平台、高性能的应用程序。熟练掌握SDL库可以让你的开发更加容易且效率更高,快来尝试使用吧!