(1) Umgebungseinrichtung:
Ubuntu:
sudo apt install libsdl2-dev
# Das Folgende ist eine Erweiterung
sudo apt install libsdl2-image-dev # Wird zum Anzeigen von Bildern in PNG, JPG und anderen Formaten verwendet
sudo apt install libsdl2-mixer-dev # Ein einfacher Mehrkanalmixer
sudo apt install libsdl2-ttf-dev # Wird zum Anzeigen von Text verwendet
sudo apt install libsdl2-gfx-dev # SDL-Grafikzeichnungsprimitive und andere unterstützende Funktionen Autor: Open Source
(2) Zusammenstellung
Beschreibung von SDL2:
pkg-config --cflags --libs sdl2
g++ -Wall test.cpp -o test -I /usr/include/SDL2 -lSDL2 -lSDL2_image
Beispiel:
#include <iostream>
/*Da SDL2 in der Sprache C entwickelt wurde, muss hier eine C-Sprachdeklaration hinzugefügt werden*/
extern "C"
{ #include "SDL.h" #include "SDL_ttf.h" }
/*Da die Hauptfunktion in SDL2 vorhanden ist, muss sie entfernt werden. Andernfalls schlägt die Kompilierung fehl!*/
#undef main
const int SCREEN_WIDTH = 680;
const int SCREEN_HEIGHT = 240;
int main(int, char**)
{ // SDL initialisieren if (SDL_Init(SDL_INIT_VIDEO) != 0) { return -1; } // TTF initialisieren if (TTF_Init() != 0) { return -1; }
// SDL_Window anzeigen
*sdlWindow = SDL_CreateWindow("SDL_ttf", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
if (!sdlWindow) { return -1; }
//Renderer erstellen
SDL_Renderer *sdlRender = SDL_CreateRenderer(sdlWindow, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
if (!sdlRender) { return -1; }
// Öffne die Schriftartenbibliothek
TTF_Font *ttfFont = TTF_OpenFont("./simhei.ttf", 64);
if (!ttfFont) { return false; }
// Erstelle eine 32-Bit-ARGB-Oberfläche und rendere den angegebenen Text in hoher Qualität , verwendet Alpha-Blending, um eine Schriftart einer bestimmten Farbe zu dithern.
SDL_Surface *sdlSurface = TTF_RenderText_Blended(ttfFont, „TTF-Schriftarten sind cool!“, SDL_Color{ 255, 255, 255, 255 }); if (!sdlSurface) { TTF_CloseFont
(ttfFont); return -1; }
// Textur erstellen
SDL_Texture * sdlTexture = SDL_CreateTextureFromSurface(sdlRender, sdlSurface);
if (!sdlTexture) { TTF_CloseFont(ttfFont); return -1; }
// Texttextur zentrieren
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; brechen; } }
// Überarbeitete Trilogie
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();
0 zurückgeben;
}