از طرف یه مرده

بعضی اوقات فکر می کنم چرا خدا (خود آ) عشق افرید؟؟؟

بعضی اوقات اینطوری جواب خودم می دم که اگه می خوای تو هر زمینه بهترین باشی باید عاشق اون زمینه باشی ولی این ها جواب های من نیست این ها جواب های غولهایی مثل

استیون جابز که تو ۳۵ سالگی ازدواج می کنند و جزو ۴-۵ تا میلیاردر اول این کره خاکی می شن...

  من جواب خودم می خوام ولی پیداش نکردم ...............______________  مرد

با عرض سلام

من کار رو بازی شروع کردم به زودی توضیحاتش می زارم رو وبلاگ باید روش کامل فکر کنم

-----

یک چیز مهم دیگه اینه که اگر بخواهید از OpenGL 2.0 استفاده کنید کلا ورژن های بعد از ۱.۱ شما دیگر نمی توانید از ویژوال استیدیو مایکروسافت به راحتی استفاده کنید زیرا  مایکروسافت برای حمایت از DirectX خود دست به خیانتی دیگر زده! و فقط همان نسخه سالهای اولیه بوجود امدن OpenGL را در درون ویژوال استیدیو خود قرار داده پیشنهاد من در این وضعیت استفاده از

++DEVC است که کمپایلر فوق العاده قوی متن باز و مجانی و با حجم بسیار کم است البته این مطلب فقط برای حرفه ای ها ذکر شد! وگرنه فعلا در این بلاگ VC 6 هم واسه خود کد خدایه !

در بلاگ توضیحات خوبی در مورد دانلود و نصب ++DEVC امده است

 همچنین در این قسمت از وبلاگ اقا ساسان هم مطالب خوبی در مورد استفاده از OpenGL 2

وجود دارد از اقا ساسان هم متشکریم

-----

در مورد سوال اقای کوچول

البته شما استاد من هستید .

در مورد SDL می تونم بگم چیزایی شبیه SDL و Glut وOpenAL و... در اصل مکملهای OpenGL هستند در OpenGL تابعی برای مدیریت کیبرد موس joystick کار نزاشتند(البته تا اونجا که من می دونم) شما با ترکیب OpenGL و SDL به را حتی می توانید برنامه ای بنویسید که روی هر سیستم عاملی با موس و کیبرد کار کند و نه مثلا فقط ویندوز با استفاده از MFC یا Win32 API

با استفاده از SDL می توانید با کتابخانه الحاقی SDL_Mixer (بعدا توضیح می دهم) Mp3 player بسازید که روی هر سیستم عاملی از Mac OS گرفته تا BSD کمپایل شود یا با OpenAL .

و GLUT هم که مکمل قدرتمندی برای OpenGL است برای ساخت پنجره و منو بدون استفاده از دستورات و کلاس های خواص سیستم عاملی خواص بر روی هر کدام از انها...

در اصل این ها به کمک OpenGL امده اند تا در برابر ... همچون DirectX فاتح از میدان بیرون اید

می توانید Direct3D را با OpenGL

 Direct Input را با SDL

DirectSound,DirectMusic را با OpenAL

و ... مکملهای قدرتمند دیگر مقایسه کنید

امیدوارم اطلاعات ناقص من کمکی به خوانندگان وبلاگ کند 

 من از شما می خواهم که من را در گفتار های اشتباهم راهنمایی کنید از Syntax گرفته تا چیزای سنگین!...(شرمنده همه شما)

یک وبلاگ خوب در زمینه OpenGL :

یک وبلاگ خوب در زمینه  OpenGL که توسط اقا ساسان مدیریت می شود

   از این به بعد این وبلاگ به عنوان برادر وبلاگ من معرفی می شود

   به امید موفقیت ایران . . .

 

از اقا ساسان هم متشکریم

ساخت یک بازی استراتژی OpenSource

می خوام یک بازی استراتژی متن باز بنویسم این وبلاگم راهنمای خوبی واسه توسعه دهنده اش می شه

ولی فعلا به علت فقدان نظرات شما وبلاگ تعطیل ...

مرجع کلیدها :

http://opengl.8k.com/refer.txt

نظرات خود را در مورد بهبود Weblog بگویید

درس 8 : مدیریت کردن صفحه کلید

 

فایلها استفاده شده :

font

source

درس 8 : مدیریت کردن صفحه کلید

 

