الدروس المستفادة من SDL 2: الدرس 1 - مرحبًا ، SDL 2

مرحبا بالجميع! قررت إلقاء نظرة على SDL 2 ، لكنني لم أجد أي شيء معقول باللغة الروسية. قررت أن أكتب إلهي ، وأكل الإلهام من هنا .

سوف أتخطى تثبيت SDL 2 ، وسأبدأ على الفور بكتابة البرامج ، لذلك:

نافذتك الاولى




لنبدأ بتوصيل SDL 2.

#include <SDL2/SDL.h> 

هنا سنعلن العديد من المتغيرات العالمية.

 const int SCREEN_WIDTH = 640; const int SCREEN_HEIGHT = 480; 

بعد ذلك ، افتح الوظيفة الرئيسية المألوفة للجميع.

 int main (int argc, char ** args) { if( SDL_Init( SDL_INIT_EVERYTHING ) != 0 ) { return 1; } SDL_Surface* screen_surface = NULL; SDL_Window* window = NULL; 

لنلقِ نظرة على الكود قليلاً. بشكل رئيسي ، يتم قبول معلمات سطر الأوامر من سطر الأوامر ، ويجب قبولها. بعد ذلك ، نقوم بتهيئة SDL 2 من خلال وظيفة SDL_Init () . لقد قمنا بتمرير SDL_INIT_EVERYTHING إليه ، مما يعني أننا نهيئ جميع وحدات SDL (الفيديو والصوت وما إلى ذلك). يوجد عدد قليل من العلامات الإضافية لـ SDL_Init:

أعلام
SDL_INIT_TIMER - اتصال مؤقت ؛
SDL_INIT_AUDIO - اتصال صوتي ؛
SDL_INIT_VIDEO - اتصال الفيديو ، ترتبط الأحداث تلقائيا ؛
SDL_INIT_JOYSTICK - اتصال التحكم عصا التحكم ؛
SDL_INIT_HAPTIC - النظام الفرعي الملموس (لا أعرف ما هو عليه ، لكي أكون أمينًا) ؛
SDL_INIT_GAMECONTROLER - يربط التحكم ، يتم توصيل عصا التحكم تلقائيا ؛
SDL_INIT_EVENTS - تمكن معالجة الحدث ؛
SDL_INIT_EVERYTHING - يربط كل شيء المذكورة أعلاه ؛
SDL_INIT_NOPARACHUTE - التحقق من التوافق.

بعد ذلك ، قم بإنشاء نافذة باستخدام وظيفة SDL_CreateWindow () . إذا حدث خطأ ما على النحو المنشود ، فقم بإرجاع 1.

  window = SDL_CreateWindow("Hello, SDL 2!",SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SDL_SCREEN_WIDTH, SDL_SCREEN_HEIGHT, SDL_WINDOW_SHOWN); if (window == NULL) { return 1; } 

تقبل وظيفة SDL_CreateWindow () اسم الإطار وموضع إطار OX وموضع إطار OY وعرض الإطار وارتفاع الإطار والإشارات. الآن سنتجاوز العلم SDL_WINDOW_SHOWN .

هناك علامات أخرى لإنشاء نافذة.

أعلام
SDL_WINDOW_FULLSCREEN - يفتح نافذة في وضع ملء الشاشة ، يغير دقة سطح المكتب ؛
SDL_WINDOW_FULLSCREEN_DESKTOP - يفتح نافذة في وضع ملء الشاشة بإذن من سطح المكتب هذا ؛
SDL_WINDOW_OPENGL - نافذة مع دعم OpenGL ؛
SDL_WINDOW_HIDDEN - النافذة مخفية ؛
SDL_WINDOW_BORDERLESS - نافذة بدون إطار ؛
SDL_WINDOW_RESIZABLE - يمكنك تغيير حجم النافذة.
SDL_WINDOW_MINIMIZED - تم تصغير النافذة ؛
SDL_WINDOW_MAXIMIZED - تم تكبير النافذة ؛

إذا قمنا بترجمة البرنامج وتشغيله الآن ، فسوف نرى نافذة بحجم 640 × 480 مملوءة بالأبيض ، وتغلق بعد لحظات. ! رائع للتمتع بهذه المعجزة قليلاً ، يمكننا كتابة SDL_Delay (2000) . سيجعل البرنامج يتجمد لمدة 2 ثانية.

مجرد نافذة جيدة بالطبع ، لكن سيكون من الأفضل أن نرسمها ، أليس كذلك؟ للقيام بذلك ، قم بإنشاء سطح نرسم عليه كل شيء ، لأنه مباشرة في النافذة ، يكون الرسم قبيحًا أو شيء ما.

  screen_surface = SDL_GetWindowSurface(window); SDL_FillRect(screen_surface, NULL, SDL_MapRGB(screen_surface->format, 0, 255, 0)); SDL_UpdateWindowSurface(window); 

أولاً نحصل على سطح النافذة باستخدام وظيفة SDL_GetWindowSurface () . تم صنعه بحيث لم يكن من الضروري الإشارة إلى أبعاد السطح ، وشكله ، ولكن على الفور الحصول على السطح النهائي. وأيضًا ، لا يلزم رسم هذا السطح في النافذة - إنه سيفعل كل شيء بنفسه.

ثم نستخدم SDL_FillRect () لطلاء سطحنا الأخضر. كتبنا SDL_MapRGB ، ونقول للبرنامج أننا سوف نستخدم RGB (أحمر أخضر أزرق) لضبط اللون.

وفي النهاية ، يتعين علينا تحديث الإطار باستخدام وظيفة SDL_UpdateWindowSurface () بحيث يعرض ما قلناه له.

في هذه المرحلة ، عند بدء تشغيل البرنامج ، سيتم عرض نافذة مليئة باللون الأخضر الفاتح ، والتي لن تغلق في غضون ثانيتين.

بعد الانتهاء من البرنامج ، نحتاج إلى مسح ذاكرة الوصول العشوائي من الملفات غير الضرورية ، وإغلاق النافذة ، بشكل عام ، لتحديد الإنهاء الصحيح للبرنامج. في هذا ، سوف تساعدنا الوظائف المعدة خصيصًا.

  SDL_DestroyWindow(window); SDL_Quit(); 

تقوم وظيفة SDL_DestroyWindow () بإغلاق الإطار ، وتقوم دالة SDL_Quit () بإلغاء تهيئة جميع الوحدات النمطية المرتبطة مسبقًا بوظيفة SDL_Init () .

حسنًا ، لقد انتهى الدرس رقم 1 ، وآمل أن يكون كل شيء واضحًا. إليك الكود الذي حصلت عليه في النهاية:

 #include <SDL2/SDL.h> const int SCREEN_WIDTH = 640; const int SCREEN_HEIGHT = 480; int main (int argc, char ** args) { if( SDL_Init( SDL_INIT_EVERYTHING ) != 0 ) { return 1; } SDL_Surface* screen_surface = NULL; SDL_Window* window = NULL; window = SDL_CreateWindow("Hello, SDL 2!",SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN); if (window == NULL) { return 1; } screen_surface = SDL_GetWindowSurface(window); SDL_FillRect(screen_surface, NULL, SDL_MapRGB( screen_surface->format, 0, 255, 0)); SDL_UpdateWindowSurface(window); SDL_Delay(2000); SDL_DestroyWindow(window); SDL_Quit(); return 0; }; 

حظا سعيدا للجميع!

الدرس القادم >>

Source: https://habr.com/ru/post/ar453700/


All Articles