تبلیغات :
آکوستیک ، فوم شانه تخم مرغی، صداگیر ماینر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




صفحه 3 از 5 اولاول 12345 آخرآخر
نمايش نتايج 21 به 30 از 46

نام تاپيک: اموزش ساخت بازی به وسیله MonoGame

  1. #21
    کاربر فعال انجمن توسعه و ساخت بازی lord arthas's Avatar
    تاريخ عضويت
    Apr 2010
    محل سكونت
    مشهد
    پست ها
    1,065

  2. #22
    آخر فروم باز
    تاريخ عضويت
    Dec 2008
    محل سكونت
    مازندران
    پست ها
    1,290

    پيش فرض

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

  3. این کاربر از silsin بخاطر این مطلب مفید تشکر کرده است


  4. #23
    آخر فروم باز
    تاريخ عضويت
    Dec 2008
    محل سكونت
    مازندران
    پست ها
    1,290

    پيش فرض

    قسمت 10 :
    محتوا : تمرین 2




    در این بخش فرا خواهیم گرفت که چگونه می توانیم تکسچر اطلس ها را در سکانس رسم کرده و از آن ها استفاده کنیم .




    شروع :


    ابتدا پروژه جدیدی را ایجاد کنید .
    ما در این مثال می خواهیم ساختار کار با تکسچر ها را یا به عبارتی می توان گفت ساختار Texture Navigator را از ابتدا پیاده سازی کنیم .
    برای این کار ما باید کلاس مربوط به انجام این کار را در پروژه خودمان به وجود بیاوریم .
    برای انجام این کار در محیط ویژوال استدیو سمت چپ که مکان Sulotion شما قرار دارد بر روی فایل پروژه خود راست کلیک کرده و از قسمت Add گزینه Class را انتخاب کرده نام کلاس را برابر با AnimatedSprite قرار داده و گزینه Add را زده تا کلاس ایجاد شود.
    از انجایی که کلاس فوق یک کلاس خالی است و فعلا هیچ دسترسی به منابع MonoGame ندارد باید هدر های ان را اضافه کنیم .
    برای انجام این کار دو هدر زیر را اضافه کنید :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید



    اکنون باید چند متغییر به کلاس برنامه خود اضافه کنیم


    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    متغییر فوق وظیفه نگه داری تکسچر ما را به عهده دارد .
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    این دو متغییر جهت نگه داری مقادیر سطر و ستون محل واقع شدن هر تکسچر به کار می رود
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    اولین متغییر جهت مشخص کردن فریمی که در حال حاظر در آن قرار داریم
    و دومین متغییر نیز برای نگه داری تعداد فریم های نهایی می باشد




    به دلیل اینکه ما میخواهیم از این کلاس به صورت یک نمونه در کلاس اصلی خودمان استفاده کنیم پس باید متد مولد فرم را نیز به ان اضافه کنیم تا بتوانیم از کلاس های دیگر به این کلاس دسترسی داشته باشیم . توجه داشته باشید که نوع متد را Public تعریف کرده تا دسترسی بدون مشکل باشد
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

    توجه داشته باشید که متد مولد این کلاس باید سه مقدار :
    تکسچر
    سطر
    و ستون را در خود داشته باشد برای همین آن ها را به مقادیر متد اضافه می کنیم


    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

    و در ادامه شروع می کنیم به مقادیر دادن
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    سپس مقدار اولیه فریم جاری را برابر با 0 قرار داده
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    همچنین برای به دست اوردن مقدار نهایی یعنی مقدار کل نیز باید سطر را ضرب در ستون کنیم
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    اکنون کار متد مول تمام شده و باید متد دیگری را ایجاد کنیم
    در اینجا متد Update() را برای این کلاس ایجاد کنید .
    توجه کنید که دسترسی را برابر با Public قرار داده تا بتوان هنگام استفاد از مقادیر آن به مشکلی بر نخورد .
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    در اینجا وظیفه این متد این است که فریم جاری ما را به فریم بعدی ببرد برای همین باید مقدار شمارنده متغییر فریم جاری را در این متد +1 کنیم
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

    همچنین شریط نیز تعیین کنیم که هنگامی که فریم جاری برابر با تعداد کل فریم های موجود شد و اسپرایت انیمیشنی یک بار خوانده شد مقدار فریم جاری دوباره برابر با 0 شود
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید



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


    هدف در این متد این است که ما بتوانیم تصاویر مربوطه را در یک قالب مشخص نمایش دهیم .


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


    همانطور که بیان شد هدف نمایش یک تصویر از مجموعه اطلس و سپس اجرای تصاویر دیگر مجموعه به دنبال آن است تا بتوان نمایشی از یک مجموعه انیمیشنی در تصویر فوق داشت. از انجایی که ما در کار با این فریم ورک فاقد هرگونه ادیتور جهت دسترسی به هر سطر و یا ستون هستیم باید خودمان این دسترسی را ایجاد کنیم .
    جهت انجام این کار باید کمی بازی و ریاضی ساده ای انجام دهیم .
    همانطور که تصویر فوق را مشاهده کرده اید مدل اطلس ما یک تصویر با اندازه 256 در 256 می باشد.

    چون در این حالت هر کدام از اسپرایت های مجموعه اطلس تشکیل یک مربع را می دهند برای دسترسی به آن ها ما هم باید مجموعه اسپرایت اطلس خودمان را به مربع های کوچک تقسیم کنیم به این صورت که برای به دست اوردن عرض باید عرض تصویر موجود را در تعداد ستون تقسیم کنیم
    همانطور که در تصویر هم می توان مشاهده کرد عرض تصویر ما 256 بوده و ستون 4 با تقسیم این دو بر هم مقدار عرض تصویر که برابر با 64 است به دست خواهد امد.
    برای به دست اوردن طول تصویر نیز همین مراحل را تکرار می کنیم با این تفاوت که اینبار طول تصویر را تقسیم بر تعداد سطر می کنیم .
    که اینبار هم می توانید مشاهده کنید عدد فوق برابر با 64 خواهد بود . اگر تصویر را هم با دقت مشاهده کنید می توانید متوجه شوید که این مختصات در برگیرنده یکی از آن اسپرایت ها می باشد با این کار ما توانستیم طول و عرض موقعیت هر کدام از اسپرایت ها را به دست بیاوریم .


    همانطور که گفته شد در این حالت و در این کلاس ما ساختار به اصطلاح sprite reader را به وجود میاوریم بنابراین باید علاوه بر به دست اودن مقادیر طول و عرض باید مقادیر مربوط به سطر و ستون فریم جاری را نیز به دست بیاوریم .
    ابتدا برای به دست اوردن سطر ما باید فریم جاری را تقسیم بر تعداد کل ستون کنیم
    و برای به دست اوردن ستون ما باید همان فریم جاری را اینبار تقسیم باقیمانده بر تعداد کل ستون ها بکنیم .
    با استفاده از این راه مقدار سطر و ستون در ناحیه مورد نظر به دست می اید .


    در مرحله بعد ما دو مستعطیل نیاز داریم . که اولی برای قرار گرفتن کل تکسچر اطلس بر روی آن و دومی جهت اعمال محاسبات بر روی ان است .


    و در انتها اعمال تابع Draw در این متد و نسبت دادن مقادیر فوق به آن


    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

    * در صورت نامفهموم بودن کد نگران باشید در بخش های اینده مثال های متعددی از این توع را بررسی خواهیم کرد .

  5. 2 کاربر از silsin بخاطر این مطلب مفید تشکر کرده اند


  6. #24
    آخر فروم باز
    تاريخ عضويت
    Dec 2008
    محل سكونت
    مازندران
    پست ها
    1,290

    پيش فرض

    قسمت 10 :
    بخش اخر
    استفاده از متد :
    در دو دقسمت قبل با مفهمون تکسچر اطلس اشنا شده و توانستیم ساختار اجرایی آن را به وجود بیاوریم . در اینجا می خواهیم آن را استفاده کنیم .


    جهت انجام این کار ابتدا تکسچر اطلس مورد نظر خود را در متد LoadContent بارگزاری می کنیم .
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

    سپس یک متغییر از نوع کلاسی که در بخش قبل ساخته ایم ایجاد می کنیم
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    و ان را نمونه سازی می کنیم
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    مقدار Texture بیان گر متغییر تکسچری است که ما در متد LoadContent ان را بارگزاری کرده ایم
    و دو مقدار 4 نیز نمایش دهنده سطر و ستون تکسچر اطلس ما می باشد .


    اگر فراموش نکرده باشید ما در متد Update در کلاس قبلی خود ساختار اجرای فریم های اسپرایت اطلس خود را ایجاد کرده بودیم
    با اشاره به همان متد می توانیم فریم های اسپرایت اطلس خودمان را اجرا کنیم .
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    برای اجرا کد فوق را در متد Update کلاس اصلی بازی خود قرار دهید
    و در انتها با استفاده از دستور Draw تکسچر را رسم می کنیم .
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

    خروجی :



    پایان قسمت 10

  7. 2 کاربر از silsin بخاطر این مطلب مفید تشکر کرده اند


  8. #25
    آخر فروم باز
    تاريخ عضويت
    Dec 2008
    محل سكونت
    مازندران
    پست ها
    1,290

    پيش فرض

    عنوان : چرخش
    یه مثال جالب توی سایت منبعی که دارم برای اموزش ازش استفاده می کنم دیدم که بهتر دونستم بیام اینجا بگم
    خب هدف اینه که توی این جا یه تصویر رو بگیریم و بچرخونیم دور خودش


    لینک دانلود :
    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
    خب کنتنت رو وارد نرم افزار می کنیم طبق روشی که توی قسمت های قبلی یاد گرفتیم
    یک متغییر از نوع texture2d ایجاد کرده تا تکسچرمون رو بتونیم در اون قرار داده و استفاده کنیم


    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

    خب تکسچر رو مقدار دهی می کنیم و خورشید رو وارد می کنیم
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

    برای شروع اولین کاری که می کنیم اینه که تکسچر رو روی صفحه رسم کنیم .


    اولین کار اینه که مثل قبل تکسچر رو رسم کنیم


    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

    خب اینجا از یه مستطیل استفاده کردیم تا بتونیم هم موقعیت و هم اندازه رو هم با هم داشته باشیم
    یک بار اجرا کنید تا بتونید اولین خروجی رو ببینیم :





    خب در اینجا باید یه مقدار رو تعریف کنیم تا با به روز رسانی مقدار داخلی خودش مقادیر مورد استفاده ما رو بهمون بده
    برای همین یه متغییر float توی تابع update تعریف میک نیم تا به روز بشه
    float Angle +=0.01f
    خب الان این توی هر تیک مقدارش اضافه میشه


    در ادامه توی متغییر Draw باید یک سری مقادیر رو اضافه کنیم
    اول مقدار Location مربوط به تصویر شما
    یه متغییر از نوع برداری دو بعدی
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    در مرحله دوم باید متغییری رو تعریف کنیم که مکان فعلی رو توی خودش نگه میداره
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    سپس و در ادامه باید متغییر مربوط به بک گراندی که تصویر روش قرار می گیره رو تعریف کنیم
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

    خب حالا Draw رو اینجوری باید تغییر بدیم
    مقادیر :
    به ترتیب

    -- نام تصویر
    --- Location (مختصاتی که قرار توی صفحه قرار بگیره)
    --- همون بگ گراندی که گفته بودم بالا
    --- رنگ
    -- مقدار چرخش (ما چون می خوایم اون رو بچرخونیم یه متغییر از نوع شناور تعریف کردیم که دائم اضافه میشه پس از اینجا می تونه تصویر رو بچرخونه)
    -- مکان اولیه
    -- اندازه
    -- چینش تصویر
    -- عمق


    خب حالا کد رو اینجوری می نویسیم
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

    خب اجرا کرده و نتیجه رو می بینیم .
    می تونین مشاهده کنین که یک خورشید قول اسایی داره وسط صفحه می گرده . خب ولی حالا می خوایم یه کار دیگه کنیم تااین خورشید از وسط شروع کنه به چرخیدن
    برای این کار باید متغییر مکان فعلی رو اینجوری تغییر بدیم
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    حالا وقتی که اجرا کنیم می بینیم که از وسط در حال چرخشه
    ولی یک مشکل وجود داره و اونم اندازه این تصویره . در اینجا کمی کوچیکتر می کنیم
    برای این کار می تونید متغییر scale اندازه تصویری رو که توی متد Draw استفاده کردیم رو کوچیکتر کنیم
    اگه باز هم مشکلی وجود داره مقادیر و بازه ها رو تغییر بدین تا درست بشه .
    برای اخر کار هم برای تنوع رنگ پیش زمینه رو هم تغییر می دیم . برای اینکار باید صفحه یک بار با اون رنگ پاک بشه . دسترسی به این متغییر توی متد Draw قرار دارده
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    ما رنگ رو سفید کردیم تا قشنگ تر بشه )
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

    خروجی :

  9. 2 کاربر از silsin بخاطر این مطلب مفید تشکر کرده اند


  10. #26
    آخر فروم باز
    تاريخ عضويت
    Dec 2008
    محل سكونت
    مازندران
    پست ها
    1,290

    پيش فرض

    خب با این تمرین مبحث مربوط به کار با اسپرایت های دو بعدی تموم میشه و میریم سراغ ساخت یه پروژه تمرینی . البته قبل از اون یه سری قسمت ها هم باید در مورد input بیاد که از اونطرف واسه سه بعدی عقب نیفتیم


    تمرین : بازی با رنگ ها
    هدف از این تمرین اینه که بیایم سه سری رنگ رو با یه انیمیشن جالب با هم دیگه ترکیب کنیم
    رنگ هایی که ما توی این تمرین از اون استفاده می کنیم شامل :


    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]


    مثل قبل اونها رو وارد پکیج بازی بکنید.
    ما برای این رنگ ها از سه متغییر Red . Blue .Green استفاده خواهیم کرد . پس این سه متغییر رو تعریف می کنیم
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

    سپس سه تکسچر مورد نظر رو از طریق متد LoadContent وارد می کنیم
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

    پس از این کار برای شروع اولین تکسچر رو مثل قبل بر روی سکانس رسم می کنیم


    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید




    اولین کاری که ما می خوایم انجام بدیم به حرکت در اوردن این تصویره که نمونه اون رو توی قسمت قبلی باهم دیدیم .
    برای این کار باید خواص Destanation ای که زمان رسم در اختیار می گیریم رو تغییر بدیم . این مقدار همون مقدار Location توی مثال قبلیه .
    پس برای این کار باید یک متغییر جدید تعریف کنیم .
    از اونجایی که این مقدار باید یک ورودی از نوع برداری داشته باشه یک متغییر برداری تعریف می کنیم
    و کد رو اینجوری تغییر می دیم :


    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


    از اونجایی که هدف متحرک بودنه پس طبیعتا باید یک اهرم فشار دینامیکی هم برای انجام لحظه ای این کار وجود داشته باشه . برای اینکار ما یک مقدار را به عنوان مقدار جمع کننده ای که با هر تیک انجین اضافه میشود را باید تعریف کنیم .
    برای این کار یک متغییر از نوع float در قسمت Update تعریف کنید
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

    و مقدار اون رو برابر با 0.01f قرار بدین
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    با این کار تا زمانی بازی متوقف نشه متغییر سرعت یک صدم یک صدم اضافه میشه
    اینبار به متد Draw بر می گردیم
    اگر توجه کرده باشید ما در ابتدای هر رسم خود از یک متد شروع و پایان استفاده می کنیم . در اصل این دو متد ساختار از زمان شروع شدن رسم تا پایان آن را در خود نگه می دارند پس قاعدتا می توانند نوع و چگونگی رسم را نیز در خود داشته باشند . اگر محتویات SpriteBach.Begin را مشاهده کنید می توانید ببینید که دو مقدار که یکی جهت نگه داری نوع چینش و دیگری برای نگه داری نوع تعویض به کار می رود .
    قبل از ادامه کار کد زیر را به این قسمت اضافه کنید تا تاثیر استفاده از محتویات این قسمت ها را مشاهده کنید




    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید






    به نظر میرسه که اندازه ای این تصویر کمی بزرگه که باید کوچیک تر بشه برای این کار کد رو به این صورت تغییر میدیم


    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

    کمی بهتر شد . حالا باید بر روی حرکت دادن این تصویر تمرکز کنیم . برای این کار تنها راهی که میشه ازش استفاده کرد حرکت به صورت دایره ایه که بخوایم تصویر ریاضی هم داشته باشیم اون رو می تونیم با ترکیب محور ها با متغییرهای سینویسی و کسینوسی رسم کنیم . برای این کار کد رو به این صورت تغییر میدیم


    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

    همونطور که مشاهده می کنید ما محور x رو برابر با سینوس بر اساس سرعت قرار دادیم و اون رو ضرب در 100 کردیم و محور y رو هم برابر با کسینوس قرار داده و اون رو هم ضرب در 100 کردیم .


    یک بار دیگه اجرا خواهیم گرفت تا خروجی رو با هم ببینیم :


    اینطور که به نظر میاد مختصات کمی بهم بخوره . کد بخش رسم رو به این صورت تغییر میدیم تا بتونیم اون رو درست کنیم







    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    خب دایر ه اول با موفقیت رسم شد سعی کنید مقادیر رو تغییر بدین تا بتونین دایره رو به وسط سکانس منتقل کنید
    خب بعد از این کار باید دایره دوم رو رسم کنیم .
    هدف در این جا اینه که این دایره به دور دایره قبلی که رسم شده رسم بشه.
    طبق معمول پس از فراخونی دایره دوم باید اون رو در سکانس رسم کنیم .
    سپس برای شروع تمام مقادیر دایره جدید رو مثل دایره قبلی قرار میدیم .
    اجرا کرده تا نتیجه رو مشاهده کنید


    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


    همونطور که میبینید دو رنگ با یکدیگر ترکیب شده اند که این موضوع نشان دهنده کاربرد دو مقدار متد Begin در این قسمت می باشد
    ما با استفاده از همان متغییر برداری RedMove می خواهیم نحوه حرکت این تصویر را نیز به وجود بیاوریم پس مانند کد زیر عمل کنید


    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

    در اینجا ما فقط مختصات و همچنین اندازه را تغییر داده ایم
    یک بار دیگر خروجی را مشاهده می کنیم

    همونطور که مشاهده می کنید یک تصویر جالب به وجود امده
    خب با تصویر سوم هم هر کاری دلتون می خواد بکنین )
    طی این تمرین ما تونستم یاد بگیریم که چه طوری تصاویر رو با شیوه های مختلفی با هم ترکیب - تعویض کرد . توجه کنید که می تونید از این قابلیت بسیار مفید در هر جایی از بازی برای زیبا تر شدن خروجی نهایی استفاده کنید
    Last edited by silsin; 21-05-2013 at 21:57.

  11. 2 کاربر از silsin بخاطر این مطلب مفید تشکر کرده اند


  12. #27
    کاربر فعال انجمن توسعه و ساخت بازی parvizamd's Avatar
    تاريخ عضويت
    Nov 2009
    محل سكونت
    بوشهر
    پست ها
    3,115

    پيش فرض

    حسن جان خیلی جالبه . این ابزار رایگانه یا نه؟یعنی تحریم نیستیم یا ؟

    ممنون

  13. #28
    آخر فروم باز
    تاريخ عضويت
    Dec 2008
    محل سكونت
    مازندران
    پست ها
    1,290

    پيش فرض

    MonoGame به خودی خود رایگانه رایگانه و اوپن سورس . بیشترین دلیلی که ملت میرن سراغش اینه که علاوه بر مولتی پلتفرم بودن خروجی هاشه و همچنین قابلیت کار کردن با دایرکت ایکس 11

  14. #29
    کاربر فعال انجمن توسعه و ساخت بازی lord arthas's Avatar
    تاريخ عضويت
    Apr 2010
    محل سكونت
    مشهد
    پست ها
    1,065

    پيش فرض

    باشه داداش چرا ناراحت میشی حالا

  15. #30
    آخر فروم باز
    تاريخ عضويت
    Dec 2008
    محل سكونت
    مازندران
    پست ها
    1,290

    پيش فرض

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

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


    ورودی های صفحه کلید :
    میشه گفت انجام این کار یعنی دریافت ورودی از صفحه کلید واقعا یه کار ساده است که میشه با ساده ترین و سریعترین راه این کار رو انجام داد .
    مطمئنا اگه سری های قبل اموزش رو دنبال کرده باشین در قسمتی که ما عملگرد هر بلاک از متد ها رو مورد بررسی قرار می دادیم گفتیم که از متد Update که تا انتهای بازی اجرا میشود علاوه بر استفاده های دیگر برای دریافت تمامی ورودی های کاربر استفاده می کنیم . پس مسلما بهترین مکان هم برای دریافت ورودی ها همین جا میباشد
    برای شروع ما باید ببینیم که چگونه می تونیم به ورودی های صفحه کلید دسترسی داشته باشیم .

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    کلاس صفحه کلید داری متدی برای برگشت دادن وضعیت فعلی صفحه کلید داشته که هر زمانی که اتفاقی برر روی صفحه کلید رخ بدهد این متد صدا زده می شود. .وضعیت فعلی صفحه کلید در شیئ KeybordStat ذخیره می شود. در خط کد بالا ما در واقع وضعیت فعلی صفحه کلید خود را صدا زده ایم .
    حال که متغییر صفحه کلید ما با مقدار وضعیت فعلی صفحه کلید مقدار دهی شده ما باید ببینیم که چگونه می تونیم از اون استفاده کنیم . برای محاسبه و تشخیص زمانی که یک کلید فشرده می شود یا نمی شود ما می تووانیم از متد IsKeyDown در کلاس KeyBoardState استفاده کنیم که در زیر می تونید یک نمونه از اون رو مشاهده کنید :

    کد PHP:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    و یا ما می تونیم از اون به عنوان بخشی از یک شرط استفاده کنیم که هر زمانی که اتفاق افتاد شرط را اجرا کند
    کد PHP:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    همونطور که در اینجا می بینید ما دو مثال از IsKeyDown که هر دو وظیفه برگردوندن مقادیر صحیح و یا غلط رو بر عهده می گیرن رو به کار بردیم .


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

    کد PHP:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    این شرط باید مقدار صحیح را هز مانی که کلید مربوطه زده شد را بر گرداند . اکنون بیاید مثالی را با هم انجام داده تا به وسیله ان بتوانیم مقادیر قبل و حال کلید های خود را در اختیار بگیریم .
    برای این کار ما باید وظعیت قبلی کلید خود را در اختیار داشته باشیم .
    مانند قبل باید یک وضعیت جدید برای صفحه کلید تعریف کنیم
    کد PHP:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    سپس در متد Update کد های زیر را اضافه کنید تا بتواند وضعیت حاظر را دریافت , رسیدگی و وضعیت قبلی را به روز رسانی کند :


    کد PHP:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    در این کد ما فقط یک یک چیز را در داخل وضعیت شرطی قرار دادیم تا هنگامی که اولین کلید زده شد آن نیز اجرا شود.
    همچینین علاوه بر این کار ما می توانیم وضعیت کلید را در حالت برداشته شدن نیز به دست بیاوریم که این کار با iskeyup انجام خواهد شد .

    علاوه بر تمامی اینها کلاس KeyboardStat متد دیگری را نیز در اختیار ما قرار خواهد داد که با استفاده از آن می توانیم کلید های فشار داده شده را نیز شناسایی کنیم . با استفاده از متد GetPressedKeys می توان تمامی کلید های فشار داده شده را در اختیار گرفت . به عنوان مثال ما در قطعه کد زیر می توانیم لیستی از تمامی کلید های فشار داده شده را داشته باشیم :

    کد PHP:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    عمل دیگری که می توانیم در این قسمت انجام دهیم چند کلیدی بودن صفحه کلید می باشد . به عنوان مثال ما می خواهیم یک عمل را زمانی انجام دهیم که کاربر کلید کار Ctrl + c را با هم فشار میدهد و یا اعمال دیگر برای این کار می توانیم مانند کد زیر این عمل را انجام دهیم :

    کد PHP:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    تا اینجا ما با مبحث ساده استفاده از صفحه کلید در یک پروژه بازی به خوبی اشنا شده ایم و توانستیم ورودی های مختلف را از صفحه کلید خودمان در یافت کنیم . در قسمت های اینده با حالت های مختلف و دسترسی های بیشتر همچنین با چگونگی استفاده از کنترل های گوناگون و گیم پد ها نیز اشنا خواهید شد
    Last edited by silsin; 23-05-2013 at 14:49.

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •