Contacts
صفحه اصلی پورتال | صفحه اصلی تالار | ثبت نام | اعضاء | گروه ها | جستجو | پرسش و پاسخ | فروشگاه الکترونیکی | خرید پستی بازی های کامپیوتری





صفحه اول انجمنها -> اصول اولیه در طراحی بازیهای کامپیوتری -> ++C به علاوه SDL میشه یه بازی خوب
 

ارسال يك موضوع جديد   پاسخ به يك موضوع ديدن موضوع قبلي :: ديدن موضوع بعدي
برو به صفحه 1, 2, 3, 4, 5, 6, 7  بعدي

++C به علاوه SDL میشه یه بازی خوب
نويسنده
پيغام
eta
مدیر سایت
مدیر سایت


تاريخ عضويت: 2 شنبه 27 تير 1384
تعداد ارسالها: 2153
محل سكونت: شاهين شهر


شنبه 20 مرداد 1386 - 00:00
پاسخ بصورت نقل قول
بعد از مدتها دو باره دارم یه آموزش تهیه می کنم.
امیدوارم به دردتون بخوره.
ولی برای شروع به یه سری مقدمات نیاز داریم:

از SDL شروع می کنم.
SDL مخفف عبارت Simple Direct media Layer هستش. این کتابخانه متشکل از یک سری ابزارهای اولیه و ابتدایی هستش که کلیه نیازهایی رو که شما برای آغاز ساخت بازی نیاز دارید در اختیارتون می ذاره. اگه در ساخت بازیتون از SDL استفاده کنید این مزیت رو خواهید داشت که بازیتون روی هر سیستم عاملی که کامپایلر ++C داشته باشه اجرا میشه!!!
SDL امکانات اولیه گرافیکی، صوتی و مدیریت رویدادها و ... رو در اختیارتون قرار میده گذشته از این کتابخانه های بسیاری برای توسعه قابلیتهای SDL نوشته شده اند که شما می تونید بنا به نیازتون از اونها نیز بهره ببرید.(یکیشون که من از اون استفاده کردم SDL_GFX نام داره که برخی اماکانات جدید رو به امکانات گرافیک SDL اضافه می کنه.)
برای دسترسی به امکانات بیشتر به خصوص در زمینه سه بعدی SDL با opengl هم سازگاری کامل داره و شما می تونید از اون هم بهره بگیرید.
می تونید برای تحقیقات به سایت SDL مراجعه کنید.
www.libsdl.org
بهتون توصیه می کنم که برای شروع فایل SDLRef.chm رو داونلود کنید تا بتونید مشکلاتتون رو حل کنید.
خوب من یه مهلت کوتاه بهتون می دم تا بتونید با SDL آشنا بشید و با دید بازتری کار رو ادامه بدین. ولی برای استارت کار اجازه بدید یه تیکه آموزش کوچولو رو داشته باشیم.

خوب پاچه ها رو بزنید بالا که باید گل لگد کنیم. Wink

یک برنامه SDL شامل یک سری زیر برنامه هست که برای کار با اونها ابتدا باید اونها اونها رو راه اندازی کنید. برای این کار میتونید از دو فانکشن SDL_Init یا SDL_InitSubSystem استفاده کنید.
SDL_Init علاوه بر راه اندازی زیر سیستم هایی که به عنوان پارامتر می گیره امکانات I/O مدیریت رویداد و threading رو نیز راه اندازی می کنه.

به نمونه کد زیر توجه کنید.
كد:

#include "SDL.h"   /* All SDL App's need this */
#include <stdio.h>

int main() {
   
    printf("Initializing SDL.\n");
   
    /* Initialize defaults, Video and Audio */
    if((SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO)==-1)) {
        printf("Could not initialize SDL: %s.\n", SDL_GetError());
        exit(-1);
    }

    printf("SDL initialized.\n");

    printf("Quiting SDL.\n");
   
    /* Shutdown all subsystems */
    SDL_Quit();
   
    printf("Quiting....\n");

    exit(0);
}


تو پستهای بعدی بعدی نحوه ایجاد یک پروژه vc 2005 برای کار با SDL رو بهتون نشون می رم و به طور جدی وارد کار میشیم.

_________________
تالار اصول ->صفحه ها، مقالات و تاپیکهای مفید

ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل
 

نويسنده
پيغام
eta
مدیر سایت
مدیر سایت


تاريخ عضويت: 2 شنبه 27 تير 1384
تعداد ارسالها: 2153
محل سكونت: شاهين شهر


شنبه 20 مرداد 1386 - 16:48
پاسخ بصورت نقل قول
بابا توجه !!!
این لینک رو یکی از بچه ها پیدا کرده.
برای ساخت پروژه می تونید ازش استفاده کنید.
http://pgdc.purdue.org/sdltutorial/sdl_setup.html

_________________
تالار اصول ->صفحه ها، مقالات و تاپیکهای مفید

ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل
 

نويسنده
پيغام
مصطفي سپهريان
پیر بازی سازی
پیر بازی سازی


تاريخ عضويت: جمعه 24 آذر 1385
تعداد ارسالها: 1147
محل سكونت: تو يه فلش مموري دو گيگ


شنبه 20 مرداد 1386 - 17:06
پاسخ بصورت نقل قول
خوب ما كه منتظريم تا استفاده اي كه گفتي رو ببريم Very Happy Smile
خوبه... ممنون Surprised

_________________
«پشتکار»«پشتکار»«پشتکار»
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل ديدن وب سايت كاربر نام كاربري در پيغامگير Yahoo
 

نويسنده
پيغام
rastegar
متخصص ساخت بازی
متخصص ساخت بازی


