بهینه سازی کپی کردن عکس در صفحه در SDL1.2

سلام!

این جلسه می خواهیم عکس مورد نظر خود را سریع تر در صفحه کپی کنیم.

فرض کنید یک پنجره با مشخّصات زیر ساخته اید؛

SDL_Surface *screen = SDL_SetVideoMode( 640, 480, 32, SDL_HWSURFACE );

هر پیکسل از این پنجره حاوی ۳۲ بیت است. ولی تصاویر با فرمت bitmap و بعضی از فرمت های دیگر تنها دارای ۲۴ بیت به ازای هر پیکسل هستند. در صورتی که صفحه ی شما دارای ۳۲ بیت به ازای هر پیکسل (bpp) باشد، هنگام کپی کردن یک عکس bitmap، کتاب خانه ی SDL مجبور می شود که عکس شما را تبدیل کند و همین باعث می شود که برنامه کند شود.

۰ نظر موافقین ۰ مخالفین ۰
روزبه صیادی

به دست آوردن رزولوشن صفحه نمایش با SDL1.2

سلام!

این جلسه می خواهیم ابعاد صفحه نمایش را به دست آورده و متناسب با آن، یک پنجره ایجاد کنیم.

برای این کار باید از تابع SDL_GetVideoInfo استفاده کنیم.

const SDL_VideoInfo *SDL_GetVideoInfo();

این تابع برخی از مشخّصات مربوط به توانایی سیستم را در کارهای گرافیکی برمی گرداند. خروجی این تابع یک اشاره گر از نوع SDL_VideoInfo است.

const SDL_VideoInfo *videoInfo = SDL_GetVideoInfo();

۰ نظر موافقین ۰ مخالفین ۰
روزبه صیادی

کشیدن شکل های مختلف در صفحه با SDL_gfx1.2

سلام!

این جلسه قرار است کشیدن چند شکل را روی صفحه یاد بگیریم.

برای این کار به کتاب خانه ی SDL_gfxPrimitives.h احتیاج دارید.

#include "SDL/SDL_gfxPrimitives.h"

این کتاب خانه شامل توابع مختلفی برای کشیدن شکل های مختلف است. این توابع را به همراه راهنمای استفاده از آن ها می توانید در ادامه مشاهده کنید. خروجی تمامی توابع زیر در صورت موفقیت ۰ و در غیر این صورت -۱ خواهد بود.

ورودی آخر تمامی توابع میزان شفافیت رنگ را مشخّص می کند. در صورتی که این مقدار برابر با ۲۵۵ باشد، رنگ کامل است. هر چه این مقدار کم تر باشد، رنگ های زیری بیشتر معلوم می شوند.

۰ نظر موافقین ۰ مخالفین ۰
روزبه صیادی

پاسخ تمرین سری قبل

سلام!

پاسخ تمرین سری قبل را می توانید در کد زیر مشاهده کنید.

۰ نظر موافقین ۱ مخالفین ۰
روزبه صیادی

Handle کردن event های مربوط به کیبورد با SDL1.2

سلام!

این جلسه می خواهیم event های مربوط به keyboard را مورد بررسی قرار دهیم.

اگر event اتفاق افتاده مربوط به فشردن یک دکمه از کیبورد باشد، آن گاه مقدار event.type برابر با SDL_KEYDOWN خواهد بود. در این صورت در event.key.keysym.sym دکمه ی فشرده شده قرار خواهد گرفت. به عنوان مثال می خواهیم ببینیم که آیا کاربر دکمه ی escape را فشار داده است یا نه؛

if ( event.type == SDL_KEYDOWN )
    if ( event.key.keysym.sym == SDLK_ESC )
        cout << "Escaped!" << endl;

لیست کامل مقادیر ممکن برای event.key.keysym.sym را می توانید در این جا مشاهده کنید.

اگر event ای که اتفاق افتاده است، رها کردن یک دکمه از کیبورد باید، آن گاه مقدار event.type برابر با SDL_KEYUP خواهد بود. اگر این اتّفاق بیافتد، باز هم کلید رها شده در event.key.keysym.sym موجود است. به عنوان مثال به کد زیر توجّه کنید.

۰ نظر موافقین ۰ مخالفین ۰
روزبه صیادی

پاسخ تمرین سری قبل

سلام!

پاسخ تمرین سری قبل را می توانید در کد زیر مشاهده کنید؛

۰ نظر موافقین ۰ مخالفین ۰
روزبه صیادی

Handle کردن event های مربوط به ماوس با SDL1.2

سلام!

جلسه ی پیش با event مربوط به بسته شدن پنجره آشنا شدیم. این جلسه می خواهیم با event های مربوط به ماوس آشنا شویم.

اوّلین event ای که می خواهیم با آن آشنا شویم، event مربوط به فشردن یکی از دکمه های ماوس است. اگر event.type برابر با SDL_MOUSEBUTTONDOWN باشد، یعنی یکی از دکمه های ماوس فشرده شده است. برای این که بفهمید کدام یکی از دکمه ها فشرده شده است، از مقدار موجود در event.button.button استفاده کنید. مثل برنامه ی زیر؛

if ( event.type == SDL_MOUSEBUTTONDOWN ){
    if ( event.button.button == SDL_BUTTON_LEFT )
        cout << "Left Button is Down" << endl;
    if ( event.button.button == SDL_BUTTON_RIGHT )
        cout << "Right Button is Down" << endl;
    if ( event.button.button == SDL_BUTTON_MIDDLE )
        cout << "Middle button is Down" << endl;
}

۱ نظر موافقین ۱ مخالفین ۰
روزبه صیادی