اشتباهات رایج در استفاده از ایونتهای کانستراکت 2
|Pathfinding افراطی
رفتار pathfinding میتواند بسیار مفید باشد، ولی یکی از رفتارهایی است که به شدّت از CPU کار میکشد.[1] یافتن یک مسیر، عملیّات بسیار پیچیدهای است که اغلب در آن هزاران راه مختلف برای پیدا کردن یک مسیر خوب بررسی میشود، و هر بار که از اکشن Find path استفاده میکنید این عملیّات برای هر کدام از اینستنسها تکرار میشود! خوشبختانه عملیّات جستجوی مسیر به طور موازی با اجرای خود بازی انجام میشود، این باعث میشود که در حین این عملیّات، بازی هنگ نکند. ولی شما میتوانید یافتن مسیر را بسیار سخت کنید: بعضی از کابران بیتجربه، اندازهی سلّولها (cell size) را فقط چند پیکسل، یا حتّی 1 پیکسل قرار میدهند. این کار مثل این است که در دنیای واقعی بخواهیم برای یافتن یک مسیر، اتم به اتم، راه را بررسی کنیم تا یک مسیر مناسب برای رسیدن به مقصد پیدا کنیم، ولی متأسفانه قدرت پردازش کامپیوتر شما نامحدود نیست. تلاش برای انجام این کار باعث میشود که به طرز غیر منطقی استفاده از CPU خیلی زیاد شود، و پیدا شدن مسیر خیلی به طول بینجامد، یا حتّی متوقّف شود، مخصوصاً در موبایل.
راه حل ساده است: تا حدّ امکان اندازهی سلّولها را بزرگ قرار دهید. وقتی اندازه ی سلّولها بزرگ باشد، گامهای کمتری برای پیدا کردن مسیر لازم است، در نتیجه مسیر سریعتر پیدا میشود. به همین دلیل به طور پیشفرض از یک شبکهی 30×30 پیکسلی استفاده میشود، این کار برای بهینهسازی بازی است، برای این است که مسیر، سریعتر از زمانی پیدا شود که بخواهیم نگران تکتک پیکسلها باشیم.
بازسازی نقشهی موانع (obstacle map) نیز به خاطر اینکه تمام لیوت را در بر دارد برای CPU سخت است، و تا حدّ امکان باید از آن کم استفاده کنید. با کوچک کردن بیش از حدّ اندازهی سلولها، تلاش برای یافتن مسیر در هر تیک، یا بعد از پیدا شدن مسیر قبلی، بار شدیدی به CPU تحمیل میشود که شاید نتواند از پسش بر آید. سعی کنید چنین کارهایی را انجام ندهید.
حرف آخر
امیدوارم این مقاله به شما کمک کردهباشد تا این اشتباهات را در سیستم ایونت مرتکب نشوید. اشتباه رایج دیگری که وجود دارد این است که عدهای فکر میکنند حافظهی کامپیوتر نامحدود است، انشاءالله در این مورد در آینده بیشتر توضیح میدهیم.
[1] رفتار دیگری که خیلی از CPU کار میکشد، فیزیک است.
سلام وخسته نباشید به داداش گلم اقامجتبی
من 2تابازیکن دارم که میخوام به هرکدوم یک ماموریت مخصوص بدم که هرکدوم وظیفه داده شده راانجام بده. به طور واضح تربگم میخوام وقتی به پلیر Aماموریت دادم به ماموریتش به پردازه و درهمان زمان من پلیر Bرا ماموریت بدم
ایشالا جوابمو بگیرم
علیک سلام
لطفاً سؤالاتتون رو در انجمن بپرسید.
سلام خسته نباشید
میخواستم بدونم چگونه stop و play برای بازی ام بسازم؟؟؟
ممنون
علیک سلام،
میتونید جلسهی ششم دورهی تابستانی ما رو ببینید:
http://construct2.ir/showthread.php?tid=609
خواهش میکنم