یکی از مهم ترین ویژگی های Game maker.studio نسبت به Game maker موتور Box2D و یا جهان فیزیک است. در این موتور تمام قوانین فیزیک اجرا می شود...

موتور فیزیکی چهار مولفه دارد که عبارتند از:

1-جهان فیزیک و اصول فیزیک  یا physics world

2-ادوات و چفت و بست  یا Fixtures

3-اتصالات و یا Joints

4-نیرو ها و یا Forces

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

برای این کار در Game maker.studio یک Room جدید بسازید. به قسمت Physics بروید.

فعال سازی جهان فیزیک

 و گزینه Room is physics World برای فعال کردن جهان تیک بزنید. در قسمت Physics Porld Properties باید دو گزینه را مقدار دهی کنید. Gravity و Pixels To Meters

Gravity مربوط به جاذبه ای است که بر اجسام وارد می شود. در این قسمت می توانید جاذبه ای در سمت محورهای X و Y و بدهید ولی اگر می خواهید بازی واقعی تر بشود فقط Y را مقدار دهی کنید. می توانید هر مقداری بدهید مثلا 20. گزینه Physics Porld Properties مشخص می کند که هر چند متر را برابر چند پیکسل قرار دهد. موتور فیزیکی بر مبنای جهان واقعی اندازه گیری و محاسبه می کند پس باید این گزینه را درست مقدار دهی کنیم. این گزینه را بر روی مقدار پیشفرض قرار دهید یعنی 0.1. (حدود 10 سانتی متر)

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

برای اینکه یک object را در جهان فیزیک فعال کنیم اول باید یک sprite بسازید. توجه کنید یک object در جهان فیزیک حتما باید یک sprite داشته باشد. یک sprite بسازید و نام آن را spr_Pillar بگذارید. به Edit Sprite بروید و یک ستون ساده بکشید و Origin (خاستگاه) را در مرکز قرار دهید.

کشیدن مستطیل

حال یک object بسازید. نام آن را obj_Pillar بگذارید و spr_Pillar را به آن انتساب دهید. برای فعال کردن آن در جهان فیزیک تیک Uses Physics را فعال کنید. با فعال کردن این گزینه قسمتی به نام Physics Properties به وجود می آید که مربوط به ویژگی های object است.

تنظیم قوانین فیزیک آبجکت

قسمتی دیگر به نام Collision Shape وجود دارد که مربوط به سطح برخود جسم است که دارای سه گزینه است:

1-Cirsle (دایره) این گزینه برای شکل های دایره ای کاربرد دارد. توجه کنید از این گزینه نمی توان برای اشکال بیضی شکل استفاده کرد.

2-Box (جعبه) برای اشیا مستطیل شکل و مربع شکل.

3-Shape (شکل چند ضعلی) این گزینه برای شکل هایی مانند متوازی الاضلاع کاربرد دارد. مشکل این گزینه این است که فقط برای اشکال محدب کاربرد دارد و اگر سطح برخورد شما مقعر باشد به شما Error می دهد.

شکل ما مستطیل است پس گزینه Box را انتخاب کنید و برای تنظیم سطح برخورد روی Modify Collision Shape کلیک کنید.

تنظیم سطح برخورد

چون ما origin را روی مرکز قرار داده ایم دیگر نیاز به تنظیم سطح برخورد نیست. اما همیشه به این قسمت سری بزنید و از درست بود سطح بر خورد مطمئن شوید.

خوب حال که شکل آماده استمی توانیم بقیه خصوصیات را هم تنظیم کنیم. شش خصوصیت وجود دارد:

Density (چگالی) : چگالی جسم (نسبت جرم به حجم) را نشان می دهد. می توانید از این گزینه برای سنگین کردن اجسام استفاده کنید.

Restitution (ارتجاع) : مقدار فنریت یک جسم را تعیین می کند. مثلا اگر قابلیت ارتجاع یک جسم را 0 کنیم و قتی به زمین می خورد دیگر بالا نمی آید. توجه کنید که شکل جسم را تغییر نمی دهد.

Collision group (گروه برخورد) : اگر این مقدار یک عدد مثبت باشد فقط با اشیا درون گروه خود برخورد می کند و اگر منفی باشد این معنی را می دهد که اشیا در آن گروه با هم برخورد نمی کنند. اگر 0 باشد باید برای هر object یک رویداد برخورد (Collision Event) تنظیم کرد تا با هم برخورد کنند.

Liner damping (میرایی خطی) :باعث کاهش سرعت جسم در زمان حرکت می شود. می توانید این مورد را استحکاک در هوا هم بنامید.

Angular damping (میرایی زاویه ای) :باعث کاهش مقدار نوسان یک جسم می شود. (کاهش جابه جایی دورانی جسم.)

Friction (اصطکاک) :نیرویی است که در جهت مخالف حرکت جسم به جسم وارد می شود. تفاوت آن با میرایی خطی این است که در میرایی خطی اگر با جسمی هم برخورد نکنیم آخر اصطحکاک بر ما وارد می شود ولی در Friction باید با جسم دیگری برخورد کنیم. (مانند کشیدن لاستیک به زمین)

حال مقدار چگالی را 10، مقدار ارتجاع را 0.2 و اصطحکاک را 0.2 و بقیه را 0 بگذارید.

تنظیم خصوصیات جسم

حال باید زمین بسازیم.

اسپرایتی با نام spr_Erth بسازید. یک مربع 32 در 32 بکشید و خاستگاه را روی مرکز قرار دهید.

تنظیم اسپرایت

آبجکتی با نام obj_Erth بسازید و sprite مربوطه (spr_Erth) را به آن انتساب دهید.

گزینه Uses Physics را فعال کنید. سطح برخورد را روی Box بگذارید و آن را تنظیم کنید.

سطح بر خورد

از آنجایی که زمین ثابت است چگالی را 0 بگذارید. مقدار ارتجاع و بقیه موارد را هم 0 کنید. فقط زمین اصطکاک دارد. آن را 1 بگذارید.

تنظیم آبجکت زمین

حال باید کاری کنیم که obj_Pillar یه obj_Erth برخورد کند. ما برای این کار از گروه برخورد (Collision group) استفاده نمی کنیم چون مدت پردازش بازی را بالا می برد.

پس برای این کار به obj_Pillar بروید و در رویداد برخورد، رویداد برخوردِ obj_Erth را انتخاب کنید. شما می دانید که اگر در رویدادی کدی ننویسیم، آن رویداد به صورت خودکار پاک می شود. برای رفع این مشکل یک comment بسازید و در آن هر چه می خواهید بنویسید.

حال به room بروید و یک ردیف obj_Erth بگذارید. یک obj_Erth دیگر هم بر روی آنها بگذارید (مانند یک نا همواری) . سپس obj_Pillar را در بالای آن زمین برامده بگذارید. برای آزادانه تکان دادن object کلید Alt را بگیزید. مثل تصویر زیر.

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


دریافت
مدت زمان: 6 ثانیه

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