اشتباهات رایج در استفاده از ایونتهای کانستراکت 2
|استفادهی غیر ضروری از سابایونت
سابایونتها برای تعریف لوجیک[1] پیشرفتهتری برای بازی عالی هستند. امّا معمولاً زیاد میبینیم که بیخودی از آن استفاده میشود. ساب ایونتها، از بین اشیائی که ایونت والدشان[2] پیک (Pick) کرده است، تعدادی را پیک میکنند، سابایونت معمولاً میتواند به راحتی با ایونت والد خود ترکیب شود. حالا مثالی را میبینیم:
در ایونت بالا، نیازی نیست که کاندیشن Player.Count = 0 را در یک سابایونت قرار دهید. اگر هر دو را در یک ایونت قرار دهید نتیجه هیچ فرقی نمیکند، مثل زیر:
ما توصیه میکنیم از این روش استفاده کنید تا ایونت راحتتر خوانده شود. در روش اوّل خواندن کمی سختتر خواهد بود. در ضمن این طور استفاده از ساب ایونت این حس را القا میکند که وجودش به دلایلی ضروری است، که میتواند دیگران (یا خودتان) را گیج کند یا به اشتباه بیندازد. مخصوصاً اگر بخواهید به دیگران آموزش بازیسازی بدهید این مطلب خیلی مهم میشود ، چون ممکن است از شما بپرسند چرا از سابایونت استفاده کردید، درحالیکه جواب خوبی برایش وجود ندارد.
از آنجاییکه سابایونتها به سازماندهی ایونتها کمک میکنند، عدّهای از آنها استفاده میکنند.[3] این کار خوبیست، ولی توصیه میکنیم ترجیحاً از همین روش آسان خواندن استفاده کنید، و بعداً در صورت لزوم، از سابایونتها برای سازماندهی مجدّد استفاده کنید. تا آن موقع چرا از حالتی استفاده نکنید که خواندنش راحتتر است؟ البته خیلی وقتها استفاده از سابایونت واقعاً ضروری است، مثل مواقعی که میخواهید کاندیشنهای تکراری را حذف کنید یا موقعی که میخواهید از اکشنهایی استفاده کنید که در ایونتی دیگر استفاده کردهاید. در این صورت استفاده از سابایونت مشکلی ندارد؛ فقط زمانی استفاده از سابایونت مشکل دارد که اگر از آن استفاده نکنید بازهم نتیجه فرقی نداشتهباشد، در این حالت است که ما توصیه میکنیم از آن استفاده نکنید.
یکی از رایجترین مثالهای استفادهی بیجا از سابایونت، در حلقههای تودرتو است، مثل زیر:
این اشتباه از مقایسهی حلقههای کانستراکت با زبانهای برنامهنویسی سنّتی ناشی میشود، که معمولاً در آنها برای نوشتن حلقههای تودرتو، حلقهی داخلی را درون حلقهی خارجی مینویسند. ولی در کانستراکت 2 این کار لازم نیست، میتوان حلقههای تودرتو را فقط در یک ایونت قرار داد، نتیجه هم فرقی نمیکند.
نکتهی کوچک دیگری نیز که باید مد نظر قرار داد این است که کانستراکت 2 گاهی اوقات نمیتواند طوری با سابایونتها رفتار کند که با ایونتهای معمولی رفتار میکند. در مواردی نادر، عدم استفاده از سابایونتهای اضافی میتواند عملکرد بازی را بهبود بخشد، مخصوصاً وقتی از حلقههایی استفاده میکنید که بسیار هم تکرار میشوند. با این حال، باز هم نگرانی اصلی ما خوانایی ایونتشیت است.
[1] لوجیک (Logic): منطق، شرطها و عملهایی که در بازی برنامهریزی میشوند.
[2] ایونت والد (Parent event): به ایونتی گفته میشود که ساب ایونت مورد نظر زیرمجموعهای از آن ایونت است.
[3] زیرا در کنار ایونتهای والد یک علامت «-» وجود دارد که با کلیک روی آن میتوان سابایونت را موقّتاً پنهان کرد.
سلام وخسته نباشید به داداش گلم اقامجتبی
من 2تابازیکن دارم که میخوام به هرکدوم یک ماموریت مخصوص بدم که هرکدوم وظیفه داده شده راانجام بده. به طور واضح تربگم میخوام وقتی به پلیر Aماموریت دادم به ماموریتش به پردازه و درهمان زمان من پلیر Bرا ماموریت بدم
ایشالا جوابمو بگیرم
علیک سلام
لطفاً سؤالاتتون رو در انجمن بپرسید.
سلام خسته نباشید
میخواستم بدونم چگونه stop و play برای بازی ام بسازم؟؟؟
ممنون
علیک سلام،
میتونید جلسهی ششم دورهی تابستانی ما رو ببینید:
http://construct2.ir/showthread.php?tid=609
خواهش میکنم