
DSDL - SDL لدلفي؟ هو إطار عمل قوي في Delphi يدمج الميزات القوية لـ SDL3 ومكتباته ذات الصلة مع إمكانات محسّنة مثل الرسوم المتحركة لوقت العمود الفقري ، وتشغيل الفيديو MPEG-1 ، ودعم I/O المستند إلى ZIP . تم تصميم هذه المكتبة لمساعدة المطورين على بناء ألعاب ثنائية الأبعاد حديثة وعالية الأداء وتطبيقات الوسائط المتعددة بكفاءة.
SDL_IOStream من SDL.استخدام الحالة:
استخدام الحالة:
.json و .atlas .استخدام الحالة:
استخدام الحالة:
استخدام الحالة:
استنساخ أو تنزيل المستودع:
git clone https://github.com/your-repo/dsdl.git
cd dsdlأضف ملفات المكتبة إلى مشروع Delphi الخاص بك:
DSDL.pas (أو الوحدات ذات الصلة) في مصدر المشروع الخاص بك.تجميع وتشغيل مشروعك.
إليك كيفية تهيئة نافذة وتحميل الأصول واستخدم الإطار:
تهيئة SDL وإنشاء نافذة
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 ;تحميل الرسوم المتحركة العمود الفقري
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 ;تشغيل مقاطع فيديو 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 ;القراءة من ملفات zip المحمية كلمة المرور
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 ;يستخدم هذا المشروع المكتبات التالية مفتوحة المصدر:
يتم توزيع DSDL تحت؟ ترخيص BSD-3-CASE ، مما يسمح بإعادة التوزيع والاستخدام في كل من النماذج المصدر والثنائية ، مع أو بدون تعديل ، في ظل ظروف محددة. انظر ملف الترخيص لمزيد من التفاصيل.
شكر خاص لمحاربي:
استكشف المناقشة المتعمقة حول DSDL وميزاتها وحالات الاستخدام.
تحميل الرسوم المتحركة للعمود الفقري من Zipfile
تشغيل الفيديو من Zipfile
يتم تشجيع المساهمات في DSDL للغاية. لا تتردد في تقديم المشكلات ، أو اقتراح ميزات جديدة ، أو إنشاء طلبات سحب لتوسيع إمكانيات وقوة محرك البرمجة النصية.
مع DSDL ، يمكنك بناء ألعاب وتطبيقات قوية وحديثة ثنائية الأبعاد دون عناء. سواء كنت تقوم بتنشيط أحرف أو دفق مقاطع الفيديو أو إدارة الموارد الآمنة ، فقد قمت بتغطية DSDL ! ؟

مصنوع من ❤ في دلفي