مرحبا بالجميع! لقد عدت مع درس جديد بالنسبة لك! وإذا سئمت فجأة من انتظار درس مني ، يمكنك دائمًا العثور على هذه الدروس باللغة الإنجليزية
هنا .
حسنًا ، لنبدأ الدرس السابع بالعنوان
يتم ترجمة Viewport من اللغة الإنجليزية كمكان عرض ، أو في حالتنا هو مكان تقديم. الجوهر هو هذا: نحن نأخذ ونقصر سطح الرسم ليس على النافذة بأكملها ، ولكن على جزء منه. قد يكون ذلك مفيدًا ، على سبيل المثال ، لرسم صورة مصغرة في لعبة.
وفقا للنظرية ، لدي كل شيء ، ننتقل إلى الممارسة.
#include <SDL2/SDL.h> #include <SDL2/SDL_image.h> #include <iostream> using namespace std; const int SCREEN_SIZE[2] = {640, 480}; SDL_Window *window = NULL; SDL_Renderer *ren = NULL; SDL_Texture *flower = NULL;
بالنسبة للمبتدئين ، كما هو الحال دائما إعلان المتغيرات.
سوف نرسم هذه الزهرة.
الحرف الأول bool init() { if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_EVENTS) != 0) { cout << "Can't init SDL: " << SDL_GetError() << endl; return false; } int flags = IMG_INIT_PNG; if (!(IMG_Init(flags)&flags)) { cout << "Can't init IMG: " << IMG_GetError() << endl; return false; } window = SDL_CreateWindow("VIEWPORT", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_SIZE[0], SCREEN_SIZE[1], SDL_WINDOW_SHOWN); if (window == NULL) { cout << "Can't create window: " << SDL_GetError() <<endl; return false; } ren = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); if (ren == NULL) { cout << "Can't create renderer: " << SDL_GetError() <<endl; return false; } return true; }
حمل bool load() { SDL_Surface *temp_surf = NULL; temp_surf = IMG_Load("flower.png"); if (temp_surf == NULL) { cout << "Can't load image: " << IMG_GetError() << endl; return false; } flower = SDL_CreateTextureFromSurface(ren, temp_surf); if (flower == NULL) { cout << "Can't create texture from surface: " << SDL_GetError() << endl; SDL_FreeSurface(temp_surf); temp_surf = NULL; return false; } return true; }
استقال void quit() { SDL_DestroyWindow(window); window = NULL; SDL_DestroyRenderer(ren); ren = NULL; SDL_DestroyTexture(flower); flower = NULL; SDL_Quit(); IMG_Quit(); }
لن أصف وظائف التهيئة ، وتحميل الصور وإلغاء التهيئة ، حيث إنها متطابقة تقريبًا مع الوظائف السابقة.
والآن بالنسبة للجزء المرح:
int main() { if (!init()) { quit(); return 1; } if (!load()) { quit(); return 1; } SDL_Rect top_vp = {0, 0, SCREEN_SIZE[0], SCREEN_SIZE[1] / 2}; SDL_Rect bottom_vp = {0, SCREEN_SIZE[1] / 2, SCREEN_SIZE[0], SCREEN_SIZE[1] / 2};
قمنا هنا بتوصيل
SDL ، وقمنا بتحميل صورة ، وقمنا بإنشاء مستطيلين أحدهما أسفل الآخر ونشغل عرض النافذة بالكامل. هذه هي
وجهة نظرنا الصورة.
SDL_RenderSetViewport(ren, &top_vp); SDL_RenderCopy(ren, flower, NULL, NULL); SDL_RenderSetViewport(ren, &bottom_vp); SDL_RenderCopy(ren, flower, NULL, NULL);
بعد ذلك ، بدأنا بالفعل في السحب. بادئ ذي بدء ، نحن بحاجة إلى تحديد مكان الرسم. يتم ذلك بواسطة وظيفة
SDL_RenderSetViewport ، والتي تأخذ معلمتين: تقديم ومستطيل نرغب في رسمه. بعد تعيين المنطقة ، ارسم الزهرة لدينا باستخدام طريقة
SDL_RenderCopy المعروفة. بعد ذلك ، كرر الشيء نفسه بالنسبة للمستطيل الثاني.
SDL_RenderPresent(ren); SDL_Delay(2000); quit(); return 0; }
ثم نقوم بتحديث النافذة ، انتظر لمدة ثانيتين وننهي البرنامج.
بعد تجميع هذا البرنامج وتشغيله ، سنرى زهور مسطحة. هذا هو كل ما أردت أن أظهره اليوم.
حسنًا ، هذا درس صغير ، إذا كان لديك أي أسئلة ، فسأكون سعيدًا لشرح ذلك ، لكن لدي كل شيء. وداعا!
<< الدرس السابق