مرحبا بالجميع! قررت إلقاء نظرة على 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; };
حظا سعيدا للجميع!
الدرس القادم
>>