تاريخ عضويت: 1 شنبه 7 مرداد 1386
تعداد ارسالها: 310
محل سكونت: مشهد


شنبه 20 مرداد 1386 - 17:18
پاسخ بصورت نقل قول
دستت درد نكنه
البته من كه هنوز به اين حد نرسيدم ولي
مطمئنا يه موقعي بعدا به دردم مي خوره
ممنون

_________________
دانا ترین مردم کسی است که دانش دیگران را به دانش خود بیفزاید. رسول اکرم(ص)
..........................
وب سایت انتقالی و جابه جایی دانشجو
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي
 

نويسنده
پيغام
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);
    }

_________________
تالار اصول ->صفحه ها، مقالات و تاپیکهای مفید

ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل
 

نويسنده
پيغام
مصطفي سپهريان
پیر بازی سازی
پیر بازی سازی


تاريخ عضويت: جمعه 24 آذر 1385
تعداد ارسالها: 1147
محل سكونت: تو يه فلش مموري دو گيگ


شنبه 20 مرداد 1386 - 21:19
پاسخ بصورت نقل قول
Wow...
حالا شد... PDT_002
عالي بود... منتظر دوميشم Smile

_________________
«پشتکار»«پشتکار»«پشتکار»
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل ديدن وب سايت كاربر نام كاربري در پيغامگير Yahoo
 

نويسنده
پيغام
Kochol
متخصص ساخت بازی
متخصص ساخت بازی


تاريخ عضويت: شنبه 1 مرداد 1384
تعداد ارسالها: 298


شنبه 20 مرداد 1386 - 23:13
پاسخ بصورت نقل قول
سلام
خیلی مطلب جالب و خوبی رو شروع کردید.
ادامه بدید.

_________________
Kochol Game Engine

[img]http://barnamenevis.org/forum/image.php?type=sigpic&userid=6875&dateline=1258101798[/img]
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل نام كاربري در پيغامگير Yahoo
 

نويسنده
پيغام
eta
مدیر سایت
مدیر سایت


تاريخ عضويت: 2 شنبه 27 تير 1384
تعداد ارسالها: 2153
محل سكونت: شاهين شهر


3 شنبه 23 مرداد 1386 - 19:57
پاسخ بصورت نقل قول
مرسی بچه ها

برای مصطفی:
اینی که خوندی دومیش بود. سومیش تو راهه ایشالا.
برای کوچول :
اول فارسی اسمت رو برامون بگو. همین کوچول تلفظ میشه یا چیز دیگه؟!
شما خودت استادی اگه مطلبی داری که اضافه کنی یا ایرادی رو تصحیح کنی خوشحال می شم.

_________________
تالار اصول ->صفحه ها، مقالات و تاپیکهای مفید

ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل
 

نويسنده
پيغام
Kochol
متخصص ساخت بازی
متخصص ساخت بازی


تاريخ عضويت: شنبه 1 مرداد 1384
تعداد ارسالها: 298


4 شنبه 24 مرداد 1386 - 10:43
پاسخ بصورت نقل قول
سلام
تلفظش همون کوچول هست که گفتی.
اتفاقا من خودم هم قصد دارم که اموزش ها تو بخونم و احتمالا برای اینکه انجینم تو لینوکس هم کار کنه می خوام از sdl استفاده کنم ولی قبلش می خوام ببینم محدودیت خاصی ایجاد نمی کنه.

_________________
Kochol Game Engine

[img]http://barnamenevis.org/forum/image.php?type=sigpic&userid=6875&dateline=1258101798[/img]
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل نام كاربري در پيغامگير Yahoo
 

نويسنده
پيغام
eta
مدیر سایت
مدیر سایت


تاريخ عضويت: 2 شنبه 27 تير 1384
تعداد ارسالها: 2153
محل سكونت: شاهين شهر


5 شنبه 25 مرداد 1386 - 00:16
پاسخ بصورت نقل قول
والا من و رفقام این اواخر یکی دو تا مشکل لعض جاها تو لینوکس دیده بودیم که الته یکیش هم مربوط به SDL_GFX بود که خوشبختانه تو آخرین ورژن SDL اون مشکلات حل شده بودن. فعلا لیست باگمون خالیه!!!

البته ما ازش استفاده دو لعدی کردیم و سراغ opengl نرفتیم برای همین شاید بهتر باشه خودت هم تحقیقات در باره اش رو شروع کنی

_________________
تالار اصول ->صفحه ها، مقالات و تاپیکهای مفید

ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل
 

نمايش نامه هاي ارسال شده قبلي:   
ارسال يك موضوع جديد   پاسخ به يك موضوع    صفحه 1 از 7 تمام ساعات و تاريخها بر حسب 3.5+ ساعت گرينويچ مي باشد
برو به صفحه 1, 2, 3, 4, 5, 6, 7  بعدي


 
پرش به:  


شما نمي توانيد در اين انجمن نامه ارسال كنيد.
شما نمي توانيد به موضوعات اين انجمن پاسخ دهيد
شما نمي توانيد نامه هاي ارسالي خود را در اين انجمن ويرايش كنيد
شما نمي توانيد نامه هاي ارسالي خود را در اين انجمن حذف كنيد
شما نمي توانيد در نظر سنجي هاي اين انجمن شركت كنيد


unity3d

بازگردانی به فارسی : علی کسایی @ توسعه مجازی کادوس 2004-2011
Powered by phpBB © 2001, 2011 phpBB Group
| Home | عضويت | ليست اعضا | گروه هاي كاربران | جستجو | راهنماي اين انجمن | Log In |