دیباگر (Debugger)
|بسم الله الرّحمن الرّحیم. ولادت پیامبر اکرم (ص) و امام جعفر صادق و هفتهی وحدت مبارک باد.
به همین مناسبت آموزشی را در مورد یکی از ویژگیهای عالی کانستراکت یعنی دیباگر آماده کردهایم.
دیباگر (Debugger)
ابتدا میخواهیم بدانیم باگ و دیباگ به چه معنی هستند. باگ به نقصهای نرمافزاری برمیگردد، وقتی بعضی چیزها در بازی یا نرمافزار آن طور که انتظار داریم عمل نمیکنند میگوییم با یک باگ روبرو هستیم. به فرآیندی که برای اصلاح این مشکلات انجام میشود دیباگ گفته میشود. دیباگر سی2 ابزاری است که به شما در پیدا کردن و اصلاح باگهای بازی کمک میکند.
چگونه دیباگر را اجرا کنیم؟
دیباگر میتواند از سربرگ Home در روبان، نوار دسترسی سریع، کلیک راست بر روی نام پروژه و یا یک لیوت در نوار پروژه، یا با کلید میانبر Ctrl + F5 اجرا شود.
دیباگر مثل یک پیشنمایش عادی عمل میکند، با این تفاوت که همراه بازی یک پانل اضافی هم به چشم میخورد که شامل اطّلاعات زیاد و تنظیمات مفیدی است.
در حالت دیباگ، آدرسی که در مرورگر نمایش داده میشود به عبارت debug/ ختم میشود، مثلاً http://localhost:50000/debug . حالا شما میتوانید با استفاده از این ویژگی بین حالت دیباگر و پیشنمایش معمولی جابجا شوید (با اضافه کردن debug/ به آدرس عادی پیشنمایش به حالت دیباگ بروید و یا با حذف debug/ از آخر آدرس دیباگ به حالت پیشنمایش عادی بروید). حتّی میتوانید با کمک پیشنمایش از طریق وایفای و اضافه کردن debug/ به انتهای آدرس، دیباگر را بر روی موبایل خود ببینید، مثلاً http://192.268.1.3:50000/debug .
شخصیسازی پانل دیباگر
با کشیدن دستگیرهای که در قسمت نوار عنوان خاکستریرنگ پانل دیباگر قرار دارد (سمت چپِ جاییکه نوشته شده است Inspector) میتوانید اندازهی پانل دیباگر را تغییر دهید. این قابلیّت به شما اجازه میدهد تا با بزرگتر کردن این پانل اطّلاعات بیشتری را مشاهده میکنید، یا با کوچکتر کردن آن فقط ابزارها و خلاصهای از اطّلاعات عملکرد بازی را مشاهده کنید.
دیباگر میتواند در پنجرهای دیگر هم (به حالت پاپ آپ) نمایش داده شود. این قابلیّت برای کسانی که از چند مانیتور استفاده میکنند مفید است. بازی با استفاده از تمام پنجرهی مرورگر نشان داده میشود، و پنجرهای جداگانه پانل دیباگ را نمایش میدهد. برای این کار باید روی دکمهی pop-out که در تصویر زیر میبینید کلیک کنید. با کلیک دوباره بر روی این دکمه یا بستن پنجرهی پاپ آپ، این پانل دوباره به پنجرهی اصلی مرورگر باز میگردد.
دستورات اصلی دیباگر
در اطراف دکمهی pop-out چند وسیلهی مفید هم وجود دارند که به قرار زیرند:
Pause: بازی را موقّتاً متوقّف میکند. وقتی میخواهید اطّلاعاتی را در لحظاتی خاص بررسی کنید این امکان به کمکتان میآید. بعد از متوقّف شدن بازی این دکمه به Resume تبدیل میشود، با کلیک بر روی آن بازی ادامه پیدا میکند.
Step: فقط در مواقعی که بازی موقّتاً متوقّف شود امکان استفاده از این گزینه وجود دارد. این فریم بعدی بازی را نشان میدهد، بدون این که Δt) dt) را تغییر دهد. برای مواقعی که میخواهید رویدادی را فریم به فریم بررسی کنید و ببینید چه اتّفاقی رخ میدهد این ویژگی بسیار مفید است.
Save و Load به صورت موقّت بازی را ذخیره میکند، که به شما کمک میکنند که در وضعیّتی خاص بازی را ذخیره کنید، و هر موقع خواستید دوباره به همان وضعیّت برگردید. این برای اجرای یک قسمت از بازی به صورت مکرر به درد میخورد. مثل Saveهای عادی، وضعیّت فعلی بازی مداوماً در مرورگر فعلی ذخیره میشود. بنابراین سیوها در مرورگرهای دیگر در دسترس نیستند، امّا در همان مرورگر حتّی بعد از بستن و باز کردن مجدّد مرورگر، یا ریست کردن کامپیوتر و… باز هم در دسترس خواهد بود.
Restart: بازی را دوباره از ابتدا اجرا میکند.
خلاصهی عملکرد بازی (Performance)
جزئیّاتی در رابطه با عملکرد بازی در بالا سمت چپ این پانل به رنگ خاکستری کمرنگ به چشم میخورد. مقادیری که در این قسمت وجود دارند از چپ به راست به قرار زیر هستند:
تعداد اشیاء (مثلاً 500 objects): تعداد اشیائی که در حال حاضر وجود دارند را نشان میدهد. تعداد بسیار زیاد اشیاء عملکرد بازی را کاهش میدهد. این مقدار معادل اکسپرشن سیستمی objectcount است.
نرخ فریم (مثلاً 60 FPS): نمایش اینکه در هر ثانیه چند فریم در بازی نمایش داده میشود. اکثر صفحات نمایش هر یکشصتم ثانیه به روز رسانی میشوند، بنابراین در حالت مطلوب بازی باید در 60 فریم بر ثانیه (60 FPS) اجرا شود. این مقدار معادل اکسپرشن سیستمی fps است.
تخمین CPU time (مثلاً 20% CPU): مقداری تخمینی از اینکه چهقدر از CPU time صرف اجرای دستورات بازی میشود. این مقدار همیشه دقیق نیست، بیشتر به این خاطر که فقط زمانی را که صرف اجرای جاوااسکریپت اصلی میشود در نظر میگیرد. سربرگ Profile میتواند مشخّص کند که که هر کدام از بخشهای بازی چه مقدار از CPU time استفاده میکند، در ادامهی این راهنما در مورد این سربرگ نیز توضیحاتی خواهیم داد. این مقدار معادل اکسپرشن سیستمی CPUUtilisation است.
حافظهی تخمینی مورد استفاده برای تصاویر (مثلاً 32.5mb images): تخمینی از اینکه چه مقدار از حافظه (RAM) صرف بارگذاری تصاویر بازی شده است. این مورد فقط در حالت WebGL موجود است. بیشترین مقدار مصرف حافظه در بازی به خاطر تصاویر است، امّا توجّه داشتهباشید که مقداری که اینجا نمایش داده میشود چیزهای دیگر را در نظر نمیگیرد، چیزهایی مثل مقدار حافظهای که برای حوادث منطقی بازی استفاده میشود، و همین طور حافظهای که به خاطر پخش موسیقی و افکتهای صوتی بازی اشغال میشود. این مقدار معادل اکسپرشن سیستمی ImageMemoryUsage است.
رندر کننده (مثلاً webgl): به ما میگوید که بازی در حال رندر شدن در حالت canvas2d است یا webgl. حالت Webgl سریعتر است و از افکتها نیز پشتیبانی میکند. این مقدار معادل اکسپرشن سیستمی renderer است.
جزئیّاتی بیشتر در مورد عملکرد بازی در قسمت Performance در سربرگ inspect نمایش داده میشوند، که به طور پیشفرض از این قرارند:
Collision checks/sec (مثلاً 1144 (~22)): نشان میدهد که در ثانیهی آخر، انجین باید چند برخورد را بین دو شیء بررسی کند. بررسیهای برخورد برای کندیشنهای On collision و Is overlapping اسپرایتها انجام میشود. البتّه تعداد زیادی از رفتارها نیز به صورت خودکار بررسیهایی برای برخورد انجام میدهند. داخل پرانتز، میانگین بررسیهای برخورد در هر تیک نیز نشان داده میشود. برای مثال اگر در ثانیهی آخر 600 بررسی برای برخورد انجام شود، و نرخ فریم بازی باشد، به طور میانگین در هر تیک ۱۰ بررسی برای برخورد انجام میشود. این به شما میگوید در هر فریم بازی حدود ۱۰ بررسی برای برخورد اشیاء انجام میشود، البته مقدار واقعی معمولاً در هر فریم با فریم دیگر فرق میکند.
Poly checks/sec (مثلاً 60 (~1/tick)): اکثر بررسیهای برخورد بسیار سریع انجام میشود، و انجین میتواند به سادگی بگوید که اشیاء درحال برخورد نیستند (با اطمینان از اینکه bounding box هایشان همپوشانی ندارند). امّا اگر bounding box های آنها همپوشانی داشته باشد، بررسی برخورد سختتر میشود، انجین باید بررسی کند که آیا collision polygon های آنها نیز به هم برخورد داشتهاند یا نه. این مقدار میگوید که در ثانیهی آخر چند بررسی برخورد از این نوع انجام میشود، مثل قبل (در Collision checks/sec) میانگین این نوع بررسیها در هر تیک نیز نمایش داده میشود. معمولاً مقدار Poly checks/sec عددی کوچکتر است، امّا اگر این مقدار بالا برود، امکان مشکل در عملکرد بازی وجود دارد.
سلام خدمت اقا مجتبای گرامی…..داداش من ی چند وقتیه بدجور سر فیزیک این برنامه مشکل دارم..حالا مشکلمو میگم ربطیم به این موضوع نداره خواستم براتم ایمیل کنم متاسفانه نشد..مشکلمو میگم هرموقه تونستی وقت داشتی برام جوابشو ایمیل کن…مشکل اولم اینه میخوام مثه انگری بردز ی چیزیو با موس بگیرم بکشم و پرتابش کنم که میخوام وقتی بازی واسه گوشی ساخته شد تاچ گوشی جای موس بشه….مشکل دومم اینه ی شیبی دارم که ی توپی نوک شیبه میخوام ی پنجره زیرش باز باشه بازیکن ی سرعتی مشخص کنه بعدش که تایید کرد توپ شروع به قل خوردن روی شیب بصورت طبیعی بکنه…..فک کنم بدونی چی میگم….مشکل سومم اینه میخوام ی حالتی اینجاد بشه که فضا یا همون ویو از بالاس ی چیزی مثه صفحه داریم با تاچ یا موس اینو پرتابش میکنم به ی دیوار و وقتیم به دیوار میخوره طبیعتا از نیروش کم میشه و ی مقدارم به عقب برمیگرده..همین سه تا….حالا اگه لطف کنی هرکدومم جواب بدی من ممنونت میشم…شما رو هم من توی پرومیکرز پیداتون کردم بخاطر مقالات حرفه ای و خوبتون….خواهشا منو بی جواب نزارین…دستتون درد نکنه….ایمیلمم نوشتم ولی محض احتیاط اینجام مینویسم[email protected]
سلام دوست عزیز
لطفاً سؤالاتتون رو در انجمن مطرح کنید.
با تشکّر
سلام، خسته نباشید مطالبتون واقعاٌ عالی، و کاربردی هستند. آموزش “ساخت بازی در سبک دفاع از قلعه” رو هم تو سایت قرار بدید لطفاً؛ البتّه خودم مشکل خاصّی در این زمینه ندارم ولی شاید به درد دوستان بخوره.
موفّق و سرافراز باشید!