SDL es Simple DirectMedia Layer . Es una biblioteca de desarrollo multiplataforma diseñada para brindar acceso de bajo nivel a hardware de audio, teclado, mouse, joystick y gráficos a través de OpenGL y Direct3D. Se puede usar para crear animaciones y videojuegos.
- Básicamente proporciona un conjunto de API para interactuar con varios dispositivos como hardware de gráficos, audio, teclado, mouse, etc.
- Está escrito en lenguaje de programación C y funciona con C++ y varios otros lenguajes como c# y python.
Instalación en Linux (para sistemas operativos que usan el administrador de paquetes apt, por ejemplo: Ubuntu):
- Ejecute el comando sudo apt-get update en su terminal.
- Ejecute el comando sudo apt-get install clang en su terminal.
- Ejecute el comando sudo apt-get install libsdl2-2.0-0 libsdl2-dbg libsdl2-dev libsdl2-image-2.0-0 libsdl2-image-dbg libsdl2-image-dev en su terminal.
- Necesitamos hacer un Makefile. Así que abra un editor de texto de su elección y comience a escribir el código a continuación.
# A simple Makefile for compiling small SDL projects # set the compiler CC := clang # set the compiler flags CFLAGS := `sdl2-config --libs --cflags` -ggdb3 -O0 --std=c99 -Wall -lSDL2_image -lm # add header files here HDRS := # add source files here SRCS := #file-name.c # generate names of object files OBJS := $(SRCS:.c=.o) # name of executable EXEC := #name your executable file # default recipe all: $(EXEC) showfont: showfont.c Makefile $(CC) -o $@ $@.c $(CFLAGS) $(LIBS) glfont: glfont.c Makefile $(CC) -o $@ $@.c $(CFLAGS) $(LIBS) # recipe for building the final executable $(EXEC): $(OBJS) $(HDRS) Makefile $(CC) -o $@ $(OBJS) $(CFLAGS) # recipe for building object files #$(OBJS): $(@:.o=.c) $(HDRS) Makefile # $(CC) -o $@ $(@:.o=.c) -c $(CFLAGS) # recipe to clean the workspace clean: rm -f $(EXEC) $(OBJS) .PHONY: all clean
Archivos de encabezado:
C++
// for initializing and shutdown functions #include <SDL2/SDL.h> // for rendering images and graphics on screen #include <SDL2/SDL_image.h> // for using SDL_Delay() functions #include <SDL2/SDL_timer.h>
Inicialización:
C++
#include <SDL2/SDL.h> #include <SDL2/SDL_image.h> #include <SDL2/SDL_timer.h> int main(int argc, char *argv[]) { // returns zero on success else non-zero if (SDL_Init(SDL_INIT_EVERYTHING) != 0) { printf("error initializing SDL: %s\n", SDL_GetError()); } SDL_Window* win = SDL_CreateWindow("GAME", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1000, 1000, 0); while (1) ; return 0; }
Eso creará una ventana vacía en su pantalla.
Producción:
Escribiremos un programa simple para explicar el procesamiento y el manejo de E/S:
C++
#include <SDL2/SDL.h> #include <SDL2/SDL_image.h> #include <SDL2/SDL_timer.h> int main(int argc, char *argv[]) { // returns zero on success else non-zero if (SDL_Init(SDL_INIT_EVERYTHING) != 0) { printf("error initializing SDL: %s\n", SDL_GetError()); } SDL_Window* win = SDL_CreateWindow("GAME", // creates a window SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1000, 1000, 0); // triggers the program that controls // your graphics hardware and sets flags Uint32 render_flags = SDL_RENDERER_ACCELERATED; // creates a renderer to render our images SDL_Renderer* rend = SDL_CreateRenderer(win, -1, render_flags); // creates a surface to load an image into the main memory SDL_Surface* surface; // please provide a path for your image surface = IMG_Load("path"); // loads image to our graphics hardware memory. SDL_Texture* tex = SDL_CreateTextureFromSurface(rend, surface); // clears main-memory SDL_FreeSurface(surface); // let us control our image position // so that we can move it with our keyboard. SDL_Rect dest; // connects our texture with dest to control position SDL_QueryTexture(tex, NULL, NULL, &dest.w, &dest.h); // adjust height and width of our image box. dest.w /= 6; dest.h /= 6; // sets initial x-position of object dest.x = (1000 - dest.w) / 2; // sets initial y-position of object dest.y = (1000 - dest.h) / 2; // controls animation loop int close = 0; // speed of box int speed = 300; // animation loop while (!close) { SDL_Event event; // Events management while (SDL_PollEvent(&event)) { switch (event.type) { case SDL_QUIT: // handling of close button close = 1; break; case SDL_KEYDOWN: // keyboard API for key pressed switch (event.key.keysym.scancode) { case SDL_SCANCODE_W: case SDL_SCANCODE_UP: dest.y -= speed / 30; break; case SDL_SCANCODE_A: case SDL_SCANCODE_LEFT: dest.x -= speed / 30; break; case SDL_SCANCODE_S: case SDL_SCANCODE_DOWN: dest.y += speed / 30; break; case SDL_SCANCODE_D: case SDL_SCANCODE_RIGHT: dest.x += speed / 30; break; default: break; } } } // right boundary if (dest.x + dest.w > 1000) dest.x = 1000 - dest.w; // left boundary if (dest.x < 0) dest.x = 0; // bottom boundary if (dest.y + dest.h > 1000) dest.y = 1000 - dest.h; // upper boundary if (dest.y < 0) dest.y = 0; // clears the screen SDL_RenderClear(rend); SDL_RenderCopy(rend, tex, NULL, &dest); // triggers the double buffers // for multiple rendering SDL_RenderPresent(rend); // calculates to 60 fps SDL_Delay(1000 / 60); } // destroy texture SDL_DestroyTexture(tex); // destroy renderer SDL_DestroyRenderer(rend); // destroy window SDL_DestroyWindow(win); // close SDL SDL_Quit(); return 0; }
Eso generará una imagen en la ventana que se puede controlar a través de su teclado hacia arriba, abajo, izquierda, derecha.
Producción:
Referencias: https://www.libsdl.org/ , https://github.com/vivek9236/rocket_game
Publicación traducida automáticamente
Artículo escrito por VivekAgrawal3 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA