
DSDL - SDL pour Delphi? est un puissant framework Delphi-natif qui intègre les fonctionnalités robustes de SDL3 et de ses bibliothèques connexes avec des capacités améliorées telles que l'animation d'exécution de la colonne vertébrale , la lecture vidéo MPEG-1 et le support d'E / S sécurisé . Cette bibliothèque est conçue pour aider les développeurs à créer efficacement des jeux 2D haute performance modernes et des applications multimédias .
SDL_IOStream de SDL.Cas d'utilisation:
Cas d'utilisation:
.json et .atlas .Cas d'utilisation:
Cas d'utilisation:
Cas d'utilisation:
Cloner ou télécharger le référentiel:
git clone https://github.com/your-repo/dsdl.git
cd dsdlAjoutez les fichiers de bibliothèque à votre projet Delphi:
DSDL.pas (ou les unités pertinentes) dans la source de votre projet.Compilez et exécutez votre projet.
Voici comment vous initialisez une fenêtre, chargez des actifs et utilisez le framework:
Initialiser SDL et créer une fenêtre
uses
DSDL;
var
Window: PSDL_Window;
Renderer: PSDL_Renderer;
begin
if SDL_Init(SDL_INIT_VIDEO) <> 0 then
Exit;
Window := SDL_CreateWindow( ' DSDL Window ' , 100 , 100 , 800 , 600 , SDL_WINDOW_SHOWN);
Renderer := SDL_CreateRenderer(Window, - 1 , SDL_RENDERER_ACCELERATED or SDL_RENDERER_PRESENTVSYNC);
// Your code goes here...
SDL_DestroyWindow(Window);
SDL_Quit;
end ;Chargement des animations de la colonne vertébrale
var
Atlas: PspAtlas;
SkeletonData: PspSkeletonData;
Drawable: PspSkeletonDrawable;
begin
Atlas := spAtlas_createFromFile( ' data/spineboy-pma.atlas ' , Renderer);
SkeletonData := spSkeletonJson_readSkeletonDataFile(Atlas, ' data/spineboy-pro.json ' );
Drawable := spSkeletonDrawable_create(SkeletonData);
Drawable^.Skeleton^.X := 400 ;
Drawable^.Skeleton^.Y := 500 ;
// Update and draw skeleton
spSkeletonDrawable_update(Drawable, DeltaTime, SP_PHYSICS_UPDATE);
spSkeletonDrawable_draw(Drawable, Renderer);
end ;Lire des vidéos MPEG-1
begin
// Load and play a video file from the ZIP archive.
SDL_LoadPlayVideoFromZipFile(LRenderer, ' Data.zip ' , ' res/videos/sample01.mpg ' , 0.1 , - 1 );
...
// Update video playback timing.
SDL_UpdateVideo(SDL_GetFramerateDuration());
...
// Render the video content.
SDL_RenderVideo(LRenderer, 0 , 0 , 0.5 );
end ;Lecture à partir de fichiers zip protégés par mot de passe
var
LRenderer: PSDL_Renderer;
LTexture: PSDL_Texture;
begin
...
// Load an image texture from the ZIP archive.
LTexture := IMG_LoadTexture_IO(LRenderer, SDL_IOFromZipFile( ' Data.zip ' ,
' res/images/cute_kitten.jpg ' ), True);
...
SDL_DestroyTexture(LTexture);
end ; uses
DSDL;
var
LWindow: PSDL_Window; // Pointer to the SDL window.
LRenderer: PSDL_Renderer; // Pointer to the SDL renderer.
LAtlas: PspAtlas; // Atlas for Spine animation textures.
LSkeletonJson: PspSkeletonJson; // JSON parser for Spine skeleton data.
LSkeletonData: PspSkeletonData; // Spine skeleton data.
LAnimationStateData: PspAnimationStateData; // State data for animation transitions.
LDrawable: PspSkeletonDrawable; // Drawable object for the Spine skeleton.
LEvent: SDL_Event; // Event structure for SDL event handling.
LQuit: Boolean; // Flag to control the main loop.
LLastFrameTime, LNow: UInt64; // Variables for frame timing.
LDeltaTime: Double; // Time elapsed between frames.
begin
// Initialize SDL video subsystem.
if not SDL_Init(SDL_INIT_VIDEO) then
begin
Writeln( ' Error: ' , SDL_GetError); // Print SDL initialization error.
Exit; // Exit if initialization fails.
end ;
// Create an SDL window with the specified title and size.
LWindow := SDL_CreateWindow( ' DSDL: Load spine animation from file ' , 800 , 600 , 0 );
if LWindow = nil then
begin
Writeln( ' Error: ' , SDL_GetError); // Print window creation error.
SDL_Quit; // Clean up SDL resources.
Exit;
end ;
// Create an SDL renderer for the window with OpenGL backend.
LRenderer := SDL_CreateRenderer(LWindow, ' opengl ' );
if LRenderer = nil then
begin
Writeln( ' Error: ' , SDL_GetError); // Print renderer creation error.
SDL_DestroyWindow(LWindow); // Destroy the created window.
SDL_Quit; // Clean up SDL resources.
Exit;
end ;
// Load the Spine animation atlas.
LAtlas := spAtlas_createFromFile( ' res/spine/spineboy/spineboy-pma.atlas ' , LRenderer);
// Create a skeleton JSON parser and scale the skeleton.
LSkeletonJson := spSkeletonJson_create(LAtlas);
LSkeletonJson.scale := 0.5 ;
// Read skeleton data from the JSON file.
LSkeletonData := spSkeletonJson_readSkeletonDataFile(LSkeletonJson,
' res/spine/spineboy/spineboy-pro.json ' );
// Create animation state data and set default transition mix.
LAnimationStateData := spAnimationStateData_create(LSkeletonData);
LAnimationStateData.defaultMix := 0.2 ;
// Create a drawable skeleton object and set its initial position.
LDrawable := spSkeletonDrawable_create(LSkeletonData, LAnimationStateData);
LDrawable.usePremultipliedAlpha := - 1 ; // Enable premultiplied alpha.
LDrawable.skeleton^.x := 400 ; // Set X position.
LDrawable.skeleton^.y := 500 ; // Set Y position.
// Set the skeleton to its setup pose.
spSkeleton_setToSetupPose(LDrawable.skeleton);
// Perform an initial skeleton update.
spSkeletonDrawable_update(LDrawable, 0 , SP_PHYSICS_UPDATE);
// Set initial animation state: 'portal' followed by 'run' (looped).
spAnimationState_setAnimationByName(LDrawable.animationState, 0 , ' portal ' , 0 );
spAnimationState_addAnimationByName(LDrawable.animationState, 0 , ' run ' , - 1 , 0 );
// Initialize the quit flag and timing variables.
LQuit := False;
LLastFrameTime := SDL_GetPerformanceCounter;
// Main event loop.
while not LQuit do
begin
// Poll SDL events.
while SDL_PollEvent(@LEvent) do
begin
// Exit the loop if a quit event is detected.
if LEvent.& type = SDL_EVENT_QUIT then
begin
LQuit := True;
Break;
end ;
end ;
// Clear the screen with a specified color.
SDL_SetRenderDrawColor(LRenderer, 94 , 93 , 96 , 255 );
SDL_RenderClear(LRenderer);
// Calculate delta time (time between frames) for smooth animation.
LNow := SDL_GetPerformanceCounter;
LDeltaTime := (LNow - LLastFrameTime) / SDL_GetPerformanceFrequency;
LLastFrameTime := LNow;
// Update the skeleton animation based on delta time.
spSkeletonDrawable_update(LDrawable, LDeltaTime, SP_PHYSICS_UPDATE);
// Draw the updated skeleton on the renderer.
spSkeletonDrawable_draw(LDrawable, LRenderer);
// Present the rendered frame to the window.
SDL_RenderPresent(LRenderer);
end ;Ce projet utilise les bibliothèques open source suivantes:
DSDL est distribué sous le? Licence de clause BSD-3 , permettant la redistribution et l'utilisation sous des formulaires source et binaire, avec ou sans modification, dans des conditions spécifiques. Voir le fichier de licence pour plus de détails.
Un merci spécial aux responsables de:
Explorez la discussion approfondie sur DSDL, ses fonctionnalités et ses cas d'utilisation.
Chargez l'animation de la colonne vertébrale de ZipFile
Lecture vidéo de ZipFile
Les contributions au DSDL sont fortement encouragées. N'hésitez pas à soumettre des problèmes, à suggérer de nouvelles fonctionnalités ou à créer des demandes de traction pour étendre les capacités et la robustesse du moteur de script.
Avec DSDL , vous pouvez construire sans effort des jeux 2D robustes et modernes. Que vous animiez des personnages, en streaming des vidéos ou en gérant des ressources sécurisées, DSDL vous a couvert! ?

Fait avec ❤️ à Delphi