فیزیک در کنستراکت ۲: مفاهیم اوّلیّه
|بسم الله الرّحمن الرّحیم
سلام. فیزیک در کنستراکت ۲ به شما اجازه میدهد که در بازیتان اشیائی داشته باشید که از قوانین فیزیک پیروی کنند مثل دنیای واقعی. شما میتوانید بعضی از چیزهایی را که در کلاس فیزیک در مدرسه یاد گرفتید را با فیزیک کنستراکت ۲ پیاده کنید. ما در اینجا این طور در نظر میگیریم که از قبل اصول و مبانی را یاد نداشته باشید و اصول فیزیک در کنستراکت ۲ را برایتان توضیح میدهیم. برای دانلود این آموزش میتوانید از لینک زیر استفاده کنید، اگر هم میخواهید این آموزش را به صورت آنلاین مطالعه کنید به «بیشتر بخوانید» مراجعه کنید.
فیزیک در کنستراکت ۲: مفاهیم اوّلیّه (1511 downloads)
مقدّمه
یکی از رفتارهای موجود در کنستراکت2 رفتار فیزیک (Physics) نام دارد که با Box2DWeb ساخته شده است. این رفتار به شما اجازه میدهد که در بازیتان اشیائی داشته باشید که از قوانین فیزیک پیروی کنند مثل دنیای واقعی. اینجا یک مثال داریم که همین موضوع را نشان میدهد. فیزیک میتواند بازی شما را واقعاً جذّاب و سرگرم کننده کند! در این آموزش توضیحی کلی دربارهی به کار بردن فیزیک در بازی خواهیم داد.
شما میتوانید بعضی از چیزهایی را که در کلاس فیزیک در مدرسه یاد گرفتید را با فیزیک کنستراکت 2 پیاده کنید. ما در اینجا این طور در نظر میگیریم که از قبل اصول و مبانی را یاد نداشته باشید و اصول فیزیک در کنستراکت 2 را برایتان توضیح میدهیم. لطفاً مقالهی ویکیپدیا را در مورد قوانین حرکت نیوتون بخوانید. این لینک هم میتواند مفید باشد.
همراه کنستراکت 2 تعداد زیادی نمونه برای فیزیک وجود دارد! در صفحهی start روی Brows all examples کلیک کنید، اسم همهی نمونههای فیزیک با “Physics –” شروع میشود، مثلاً “Physics – basics.capx”. بد نیست نگاهی به آنها بیندازید. اگر توضیحاتی را که در ادامه میدهیم قبلاً به طور عملی دیده باشید، ممکن است حسّ خوبی به شما دست دهد.
چگونه به بازی فیزیک اضافه کنیم؟
شیئی را که میخواهید به آن رفتار فیزیکی بدهید را انتخاب کنید، سپس در نوار ویژگیها (Properties Bar) روی مورد مشخص شده در تصویر زیر کلیک کنید.
در صفحهای که باز میشود روی دکمهی کلیک کنید و سپس در پنجرهی بعدی Physics را انتخاب نمایید. حالا شیء شما دارای رفتار فیزیک شد.
از این به بعد به هر شیئی که دارای رفتار فیزیک باشد «شیء فیزیکی» میگوییم.
جاذبه (Gravity)
به طور پیشفرض اشیاء فیزیکی دارای جاذبه هستند، این ویژگی باعث میشود که همهی آنها به سمت پایین سقوط کنند. به طور پیشفرض مقدار جاذبه 10 است.[1] (یادتان باشد که در کنستراکت 2 محور Yها برعکس ریاضی به سمت پایین افزایش و به سمت بالا کاهش مییابد) اگر میخواهید جاذبه وجود نداشته باشد با استفاده از اکشن Set world gravity اشیاء فیزیکی مقدار آن را به صفر تغییر دهید. جاذبه به تمام دنیای فیزیکی بازی اعمال میشود، یعنی اگر جاذبهی یکی از اشیاء را صفر کنید، جاذبهی همهی اشیاء صفر میشود.
صحنهسازی
مسلّماً شما هم نمیخواهید زمین زیر پای شخصیت بازیتان به خاطر جاذبه سقوط کرده و از محدودهی دیدتان خارج شود! حتّی در بازیهای بدون جاذبه هم ممکن است با برخورد چیزی به بخشهایی از صحنهی بازی آن بخشها به حرکت درآیند و یا شروع به چرخش کنند. (این به خاطر قانون سوم نیوتون است که میگوید «هر عملی عکسالعملی مساوی آن و در خلاف جهت آن دارد» یعنی عکسالعمل برخورد یک شیء به قسمتی از صحنه باعث حرکت آن قسمت میشود)
بیشتر اوقات میخواهیم صحنههای بازیمان مثل سنگ ثابت بمانند و تکان نخورند، به خاطر وجود جاذبه سقوط نکنند، و یا با برخورد چیزی به آنها حرکت نکنند. برای این کار در نوار ویژگیها Immovable به معنی غیر قابل حرکت را روی Yes بگذارید.
وقتی این کار را انجام دهید انگار که جرم شیءتان بینهایت شده است، به همین دلیل نمیتواند از جایش تکان بخورد!
تذکّر: اشیاء فیزیکی فقط بر اشیاء فیزیکی دیگر اثر میگذارند. پس رفتار Solid زمین تأثیری روی اشیاء فیزیکی ندارد. اشیاء فیزیکی سایر اشیاء را نادیده میگیرند و طوری عمل میکنند که انگار اشیاء غیر فیزیکی اصلاً وجود ندارند. اشیاء فیزیکی از داخل اشیاء جامد[2] عبور میکنند، مگر اینکه به آنها رفتار فیزیک بدهید و طبق آنچه که الآن گفتیم غیر قابل حرکتشان کنید.
سایر ویژگیهای رفتار فیزیک
حالا به طور مختصر با بعضی از ویژگیهای دیگر رفتار فیزیک که در نوار ویژگیها قرار دارند آشنا میشویم:
کالیژنماسک (Collision mask)
کالیژنماسک شکل برخورد شیء را تنظیم میکند. روی اسپرایت مورد نظرتان دو بار کلیک کنید تا ویرایشگر تصویر باز شود سپس روی ابزار collision polygon کلیک کنید تا بتوانید آن را تغییر دهید. مراقب باشید بیش از حد نقطه ایجاد نکنید، چون ممکن است سرعت بازی را پایین بیاورد. برای درک بهتر به تصاویر زیر توجّه کنید.
فرض کنید یک بار کالیژنماسک این استالاکتیت در حالت ۱ و بار دیگر در حالت ۲ قرار داشته باشد. حال اگر وضعیت شیئی دیگر نسبت به آن در بازی به این شکل شود داریم:
۱. اگر کالیژنماسک ماسک حالت 1 باشد برخوردی بین مربّع و استالاکتیت لحاظ نمیشود (چون در این حالت هنوز مربّع وارد محدودهی کالیژنماسک نشده است).
۲. اگر کالیژنماسک حالت 2 باشد بین استالاکتیت و مربّع برخورد لحاظ میشود، یعنی مثلاً اگر تنظیم کرده باشید با برخورد به استالاکتیت مرحله از ابتدا آغاز شود این اتّفاق میافتد در حالی که در حالت 1 چنین اتّفاقی نمیافتاد.
البته همهی اینهایی که تا حالا در مورد کالیژنماسک گفتیم در صورتی درست است که در نوار ویژگیها Collision mask روی Use collision polygon باشد.
اگر کالیژنماسک روی Bounding box و یا Circle تنظیم بشود، از collision polygon در ویرایشگر تصویر چشمپوشی میشود و به جای آن در صورت انتخاب Bounding box همیشه از یک مستطیل دور شیء به عنوان کالیژنماسک استفاده میشود (یک چیزی مثل حالت 2 استالاکتیت ما) و در صورت انتخاب Circle از یک دایره. (این مورد برای اشیائی که مثل توپ میچرخند به درد میخورد)
جلوگیری از چرخش (Prevent rotation)
اگر Prevent rotation در نوار ویژگیها روی enabled باشد، شیء فیزیکی ما هرگز نخواهد چرخید، حتّی اگر در شروع بازی در جهتی قرار داشته باشد که باید به سرعت بچرخد و زاویهاش را تغییر دهد دیگر این کار را انجام نمیدهد. این ویژگی برای وقتی کاربرد دارد که خودتان بخواهید جهت زاویهی شخصیّت بازیتان را کنترل کنید، مثلاً در یک بازی پلتفرم شاید نخواهید هر بار که شخصیّت اصلی بازی خواست حرکت کند پایش به زمین گیر کند و با صورت برود توی زمین!
چگالی (Density)
چگالی برای تشخیص جرم شیء به کار میرود، جرم با دشوار بودن حرکت شیء رابطهی مستقیم دارد، یعنی هرچه جرم بیشتر باشد حرکت سختتر خواهد بود. (تذکّر: کلمهی «وزن» لفظ دقیقاً درستی نیست، وزن به جاذبه بستگی دارد، ولی اشیاء در جاذبهی صفر هم جرم دارند. به عبارتی دیگر اشیائی که جرمشان زیاد است در جاذبهی صفر هم به سختی حرکت میکنند.)[3] جرم اشیاء با ضرب چگالی در مساحت کالیژنماسک به دست میآید[4]، بنابراین یک شیء بزرگ جرم بیشتری نسبت به یک شیء کوچک دارد، اگر چگالیهایشان برابر باشد. اگر یک بلوک بتنی داشته باشید باید چگالیش را از چگالی یک تکه چوب معمولی بیشتر کنید.
اصطکاک (Friction)
اصطکاک نیرویی است که در هنگام تماس اشیاء با هم ایجاد میشود و حرکتشان را کند میکند. نبودن اصطکاک بین دو شیء مانند وقتی میماند که یک سنگ روی یخ سر بخورد، و اصطکاک زیاد مانند موقعی است که میخواهید سنگ را روی قطعهای بتون بکشید. مسلّماً کشیدن سنگ روی بتون خیلی سختتر از کشیدن همان قطعه سنگ روی یخ است.
الاستیسیته (Elasticity)
الاستیسیته (یا کشسانی) میزان فنری مانند بودن شیء را تعیین میکند. شیئی که الاستیسیتهی زیادی داشته باشد، وقتی از یک ارتفاع روی زمین میافتد تا اندازهی زیادی به بالا میپرد، و شیء بدون الاستیسیته اصلاً به بالا نمیجهد.
میرایی خطّی (Linear damping)
اشیاء با همان سرعتی که دارند و در همان جهتی که هستند تا ابد به حرکتشان ادامه میدهند، مگر اینکه چیز دیگری بر آنها تأثیر بگذارد. فرض کنید توپ تنیسی را در فضا (خارج از محدودهی کرهی زمین) پرتاب کردهایم، این توپ تا ابد حرکت خواهد کرد. (قانون اوّل نیوتون: «یک جسم ساکن یا در حال حرکت در خط مستقیم در همان حالت باقی میماند مگر آنکه نیرویی خارجی به جسم وارد شود.») در زمین، نیروهایی مثل جاذبه، اصطکاک و مقاومت هوا باعث میشوند که این قانون کمتر به چشم بیاید.
ممکن است تا حالا پی برده باشید که در بازی فیزیکی اگر شیئی دیگری را هل بدهد تا ابد آن را با خود حمل میکند. ممکن است بخواهید برای زمین اصطکاک تعیین کنید یا مقاومت هوا داشته باشید. برای این کار باید از میرایی خطّی استفاده کنید. افزایش میرایی خطّی باعث میشود سرعت اشیاء رفته رفته کاهش یابد، تا در نهایت متوقّف شوند. میرایی خطّی صفر برای اشیائی کاربرد دارد که میخواهید تا ابد حرکت کنند، مثل اشیاء فضایی.
میرایی زاویهای (Angular damping)
میرایی زاویهای مفهومی بسیار شبیه به میرایی خطّی دارد به این صورت که در فضا، یک شیء در حال چرخش، با همان سرعتش تا ابد به چرخش خود ادامه میدهد. افزایش میرایی زاویهای باعث میشود سرعت چرخش شیء رفته رفته کاهش یابد تا وقتی که دیگر نچرخد. میرایی زاویهای بر سرعت حرکت شیء تأثیری ندارد و فقط سرعت چرخش را کاهش میدهد.
نکاتی کلّی در مورد فیزیک
عملکرد
شبیهسازیهای فیزیکی شدیداً از CPU کار میکشند. برای حرکت مناسب اشیاء فیزیکی، پردازش زیادی باید انجام شود. برای اینکه مطمئن شوید سرعت بازیتان خوب است، خیلی زیاد از اشیاء فیزیکی استفاده نکنید. اگر تعداد اشیاء فیزیکیای که همزمان در حال حرکت هستند در بازیتان بیش از 100 عدد شود سرعت بازیتان کند میشود. درضمن، گوشیها و تبلتها نسبت به کامپیوترهای رومیزی قدرت پردازش ضعیفتری دارند. اگر میخواهید برای موبایل بازی بسازید باید خیلی محافظهکار باشید، و سعی کنید بیشتر از 20-30 تا شیء فیزیکی به کار نبرید.
تذکّر: اشیائی که کاملاً ساکن هستند و اصلاً در حال حرکت یا چرخش نیستند، در حالت «خواب» قرار میگیرند. یعنی دیگر به پردازش نیازی ندارند. اگر شیئی به آنها برخورد کند، «بیدار» میشوند و دوباره پردازش شروع میشود. امّا اگر شیء حتّی کوچکترین حرکتی انجام دهد، در حالت خواب قرار نمیگیرد. نکتهای بسیار مهم در مورد عملکرد بازی وجود دارد که باید آن را به خاطر بسپارید: اگر صدها شیء در حالت خواب داشته باشید و فقط حدود 20 تا 30 تا از آنها حرکت کنند (حتّی حرکتی بسیار کوچک)، بازی هنوز هم به خوبی عمل میکند.
پایداری
شبیهسازیهای فیزیکی در مجموع قوی نیستند. اگر شبیهسازیهای غیر واقعی[5] انجام دهید، نتیجهای که خواهید گرفت هم احتمالاً واقعی نخواهد بود. مثلاً بخواهید یک شیء بتونی غولپیکر با سرعت صوت به زمین اصابت کند. درواقع هرچیزی که با شدّت زیاد انجام شود باعث بیثباتی شبیهسازی فیزیکی میشود.
اشیاء فوقالعاده سنگینی که روی تودهای از اشیاء واقعاً سبک انباشته شدهاند، تعداد بسیار زیادی از اشیاء، یا اشیاء خیلی سنگینی که بسیار سریع حرکت میکنند باعث ناپایداری میشوند. سعی کنید در بازیتان هرکاری را عاقلانه انجام دهید.
درضمن، اندازهی اشیاء نیز باعث ناپایداری میشود. اشیاء خیلی کوچک (زیر 5 پیکسل) یا خیلی بزرگ (بالای 500 پیکسل) شاید مثل واقعیّت شبیهسازی نشوند. سعی کنید هم طول و هم عرض همهی اشیاءتان را در محدودهی 5 تا 500 پیکسل نگه دارید، ضمناً نسبت ابعاد به هم نزدیک باشد و تفاوت زیادی نداشته باشد (مثلاً سایز شیئی 5 × 500 پیکسل نباشد).
به عبارت دیگر، در صورتیکه اندازه و جرم اشیائی که با هم تعامل دارند حدوداً مثل یکدیگر باشد و سرعتشان نیز نسبتاً کم باشد، فیزیک به بهترین نحو عمل خواهد کرد.
حرکت دستی و سایر رفتارها
اگر اشیاء را به وسیلهی ایونتها حرکت دهید (مثلاً با set X و set Y) یا با سایر رفتارها (مثل اضافه کردن رفتار 8 direction به یک شیء فیزیکی) شبیهسازی فیزیکی به نحو احسن همراه با آنها کار میکند. امّا معمولاً برای طبیعیتر و واقعیتر کردن همین حرکت، باید به اشیاء فیزیکی نیرو و ضربه وارد کنید. با این کار همهی ویژگیهای «دنیای فیزیکی» حفظ شده و به دنیای واقعی نزدیکتر میشود.
اگرچه میتوانید به شیئی فیزیکی رفتار Platform بدهید، امّا این دو[6] در کنار هم خیلی خوب عمل نمیکنند. میتوانید این کار را با کمک نیروها انجام دهید. اگر میخواهید یاد بگیرید که چگونه میتوان این کار را انجام داد مثال Physics – rolling را که از نمونههای پیشفرض کنستراکت 2 است را بررسی کنید.
نتیجه
فیزیک میتواند بازی شما را واقعاً جذّاب کند، امّا فراموش نکنید که: بیش از حد شیء فیزیکی نداشته باشید، از کارهای ناگهانی پرهیز کنید، سعی کنید برای حرکت اشیاء فیزیکی فقط از نیروها و ضربهها استفاده کنید، اگر کمی مطلب در این مورد یاد بگیرید ضرر نمیکنید!
امیدوارم از قسمت اوّل فیزیک در کنستراکت 2 خوشتان آمده باشد. اگر میخواهید آموزش بعدی را مطالعه کنید: فیزیک در کنستراکت 2: نیرو، ضربه، گشتاور و اتّصالها.
مجتبیٰ قاسم زاده تهرانی
تیر 1393
[1] یکای جاذبه (و کلاَ شتاب) در کنستراکت 2 پیکسل بر مربّع ثانیه (یا پیکسل بر ثانیه بر ثانیه) است.
[2] اشیائی که رفتار Solid داشته باشند اشیاء جامد نامیده میشوند.
[3] طبق قانون دوم نیوتون رابطهی F=ma (نیرو=F ، شتاب=a ، جرم=m) برقرار است. حالا اگر نیرویی یکسان به دو شیء که جرم یکسان ندارند وارد شود چون F آن دو با هم برابر است حاصلضرب شتاب در جرم (ma) نیز برای هر دو برابر خواهد بود، بنابراین جسمی که m بیشتری داشته باشد مجبور است شتاب کمتری داشته باشد.
[4] در اصل است. (جرم = m، حجم = V، چگالی = ρ) امّا چون بازی ما دو بعدی است و در فضای دوبعدی حجم وجود ندارد، به جای حجم از مساحت کالیژن ماسک استفاده میکنیم، بنابراین رابطه به صورت زیر تغییر میکند:
[5] غیر واقعی، مثلاً اشیاء از درون هم عبور میکنند یا در داخل هم حرکت میکنند.
[6] این دو: رفتار Physics و رفتار Platform
سلام ببخشید لینک PDF این آموزش خرابه
سلام
درست شد!
ممنون از اطّلاعرسانی
خیلی دیر این وبسایت رو پیدا کاردم و خیلی زود عاشقش شدم اقعا حرف ندارین لطفا از حرکت و پیشرفت وای نستین مطالب و اموزش ها رو بیشتر کنید واقعا کار تون تحسین داره مرسی
میخواستم یک بازی بسازم ولی به یک مشکل بر خوردم من اون بازد رو میخوام برای اندروید خروجی بگیرم ولی اگه برای اندروید بخوام بجای موس باید از حالت تاچ استفاده کنم ولی توی آموزش های شما کار با تاچ را یاد نداده