سلام!

جلسه ی پیش با کتاب خانه ی SDL و مقدمات آن آشنا شدیم. حالا می خواهیم اوّلین برنامه ی خود را با کتاب خانه ی SDL بنویسیم. هدف این برنامه ایجاد یک پنجره (window) و نمایش یک عکس بر روی آن است.

اوّل از همه باید کتاب خانه های مورد نیاز را include کنید. در این جلسه فقط نیاز به کتاب خانه ی SDL.h داریم. آن را مانند کد زیر include کنید؛

#include "SDL/SDL.h"

قبل از انجام هر کاری با این کتاب خانه، باید SDL را Initialize کنید. برای این کار از دستور زیر استفاده کنید؛

SDL_Init( SDL_INIT_EVERYTHING );

این تابع ورودی های دیگری هم می پذیرد، امّا این ورودی برای همه ی کار های ممکن کافی است.

در این کتاب خانه یک نوع متغیر جدید به نام SDL_Surface وجود دارد. به مثال زیر دقّت کنید؛

SDL_Surface *screen = SDL_SetVideoMode( WIDTH, HEIGHT, BPP, FLAGS );

خروجی تابع SDL_SetVideoMode یک پنجره است. یعنی اگر مقدار آن را در یک *SDL_Surface بریزیم، پنجره ی ما آن *SDL_Surface خواهد بود. دلیل این که پنجره ی ما یک اشاره گر باید باشد نیز این است که تمامی توابع SDL با اشاره گر کار می کنند.

حالا می خواهیم ورودی های تابع SDL_SetVideoMode را توضیح دهیم. ورودی اوّل طول پنجره و ورودی دوم عرض پنجره است. ورودی سوم مربوط به رنگ های پنجره است و تعداد بیت های آن را مشخّص می کند و می تواند اعدادی مثل ۳۲، ۱۶ و... باشد. ورودی چهارم هم مربوط به خصوصیات پنجره است. مثلا اگر این ورودی SDL_FULLSCREEN باشد، پنجره به صورت Fullscreen در می آید و یا اگر SDL_NOFRAME باشد، پنجره دیگر دارای کادر نخواهد بود. ورودی معمول برای این ورودی، SDL_HWSURFACE است. لیست تمامی مقدار های ممکن را می توانید در این جا مشاهده کنید.

در صورتی که می خواهید از چند تا از این مقدار ها استفاده کنید، بین آن ها عمل گر or بیتی ( | ) را قرار دهید. مثلا پنجره ی ساخته شده در کد زیر هم Fullscreen است و هم Doublebuffered؛

SDL_Surface *screen = SDL_SetVideoMode( WIDTH, HEIGHT, 32, SDL_FULLSCREEN | SDL_DOUBLEBUF );

اگر خروجی این تابع برابر با NULL باشد، یعنی ایجاد پنجره با مشکل مواجه شده است. ارور به وجود آمده را می توانید با کمک تابع SDL_GetError پیدا کنید. 

if ( screen == NULL )
     cout << SDL_GetError() << endl;

در این جلسه با مقدمات ساخت پنجره با SDL آشنا شدید و این برنامه را نوشتید. جلسه بعد این کد را تکمیل خواهیم کرد.

موفق باشید!