مرحبا بالجميع! هذا هو الدرس الثاني لبرنامج SDL 2. ما زلت أحصل على معلومات
من هنا .
اهلا بكم في الدرس
الرئيسي ليس المطاط
في الدرس الأخير ، قمت بترتيب كل شيء جيدًا في الوظيفة
Main () ، لكن هذا ليس جيدًا بالنسبة للبرامج الكبيرة. هذا هو السبب في أن الفرصة لكتابة وظائف ظهرت. الآن سوف نستخدمها.
سنبدأ كتابة التعليمات البرمجية عن طريق توصيل SDL وإعلان العديد من المتغيرات العامة.
#include <SDL2/SDL.h> const int SCREEN_WIDTH = 640; const int SCREEN_HEIGHT = 480; SDL_Window *win = NULL; SDL_Surface *scr = NULL; SDL_Surface *smile = NULL;
هنا ، خارج الوظيفة
الرئيسية () ، أعلنا كائنات النافذة (
فوز ) ، وأسطح الشاشة (
scr ) ، وصورة هذه
التعبيرات (
ابتسامة ).
دعنا نكتب وظيفة لتهيئة SDL ، وإنشاء نافذة وسطح للرسم. يبدو مثل هذا:
أولي () int init() { if (SDL_Init(SDL_INIT_VIDEO) != 0) { return 1; } win = SDL_CreateWindow("Main ", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN); if (win == NULL) { return 1; } scr = SDL_GetWindowSurface(win); return 0; }
يجب أن يكون هذا الرمز مألوفًا لك من الدرس السابق. هنا قمنا بتهيئة نظام الفيديو ، وقمنا بإنشاء نافذة تحمل الاسم "Main is not rubber" ، مع إحداثيات غير محددة وبأبعاد محددة مسبقًا ، وكذلك حصلنا على سطح النافذة ،
وحفظناها في
scr . على خطأ ، سوف ترجع هذه الوظيفة 1 ، وإلا 0.
يمكنك الآن كتابة وظيفة لتنزيل ملفات الوسائط الضرورية. ومن هنا:
تحميل () int load() { smile = SDL_LoadBMP("smile.bmp"); if (smile == NULL) { return 1; } return 0; }
هذه الوظيفة بسيطة للغاية. نقوم بتحميل صورة .bmp باستخدام وظيفة
SDL_LoadBMP . تأخذ هذه الوظيفة المسار إلى ملف الصورة (ممتلئ أو نسبي) ، وتقوم بإرجاع كائن من فئة
SDL_Surface . يجب عليك أيضًا التحقق من صحة التنفيذ: إذا كانت هناك مشكلات في التنزيل (لم يتم العثور على الملف ، الملف المعطوب) ،
فستُرجع الدالة
SDL_LoadBMP NULL .
نكتب أيضًا برنامجًا لإكمال الطلب.
استقال () void quit() { SDL_FreeSurface(smile); smile = NULL; SDL_DestroyWindow(win); SDL_Quit(); }
ظهرت
هنا وظيفة
SDL_FreeSurface جديدة ، والتي تقوم ببساطة بتنظيف السطح. بعد أن قمنا بتعيين
الابتسامة المتغيرة إلى
NULL . تمت مناقشة جميع الوظائف الأخرى في الدرس السابق.
هذا هو المكان الذي انتهت فيه كتابة الوظائف ويمكننا المتابعة إلى
Main () .
الرئيسية () int main (int argc, char ** args) { if (init() == 1) { return 1; } if (load() == 1) { return 1; } SDL_BlitSurface(smile, NULL, scr, NULL); SDL_UpdateWindowSurface(win); SDL_Delay(2000); quit(); return 0; };
هنا نسمي أولاً الدالة
init () ، المكتوبة مسبقًا ، ثم الدالة
load () ، والتي كتبناها أيضًا من قبل. بعد ذلك ، عرض
الابتسامة في
scr ، باستخدام وظيفة
SDL_BlitSurface . تأخذ هذه الوظيفة سطحًا للرسم ، مستطيلًا يجب قصه من هذا السطح (هذا ضروري للرسوم المتحركة) ، إذا لم يكن هناك حاجة إلى قطع ، يتم إرسال
NULL ، السطح الذي يتم رسم المستطيل عليه ، ويتم استخدام إحداثياته للرسم. إذا كانت الإحداثيات صفراً ، فإننا نمرر
NULL .
حان الوقت للحديث عن الإحداثيات. يستخدم SDL نظام إحداثيات مختلف ، وليس النظام الذي اعتاد عليه الجميع. هنا النقطة مع الإحداثيات (0 ، 0) في الزاوية اليسرى العليا. من المهم مراعاة ذلك عند العرض لتجنب المواقف غير السارة.
حسنًا ، لقد كان ذلك ممتعًا. بعد ذلك ، نقوم بتحديث النافذة بوظيفة مألوفة بالفعل ، وتجميد البرنامج لمدة ثانيتين ، واستدعاء الدالة
quit () التي كتبناها ، وإنهاء البرنامج. في الإخراج ، لدينا برنامج يعرض ابتسامة باردة لمدة ثانيتين. يشبه الكود بأكمله:
#include <SDL2/SDL.h> const int SCREEN_WIDTH = 640; const int SCREEN_HEIGHT = 480; SDL_Window *win = NULL; SDL_Surface *scr = NULL; SDL_Surface *smile = NULL; int init() { if (SDL_Init(SDL_INIT_VIDEO) != 0) { return 1; } win = SDL_CreateWindow("Main ", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN); if (win == NULL) { return 1; } scr = SDL_GetWindowSurface(win); return 0; } int load() { smile = SDL_LoadBMP("smile.bmp"); if (smile == NULL) { return 1; } return 0; } void quit() { SDL_FreeSurface(smile); SDL_DestroyWindow(win); SDL_Quit(); } int main (int argc, char ** args) { if (init() == 1) { return 1; } if (load() == 1) { return 1; } SDL_BlitSurface(smile, NULL, scr, NULL); SDL_UpdateWindowSurface(win); SDL_Delay(2000); quit(); return 0; };
آمل أن كل شيء كان واضحا. حظا سعيدا للجميع!
<< الدرس السابق || الدرس القادم
>>