|
++C به علاوه SDL میشه یه بازی خوب
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
نويسنده |
پيغام |
eta مدیر سایت
تاريخ عضويت: 2 شنبه 27 تير 1384 تعداد ارسالها: 2153 محل سكونت: شاهين شهر
شنبه 20 مرداد 1386 - 20:04 |
|
|
خیلی خوب ادامه می دیم.اولین امکانی که شما برای ساخت بازی نیاز خواهید داشت در اختیار گرفت راهی برای نمایش تصاویر روی مانیتوره. تو SDL این امکان از طربق فانکشن SDL_SetVideoMode در اختیار شما قرا میگیره
قبل از شرح احوال SetVideoMode بذارید اول در باره مهمترین ساختار SDL براتون بگم.
SDL_Surface :
كد: |
typedef struct SDL_Surface {
Uint32 flags; /* Read-only */
SDL_PixelFormat *format; /* Read-only */
int w, h; /* Read-only */
Uint16 pitch; /* Read-only */
void *pixels; /* Read-write */
/* clipping information */
SDL_Rect clip_rect; /* Read-only */
/* Reference count -- used when freeing surface */
int refcount; /* Read-mostly */
/* This structure also contains private fields not shown here */
} SDL_Surface;
Structure Data
flags Surface flags
format Pixel format
w, h Width and height of the surface
pitch Length of a surface scanline in bytes
pixels Pointer to the actual pixel data
clip_rect surface clip rectangle
|
SDL_Surface یک صفحه در اختیار شما قرار میده که محتوای یک تصویر خواهد بود. شما می تونید تصاویر رو از داخل فایلها به یک surface لود کنید.( از طریق SDL_LoadBMP)
گذشته از اینها تابع SDL_SetVideoMode هم برا تون یک Surface بر می گردونه که همون Surface ای هستش که شما تصاویر رو برای نمایش داده شدن روی Screen روی اون می کشید.
فیلدهای SDL_Surface عبارتند از :
1.فیلد flags : پرچمهایی هستند که به منظورهای بسیار مختلفی مورد استفاده قرا می گیرند. به جدول زیر توجه کنید :
كد: |
SDL_SWSURFACE : Surface is stored in system memory
SDL_HWSURFACE : Surface is stored in video memory
SDL_ASYNCBLIT : Surface uses asynchronous blits if possible
SDL_ANYFORMAT : Allows any pixel-format (Display surface)
SDL_HWPALETTE : Surface has exclusive palette
SDL_DOUBLEBUF : Surface is double buffered (Display surface)
SDL_FULLSCREEN : Surface is full screen (Display Surface)
SDL_OPENGL : Surface has an OpenGL context (Display Surface)
SDL_OPENGLBLIT : Surface supports OpenGL blitting (Display Surface)
SDL_RESIZABLE : Surface is resizable (Display Surface)
SDL_HWACCEL : Surface blit uses hardware acceleration
SDL_SRCCOLORKEY : Surface use colorkey blitting
SDL_RLEACCEL : Colorkey blitting is accelerated with RLE
SDL_SRCALPHA : Surface blit uses alpha blending
SDL_PREALLOC : Surface uses preallocated memory
|
2.فیلد format : نوعش یه ساختار دیگه است که حاوی اطلاعات مربوط به فرمت داده های موجود در Surface هستش.
3.فیلد w, h : تابلوه دیگه width , height
4.فیلد pitch : طول اسکن لاین surface به بایت.
5.فیلد pixels : یک پوینتر به مقادیر ذخیره شده در Surface
6.فیلد clip_rect : یه فیلد از نوع SDL_rect که مشخصه توش چی هست دیگه.
كد: |
typedef struct{
Sint16 x, y;
Uint16 w, h;
} SDL_Rect;
|
خیلی خوب بر گردیم به SDL_SetVideoMode .
كد: |
SDL_Surface *SDL_SetVideoMode(int width, int height, int bpp, Uint32 flags);
|
پارامتر هایی که SDL_SetVideoMode میگیره عبارتند از :
1و 2. فیلدهای width , height
3.فیلد bpp : که حاوی مشخصه تعداد بیت به ازای هر پیکسل هستش.(color depth)
4.فیلد flags : همون پرچمهایی که تو SDL_Surface معرفی شون کردیم. برای مشخص کردن چند تا خصیصه با هم می تونید از مقدار or شده اونها استفاده کنید.( مثال : SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_FULLSCREEN که میگه این Surface از حافضه کارت گرافیکی استفاده می کنه، برای چاپ کردن روش از ویزگی دو بافره استفاده میشه و full screen هم هست.)
پس تا حالا ما با استفاده از SDL می تونیم یه صفحه نمایش داشته باشیم که می تونه full screen هم باشه و ویژگیهایی مثل transparency ، دو بافره بودن و ... رو داشته باشه.
همه چیزی که تا حالا می دونیم:
كد: |
SDL_Surface *screen;
/* Initialize the SDL library */
if( SDL_Init(SDL_INIT_VIDEO) < 0 ) {
fprintf(stderr,
"Couldn't initialize SDL: %s\n", SDL_GetError());
exit(1);
}
/* Clean up on exit */
atexit(SDL_Quit);
/*
* Initialize the display in a 640x480 8-bit palettized mode,
* requesting a software surface
*/
screen = SDL_SetVideoMode(640, 480, 8, SDL_SWSURFACE);
if ( screen == NULL ) {
fprintf(stderr, "Couldn't set 640x480x8 video mode: %s\n",
SDL_GetError());
exit(1);
}
|
|
_________________ تالار اصول ->صفحه ها، مقالات و تاپیکهای مفید
|
|
بازگشت به بالا |
|
|
|
|
|
|
|
|
صفحه 1 از 7 |
تمام ساعات و تاريخها بر حسب 3.5+ ساعت گرينويچ مي باشد برو به صفحه 1, 2, 3, 4, 5, 6, 7 بعدي
|
|
شما نمي توانيد در اين انجمن نامه ارسال كنيد. شما نمي توانيد به موضوعات اين انجمن پاسخ دهيد شما نمي توانيد نامه هاي ارسالي خود را در اين انجمن ويرايش كنيد شما نمي توانيد نامه هاي ارسالي خود را در اين انجمن حذف كنيد شما نمي توانيد در نظر سنجي هاي اين انجمن شركت كنيد
|
|
|