آموزش اضافه کردن قابلیت drag به دوربین

آموزش اضافه کردن قابلیت drag به دوربین

drag

(:سطح متوسط)

در بسیاری از بازی ها مخصوصا در سبک استراتژیک که محیط بازی از زاویه top دیده می شود، بازیکن با یک محیط نسبتا بزرگ روبه روست. اما قاب دوربین (view) ، تنها بخشی از محیط را نشان می دهد  و بازیکن مجبور است برای کنترل کردن نیروها و منابع خود به اطراف محیط بازی سر بزند و قسمت های مختلف را ببیند. برای این منظور برنامه نویس باید قابلیت drag کردن را به بازی اضافه کند. منظور از drag کردن، این است که با کلیک بر روی فضای بازی و کشیدن ماوس به اطراف، قاب دوربین در محیط بازی حرکت کند و سایر مناطق بازی نیز به صورت دلخواه برای بازیکن قابل مشاهده باشد.

روش کار

فرض کنید یک بازی با ابعاد نسبتا بزرگ و یک view فعال داریم. برای پیاده سازی قابلیت drag، تنها به یک آبجکت نیاز خواهیم داشت. نام این آبجکت رابه صورت دلخواه obj_drag بگذارید. یک رخداد Create برای آن ایجاد کنید و در مقابل آن کد زیر را قرار دهید:

dragging = false;

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

سپس رخداد Glob Left Pressed را که معنای تک کلیک روی فضای بازی است را اضافه کرده و کد زیر را در مقابل آن بنویسید:

dragging = true

drag_x = mouse_x

drag_y = mouse_y

همانطور که می بینید در قطعه کد بالا، در زمان تک کلیک ماوس، ابتدا قابلیت دراگ کردن را فعال کردیم و سپس مختصات فعلی ماوس را درون 2 متغیر که با نام دلخواه ایجاد کرده ایم قرار داده ایم.

حالا رخداد step را ایجاد کرده و کد زیر را در مقابل آن قرار دهید:

if (dragging)

{

    view_xview = (view_xview + drag_x – mouse_x );

    view_yview = (view_yview + drag_y – mouse_y );

}

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

در نهایت رخداد Glob Left Released که به معنای لحظه رها کردن ماوس است را ایجاد کرده و کد زیر را در مقابل آن قرار دهید:

dragging = false;

با این کار زمانی که بازیکن کلیک ماوس را رها می کند، از حالت drag خارج می شود و در نتیجه دوربین در جای خود متوقف می ماند. حالا می توانید کار خود را تست کنید و با استفاده از قابلیت جدیدی که در بازی خود ایجاد کرده اید، تمام محیط بازی را drag کنید.

محدود کردن drag

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

if (dragging)

{

    view_xview = (view_xview + drag_x – mouse_x );

    view_yview = (view_yview + drag_y – mouse_y );

   view_xview = max(0, min(view_xview, room_width – view_wview));

    view_yview = max(0, min(view_yview, room_height – view_hview));

}

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

{ پروژه نمونه این درس را را دانلود کنید}

امیدواریم که مطلب حاضر برای شما مفید باشد.در صورتی که سوال یا اشکالی درباره آن دارید می توانید از بخش نظرات در پایین صفحه مطرح کنید. همچنین می توانید برای بحث با دیگر کاربران کلاس بازی سازی درباره این موضوع و سایر موضوعات از بخش Forum استفاده کنید.

 

 

4 دیدگاه ها

  1. Aliab گفت:

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

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

  3. () گفت:

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

  4. خواهش می کنم. ممنون از نظر خوبتون

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *