(一)环境搭建:
ubuntu:
sudo apt install libsdl2-dev
# 以下是拓展
sudo apt install libsdl2-image-dev # 用于显示png、jpg等格式的图片
sudo apt install libsdl2-mixer-dev # 一种简单的多声道混音器
sudo apt install libsdl2-ttf-dev # 用于显示文字
sudo apt install libsdl2-gfx-dev # SDL图形绘制图元和其他支持功能 作者:开源者
(二)编译
SDL2编译:
pkg-config --cflags --libs sdl2
g++ -Wall test.cpp -o test -I /usr/include/SDL2 -lSDL2 -lSDL2_image
例子:
#include <iostream>
/*因SDL2是C语言开发,所以这里需要加入C语言声明*/
extern "C"
{
#include "SDL.h"
#include "SDL_ttf.h"
}
/*因为SDL2内部存在main函数,则需要将其去掉。否则编译失败!*/
#undef main
const int SCREEN_WIDTH = 680;
const int SCREEN_HEIGHT = 240;
int main(int, char**)
{
// 初始化SDL
if (SDL_Init(SDL_INIT_VIDEO) != 0) { return -1; }
// 初始化TTF
if (TTF_Init() != 0) { return -1; }
// 创建SDL窗口
SDL_Window *sdlWindow = SDL_CreateWindow("SDL_ttf", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
if (!sdlWindow) { return -1; }
// 创建渲染器
SDL_Renderer *sdlRender = SDL_CreateRenderer(sdlWindow, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
if (!sdlRender) { return -1; }
// 打开字体库
TTF_Font *ttfFont = TTF_OpenFont("./simhei.ttf", 64);
if (!ttfFont) { return false; }
// 创建一个32位的ARGB表面,并渲染给定的文本在高质量,使用alpha混合来使给定颜色的字体抖动。
SDL_Surface *sdlSurface = TTF_RenderText_Blended(ttfFont, "TTF fonts are cool!", SDL_Color{ 255, 255, 255, 255 });
if (!sdlSurface) { TTF_CloseFont(ttfFont); return -1; }
// 创建纹理
SDL_Texture *sdlTexture = SDL_CreateTextureFromSurface(sdlRender, sdlSurface);
if (!sdlTexture) { TTF_CloseFont(ttfFont); return -1; }
// 文字纹理居中
SDL_Rect sdlRect;
SDL_QueryTexture(sdlTexture, NULL, NULL, &sdlRect.w, &sdlRect.h);
sdlRect.x = SCREEN_WIDTH / 2 - sdlRect.w / 2;
sdlRect.y = SCREEN_HEIGHT / 2 - sdlRect.h / 2;
SDL_Event sdlEvent;
bool quit = false;
while (!quit)
{
while (SDL_PollEvent(&sdlEvent)) { if (sdlEvent.type == SDL_QUIT) { quit = true; break; } }
// 刷新三部曲
SDL_RenderClear(sdlRender);
SDL_RenderCopy(sdlRender, sdlTexture, nullptr, &sdlRect);
SDL_RenderPresent(sdlRender);
SDL_Delay(1);
}
if (ttfFont) { TTF_CloseFont(ttfFont); } ttfFont = nullptr;
if (sdlSurface) { SDL_FreeSurface(sdlSurface); } sdlSurface = nullptr;
if (sdlTexture) { SDL_DestroyTexture(sdlTexture); } sdlTexture = nullptr;
if (sdlRender) { SDL_DestroyRenderer(sdlRender); } sdlRender = nullptr;
if (sdlWindow) { SDL_DestroyWindow(sdlWindow); } sdlWindow = nullptr;
TTF_Quit();
SDL_Quit();
return 0;
}