شما قبلا با رویداد SDL_QUIT کار کردید در این درس یاد می گیرید که آیا کلیدی فشرده  شده است یا خیر و اگر فشرده شده چه کلیدی فشرده شده است

    //Generate the message surfaces

    up = TTF_RenderText_Solid( font, "Up was pressed.", textColor );

    down = TTF_RenderText_Solid( font, "Down was pressed.", textColor );

    left = TTF_RenderText_Solid( font, "Left was pressed", textColor );

    right = TTF_RenderText_Solid( font, "Right wa pressed", textColor );

 

بعد از اماده کردن همه ملزومات ما 4 سطح را تعریف می کنیم که حاوی 4 پیغام ما به کار بر است

البته یادتون باشد یک برنامه نویس حرفه ای باید همیشه چک کند که این UPو DOWN و... اینها همه درست ایجاد شده باشند با یک if و چک کردن NULL نبودن سطوح ولی اینجا من اینکار را نکردم

;)

 

        //If there's an event to handle

        if( SDL_PollEvent( &event ) )

        {

            //If a key was pressed

            if( event.type == SDL_KEYDOWN )

            {

 

حال اگر بخواهیم بفهمیم کلیدی فشرده شده است از SDL_KEYDOWN استفاده می کنیم

                //Set the proper text

                switch( event.key.keysym.sym )

                {

                    case SDLK_UP: message = up; break;

                    case SDLK_DOWN: message = down; break;

                    case SDLK_LEFT: message = left; break;

                    case SDLK_RIGHT: message = right; break;   

                }

            }

           

            //If the user has Xed out the window

            else if( event.type == SDL_QUIT )

            {

                //Quit the program

                quit = true;

            }

        }

 

حال باید بفهمیم که چه کلیدی فشار داده شده است SDL_PollEvent اطلاعات را از نوع ساختار SDL_KeyboardEvent به نام key درون event قرار می دهیم و درون keyساختار دیگری به نام keysym وجود دارد و درون keysym ساختار دیگری قرار دارد به نام key قرار دارد که در ان یک SDL_Key قرار دارد (فراموش نکنید که event یک union است)

مثال : اگر دکمه بالا را فشار دهیم SDLK_UP را بر می گرداند

        //If a message needs to be displayed

        if( message != NULL )

        {

            //Apply the images to the screen

            apply_surface( 0, 0, background, screen );

            apply_surface( ( SCREEN_WIDTH - message->w ) / 2, ( SCREEN_HEIGHT - message->h ) / 2, message, screen );

           

            //Null the surface pointer

            message = NULL;

        }

              

        //Update the screen

        if( SDL_Flip( screen ) == -1 )

        {

            return 1;   

        }

SDL_FillRect( screen, &screen->clip_rect, SDL_MapRGB( screen->format, 0, 0, 0 ) );

سر اخر پیغام را در وسط  صفحه ست می کند و جمله اخر برای سیاه کردن صفحه است

 

بحث تکمیلی :

 

ساختار SDL_KeyboardEvent مطابق شکل روبرو است

typedef struct{
  Uint8 type;
  Uint8 state;
  SDL_keysym keysym;
} SDL_KeyboardEvent;

type – می تواند SDL_KEYDOWNیا SDL_KEYUP باشد

state- می تواند SDL_PRESSED یا SDL_RELEASED باشد

keysym – ساختار ی که محتوی اطلاعات کلید فشرده شده است

 

در صورتی که تکرار فعال باشد SDL_KEYDOWN باSDL_PRESSED فرقی ندارد

int SDL_EnableKeyRepeat(int delay, int interval);

در صورت صفر کردن delay غیر فعال می شود

 

ساختار SDL_kesym :

typedef struct{
  Uint8 scancode;
  SDLKey sym;
  SDLMod mod;
  Uint16 unicode;
} SDL_keysym;

sym : کلیدی که فشرده شده است

mod : کلید ALT-Control-shift را چک می کند

typedef enum {
  KMOD_NONE  = 0x0000,
  KMOD_LSHIFT= 0x0001,
  KMOD_RSHIFT= 0x0002,
  KMOD_LCTRL = 0x0040,
  KMOD_RCTRL = 0x0080,
  KMOD_LALT  = 0x0100,
  KMOD_RALT  = 0x0200,
  KMOD_LMETA = 0x0400,
  KMOD_RMETA = 0x0800,
  KMOD_NUM   = 0x1000,
  KMOD_CAPS  = 0x2000,
  KMOD_MODE  = 0x4000,
} SDLMod;