چگونه بازی Tappy Plane (شبیه Flappy Birds) بسازیم
مقدمه:
سلام و خوش آمدید به آموزش ساخت بازی خود به سبک "پرندههای شلخته" در hyperPad.
نسخه ما کمی متفاوت است، بنابراین ما آن را Tappy Plane مینامیم.
این آموزش برای مبتدیانی طراحی شده است که میخواهند عمیقتر به سیستم رفتار ما غوطهور شوند و در مورد کدنویسی بصری بیاموزند. در طول آموزش همچنین با رابط hyperPad آشنا خواهید شد.
در این آموزش، ما یک بازی ساده به سبک Flappy Bird ایجاد خواهیم کرد. گیمپلی شامل این است که بازیکن به صفحه ضربه میزند تا هواپیما را کنترل کند و آن را بالا و پایین حرکت دهد و از میان سلسلهای از صخرهها عبور کند. هر صخرهای که عبور کردید یک امتیاز میدهد و با کسب امتیاز کافی، بازیکنان یک مدال به دست میآورند. ارزش این مدالها با افزایش امتیاز، افزایش مییابد و به یک مدال طلای درخشان نیز ختم میشود! و چه کسی چیزهای درخشان را دوست ندارد!؟
اگر هنوز hyperPad را ندارید، میتوانید آن را از App Store دانلود کنید: https://itunes.apple.com/app/apple-store/id886106438?mt=8
شما میتوانید اطلاعات بیشتری راجع به hyperPad را از وبسایت ما در http://www.hyperpad.com بیابید.
بدون هیچ معطلی، بیایید شروع کنیم!
بخش 1: شروع به کار
ایجاد پروژه:
اولین کاری که باید انجام دهیم این است که یک پروژه جدید شروع کنیم. هنگام بارگذاری hyperPad باید صفحه پروژه را ببینید. در اینجا همه پروژههایی که ساختهاید و همچنین هر پروژهای که دانلود کردهاید، خواهید یافت. در حال حاضر، ما میخواهیم یک پروژه جدید آغاز کنیم. روی دکمۀ پروژه جدید در بالای راست صفحه ضربه بزنید.
وقتی کار تمام شد، باید یک پنجره پاپ آپ ظاهر شود. در اینجا ما نام پروژه را تعیین میکنیم و اگر بخواهیم یک نسخه پشتیبان در ابر ایجاد میکنیم. علاوه بر این، میتوانید روی دکمۀ ”با نمونه شروع کنید” ضربه بزنید تا یکی از پروژههای پایه ما را وارد کنید. اما در حال حاضر ما این کار را نخواهیم کرد. نام پروژه را Tappy Plane بگذارید و سپس روی دکمه 'بعدی' ضربه بزنید.
در این صفحه جدید، نوع دستگاهی که میخواهیم طراحی کنیم و جهت را تعیین خواهیم کرد. برای این پروژه، جهت را به افقی و پشتیبانی دستگاه را به iPad تنظیم کنید. نگران نباشید اگر بعداً نیاز به تغییر چیزی دارید. این تنظیمات هر زمان که بخواهید میتوانند در منوی تنظیمات جهانی تنظیم شوند.
در نهایت اکنون میتوانیم انتخاب کنیم که چه نوع بازی میخواهیم بسازیم. در حال حاضر hyperPad از دو نوع حالت، نمای بالا و نمای جانبی پشتیبانی میکند. نمای بالا، یا نمای پرندهی چشم، معمولاً برای بازیهایی مانند The Legend of Zelda قبل از انتقال به 3D، بازیهای پازل مانند Bejeweled و بازیهای تیراندازی از نمای بالا استفاده میشود. نمای جانبی معمولاً برای بازیهای پلتفرم مانند Super Mario Bros استفاده میشود.
هر دو نسخه به طور یکسان کار میکنند با یک تفاوت کوچک، نمای پرندهی چشم تنظیمات جاذبه را غیرفعال خواهد کرد ( بلکه به مقاومت هوا برای شبیهسازی جاذبه به داخل صفحه تکیه میکند)، بنابراین در زمان ایجاد پروژه خود این نکته را مد نظر داشته باشید. شما همیشه میتوانید این موارد را بعداً در منوی خواص جهانی تغییر دهید.
برای این آموزش، ما از نمای جانبی استفاده خواهیم کرد، بنابراین مطمئن شوید که آن انتخاب شده است. بعد از آن، تنظیمات جاذبه و نسبت PTM وجود دارد. به طور پیشفرض، جاذبه به 0 و -25 تنظیم خواهد شد.
اینها مقادیر x و y هستند، یا به سادگی افقی و عمودی فضای بازی ما. X نمایانگر افقی، یا چپ و راست است، در حالی که Y نمایانگر عمودی، یا بالا و پایین است. مقادیر پیشفرض 0 و -25 به این معناست که هیچ نیروی جاذبهای اشیاء را به چپ و راست نمیکشد، اما آنها با سرعت 25 متر در ثانیه سقوط خواهند کرد. برای این آموزش، مقادیر پیشفرض خوب هستند.
نسبت PTM به معنای نقاط به متر است، یا به سادگی، چند پیکسل (نقطه) در 1 متر hyperPad وجود دارد. به طور پیشفرض این مقدار به 32 pt/m یا 32 پیکسل در متر تنظیم شده است. این نکته برای ایجاد داراییهای هنری مهم است و همه داراییهای هنری باید این مقیاس را دنبال کنند. در این آموزش ما از داراییهای رایگان موجود در کتابخانه دارایی hyperPad استفاده خواهیم کرد، بنابراین نیازی به تغییر مقیاس نداریم.
با این کار، روی دکمه ایجاد ضربه بزنید و ما شروع خواهیم کرد!
ویرایشگر:
حال که در پروژه هستیم، باید صفحهای که به نظر میرسد شبیه به این است را مشاهده کنید:
این بوم ماست و جایی است که بازی خود را خواهیم ساخت. در مرکز صفحه باید یک حاشیه سبز باریک از یک جعبه را ببینید. این نمای صفحه ما را نمایان میکند. هر چیزی که در این جعبه قرار گیرد بلافاصله در هنگام شروع بازی قابل مشاهده خواهد بود در حالی که هر چیزی خارج از آن نمیتواند رندر شود. اگر میخواهید، لحظهای برای ضربه زدن و دیدن عملکرد موارد صرف کنید قبل از اینکه به مرحله بعد برویم.
زمانی که آمادهاید، روی آیکون کشو در پایین سمت راست ضربه بزنید تا مرورگر داراییها را باز کنید.
کتابخانه دارایی:
این مکان برای ذخیره تمام داراییهای بازی ماست. به طور پیشفرض، یک پروژه جدید hyperPad فقط شامل چند دارایی اولیه است. شما باید داراییهای خود را وارد کنید یا یک بسته از فروشگاه دارایی hyperPad دانلود کنید. در این آموزش، ما تمرکز خواهیم کرد بر استفاده از داراییهای ارائه شده از فروشگاه دارایی hyperPad. در سمت چپ یک نوار با چهار دکمه خواهید یافت. روی دکمه دریافت داراییها ضربه بزنید تا فروشگاه Hyperpad باز شود.
در اینجا شما بستههای دارایی رایگان را که توسط ما در Hyperpad تنظیم شدهاند خواهید یافت تا به شما در شروع پروژههایتان کمک کند. پیدا کنید و روی بسته دارایی Tappy Plane ضربه بزنید.
اکنون، به سادگی روی دکمه 'دریافت' ضربه بزنید تا وارد مرحله واردات شوید (توجه: اگر خطایی رخ دهد، فقط دوباره روی آن ضربه بزنید تا واردات را از سر بگیرید). پس از اتمام، شما پیغام میگیرید که داراییها با موفقیت وارد شدهاند. به سادگی روی دکمه بستن در گوشه سمت راست بالای صفحه ضربه بزنید تا به Hyperpad برگردید.
و به همین سادگی است. اکنون شما باید یک پوشه جدید در مرورگر داراییها مشاهده کنید به نام Downloads. با ضربه زدن بر روی آن، پوشه Tappy Plane Pack را مشاهده خواهید کرد و در آن، داراییهای هنری ما قرار دارد.
اکنون ما شروع خواهیم کرد به ساخت بازی خود.
بخش 2: گیمپلی
اگر با Flappy Bird آشنا هستید، پس با سبک گیمپلی آشنا خواهید بود. روی صفحه ضربه بزنید تا پرنده، یا در مورد ما، هواپیما، در هوا بماند و از برخورد با موانع بالایی جلوگیری کند. این موانع در پیکربندیهای تصادفی ایجاد میشوند، بنابراین هر بار که بازی میکنید، با یکدیگر متفاوت است. امتیازاتی برای موفقیت در اجتناب از موانع اعطا میشود و نمره بالای شما ثبت میشود.
اضافه کردن هواپیما:
اکنون که با گیمپلی پایه آشنا هستید، میتوانیم شروع کنیم. اولین کار ما این است که شخصیت بازیکن را بر روی صفحه بیاوریم. به مرورگر داراییها بروید و پوشه دانلودها را باز کنید و بگذارید تا داراییهای هنری خود را مشاهده کنید. باید یک پوشه به نام Planes وجود داشته باشد.
این پوشه را باز کرده و رنگی را که بیشتر از همه دوست دارید انتخاب کنید. سپس، به سادگی اولین گرافیک هواپیما را انتخاب کنید. این کار کتابخانه داراییها را میبندد و شما را به صفحه ویرایشگر اصلی باز میگرداند، جایی که اکنون باید هواپیما را در داک شیء پایین ببینید. این بخش از رابط کاربری به نام داک شیء شناخته میشود. این بخشی از آخرین 5 دارایی است که از آن استفاده کردهاید. اکنون برای قرار دادن هواپیما در منطقه بازی، به سادگی هواپیما را از داک روی بوم بکشید.
اکنون که هواپیما در بازی قرار دارد، باید یک تنظیم سریع انجام دهیم. روی هواپیما ضربه بزنید تا آن را انتخاب کنید و سپس زبانه خصیصهها را در سمت راست باز کنید. ما میخواهیم که هواپیما تبدیل به یک جسم دیواری قابل عبور شود. این خیلی ساده است، فقط کلید Passable را پیدا کرده و روی آن ضربه بزنید تا فعال شود. این کار را انجام میدهیم زیرا نمیخواهیم هواپیما قبل از اینکه بازیکن فرصتی برای شروع بازی داشته باشد، بیفتد. ما همچنین آن را قابل عبور تنظیم میکنیم، زیرا نمیخواهیم که برای حالا، هیچ برخوردی داشته باشد.
با این کار، بیایید به ایجاد آن قابل بازی بپردازیم.
هواپیمای در حال سقوط:
بنابراین، ما به یک راه برای شروع بازی نیاز داریم. برای این کار، به یک دکمه نیاز داریم. اکنون میتوانیم از یک گرافیک ساده استفاده کنیم تا جایی را که باید ضربه بزنیم نشان دهد، اما برای بازی ما، میخواهیم به بازیکن این امکان را بدهیم که در هر نقطهای از صفحه ضربه بزند. چگونه این کار را انجام میدهیم؟ ما کل صفحه را به عنوان یک دکمه میسازیم!
اولین کار برای رسیدن به این هدف ایجاد یک لایه جدید است. اما برای این کار، باید هواپیما را غیرانتخاب کنیم. برای انجام این کار، به سادگی روی هر نقطهای که فضای خالی است ضربه بزنید. وقتی غیرانتخاب شود، خصوصیات شیء بسته میشود و باید زبانه لایهها را در سمت راست مشاهده کنید. اگر نه، فقط با کشیدن انگشت خود از سمت راست صفحه به سمت چپ، آن را پنهان کنید.
همانطور که میبینید، در حال حاضر سه لایه به طور پیشفرض وجود دارد. رابط کاربری جهانی، رابط کاربری صحنه و سپس اصلی بعد از یک خط جداکننده. یک نکته سریع این است که هر چیزی در لایه UI جهانی در هر صحنهای در بازی شما ظاهر خواهد شد. همه لایههای دیگر مختص صحنههای فردی خود هستند. برای ایجاد یک لایه جدید، فقط بر روی نماد + در پایین زبانه لایهها ضربه بزنید. این ما را به نامگذاری لایه جدید وادار میکند. "Button" را تایپ کرده و روی OK ضربه بزنید.
به طور پیشفرض، لایه فعال به لایه جدیدی که تازه ایجاد شده تغییر خواهد کرد. هنگام کار با لایهها، فقط اشیائی در لایه فعال قابل انتخاب خواهند بود. این یک روش عالی برای سازماندهی هنگام ساخت بازی شما است، زیرا نمیخواهید به طور ناخواسته چیزهایی را که نمیخواهید جابجا کنید. همیشه در نظر داشته باشید که در کدام لایه در حال کار هستید. همچنین به خاطر داشته باشید که لایههایی که بر روی یکدیگر قرار میگیرند، روی آن لایه رندر خواهند شد. به این ترتیب میتوانید از پوشاندن پسزمینه فضایی بازی جلوگیری کنید.
اکنون برای ایجاد دکمه خود، این کار بسیار ساده است. روی دکمه اشیاء ویژه (آیکون ارلن) در پایین راست داک شیء ضربه بزنید. این منوی ایجاد یک نوع شیء را نشان میدهد. ما به شیء خالی نیاز داریم. با ضربه زدن بر روی آن یک مربع کوچک و خالی در مرکز پروژه ما ایجاد میشود. با این حال، میخواهیم این کل صفحه را بپوشاند. به داخل مربع ضربه بزنید تا آن را انتخاب کنید.
توجه کنید که وقتی انتخاب شده است، نقاط سبز کوچک در اطراف حاشیه شیء ظاهر میشوند. میتوانیم از این نقاط استفاده کنیم تا شیء خالی خود را به صورت دستی مقیاس کنیم. به سادگی یک گوشه را بزنید و بکشید تا به طور یکنواخت مقیاسگذاری کنید. گوشهها را بکشید تا شیء بر روی بوم گسترش یابد. نقاط کناری میتوانند برای تنظیم بهتر شیء استفاده شوند. در پایان شما باید چیزی شبیه به این داشته باشید (توجه: اگر در مقیاسگذاری شیء مشکل دارید، میتوانید با کشیدن دو انگشت از همدیگر به سمت بیرون زوم کنید و با بهم کشیدن آنها زوم را کاهش دهید):
به لایه اصلی بازگردید با غیرانتخاب کردن شیء خالی (محل خالی روی بوم را بزنید) سپس روی لایه اصلی ضربه بزنید و دوباره هواپیما را انتخاب کنید. روی دکمهای که میگوید رفتارها ضربه بزنید تا صفحه رفتار را باز کنید.
این صفحه رفتارها است و جایی که جادو اتفاق میافتد. به جای کدنویسی سنتی، hyperPad از بلوکهای منطقی بصری از اقدامها و رویدادها برای برنامهنویسی تعاملات استفاده میکند. اگر بخواهید، لحظهای برای مرور دستهها و دیدن گزینههای موجود بگذرانید. روی یکی از رفتارها در زبانه سمت چپ ضربه بزنید تا پنجرهای باز شود که توضیح مختصری از رفتار فراهم کند. همچنین میتوانید مستندات hyperPad را برای توضیح هر رفتار بررسی کنید.
اکنون آنچه که ما میخواهیم انجام دهیم این است که بازی خود را شروع کنیم و هواپیمای خود را از یک شیء دیواری قابل عبور به یک شیء فیزیکی تبدیل کنیم. این کار باعث میشود تا فیزیک به هواپیما اعمال شود و بنابراین، با جاذبه سقوط کند.
اولین کاری که میخواهیم انجام دهیم این است که از رفتار آغاز شده با لمس که در بخش تعامل وجود دارد استفاده کنیم. به سادگی آن را از منو بکشید و به فضای خالی وارد کنید. وقتی آنجا وارد شود، اکنون به جسم ما متصل شده است. شما میتوانید به رفتار ضربه بزنید تا خصوصیات آن را باز کنید، اما نیازی به تغییر هیچ چیزی نیست.
البته، با همین تنها چیزی را نمیتواند انجام دهد، زیرا هیچ چیزی پس از لمس هواپیما پیآمدی ندارد. بیایید این را اصلاح کنیم. به دسته فیزیکی بروید و تا اینکه به بخشی به نام حالتها برسید پایین بروید. اکنون رفتار ایجاد فیزیک را بکشید و در زیر رفتار شروع شده با لمس قرار دهید. حالا تنها چیزی که باید انجام دهیم این است که آن را به شروع شده با لمس متصل کنیم. در پایین رفتار شروع شده با لمس، باید یک صاعقه کوچک در یک دایره ببینید. آن را بزنید و بکشید و خطی را با دستان خود ببینید. خط را به سمت رفتار ایجاد فیزیک بکشید تا به آن متصل شود.
و به همین سادگی است. یک نکته سریع این است که در hyperPad، رفتارها از ساختار رویداد -> اقدام پیروی میکنند. در این مورد، رویداد این است که ما با هواپیما تماس گرفتیم و اقدام این است که هواپیما تصمیم میگیرد که یک جسم فیزیکی شود. بیایید کمی زمان بگذاریم تا این را آزمایش کنیم و مطمئن شویم که به درستی کار میکند. در بالای صفحه، دکمه بازی را فشار دهید تا شروع به آزمایش کنید. وقتی تمام شد، روی سه نوار در قسمت بالای راست ضربه بزنید تا منو را باز کنید و Quit را انتخاب کنید.
اگر همه چیز به درستی کار کند، باید وقتی روی آن ضربه میزنید، هواپیما از صفحه سقوط کند.
اکنون ما میخواهیم بازی خود را پس از آنکه هواپیما به زمین برخورد کرد، به پایان برسانیم. در حالی که اکنون هیچ زمینی نداریم، میتوانیم آن را با یک شیء خالی پر کنیم. با زدن دکمه بازگشت در بالا سمت چپ صفحه، به بوم بازگردید.
هواپیما را غیرانتخاب کنید و روی نماد اشیاء ویژه (آیکون بیكر) در پایین راست داک ضربه بزنید تا پنجرهای را باز کرده و یک شیء خالی دیگر ایجاد کنید. اکنون بیایید آن را در پایین بوم قرار دهیم و به طوری که کل پایین را بپوشاند بکشیم.
هواپیما را انتخاب کنید و دوباره پنجره رفتار را باز کنید. اکنون ما میخواهیم شرط «باخت» خود را اضافه کنیم. بیایید به یاد بیاوریم که قبلاً گفتهام، رفتارهای hyperPad بر اساس Event -> Action کار میکنند. در اینجا، رویداد در این مورد برخورد هواپیما با زمین خواهد بود. بیایید این را راهاندازی کنیم. به برگه اشیاء بروید و تحت شناسایی برخورد، رفتار Collided را بکشید و به فضای کاری وارد کنید. وقتی که انجام شود، آن را بزنید تا خصوصیات آن را باز کنید. شما دو باکس در بالای آن خواهید دید، یکی با هواپیمای ما و دیگری خالی. با زدن جعبه خالی باید نمای بوم باز شود. به شیء خالی در پایین صفحه ضربه بزنید تا آن را انتخاب کنید، سپس روی علامت تیک در پایین برای اعمال ضربه بزنید.
اکنون، ما به اقدام خود نیاز داریم. میخواهیم که صفحه پایانی بازی را بارگذاری کنیم زمانی که هواپیما با شیء زمینی ما به هم برخورد میکند. به دسته صحنهها بروید و به قسمت Overlay پایین بروید و رفتار Load Overlay را انتخاب کرده و آن را زیر رفتار Collided قرار دهید.
حالت برخورد را به Load Overlay متصل کنید. اکنون، بر روی رفتار Load Overlay در بوم ضربه بزنید تا خصوصیات آن را باز کنید. در خصوصیات رفتار بر روی جایی که میگوید Overlay را انتخاب کنید، ضربه بزنید. یک لیست از پوششها ظاهر میشود. Game Over را انتخاب کنید، این یک پوشش است که به طور خودکار به صورت پیشفرض ایجاد میشود (میتوانید اطلاعات بیشتری درباره پوششها در مستندات hyperPad بیابید) اگر بخواهید، همچنین میتوانید یک انتقال برای کمی جذابیت اضافه کنید.
وقتی این انجام شد، دکمه بازی را فشار دهید تا آزمایش کنید. هنگامی که روی هواپیما ضربه بزنید، باید سقوط کند و صفحه Game Over بارگذاری شود.
منطق بازی:
قبل از اینکه به جلو برویم، باید به سرعت توضیح دهم که یک راه خوب برای سازماندهی امور با رفتارها ایجاد کنیم. به منظور جلوگیری از شلوغی و آسانتر کردن تغییرات در آینده، ما منطق بازی را از هواپیما جدا خواهیم کرد. در واقع، ما یک رویداد سفارشی ایجاد خواهیم کرد و هنگام برخورد هواپیما با زمین یک پیام پخش خواهیم کرد به جای بارگذاری پوشه Game Over.
چرا این کار را انجام دهیم؟ خوب، همانطور که اشاره شد، این به سازماندهی بیشتر کمک میکند و تعدیلات در آینده را بسیار راحتتر میکند. بیایید سعی کنیم به این طریق فکر کنیم، اگر منطق فقط بر روی جسم بازی تأثیر بگذارد که به آن متصل شده، پس منطق را درون جسم نگه دارید. اگر شما نیاز به ارجاع به اشیاء دیگری دارید یا جنبههای منطقی که مستقیماً به جسم مربوط نمیشوند، پس آن را جدا کنید. به عنوان مثال وقتی هواپیما با یک شیء برخورد میکند، صدای تصادف پخش میشود. این را میتوان به هواپیما خود نگه داشت. اما اگر وقتی که با یک شیء برخورد کرد، جسم سپس به طریقی تغییر یابد، آن باید جدا شود.
برای انجام این کار، ما یک رابط ایجاد خواهیم کرد، نوعی واسطه که این اقدامات را به یک منطقه سازماندهیشده که میتوانیم به راحتی به آن دسترسی پیدا کنیم، دستهبندی میکند.
به رفتارهای هواپیما برگردید و رفتار Load Overlay را انتخاب کنید. یک زبانه کوچک به خصوصیات آن متصل است. بر روی سطل زباله ضربه بزنید تا رفتار Load Overlay را حذف کنید. ما این کار را انجام میدهیم زیرا به جای فقط بارگذاری پوشش، ما یک پیام پخش خواهیم کرد که منطق بازی ما آن را برداشت میکند و به جای آن صفحه Game Over را بارگذاری میکند. در حالی که این کار به طور فنی مراحل اضافی ایجاد میکند، در درازمدت به نفع ما خواهد بود.
برای پخش یک پیام، به دسته سفارشی بروید و در زیر بخش پخش، رفتار Broadcast Message را بکشید و زیر رفتار برخورد قرار دهید (جایی که قبلاً Load Overlay داشتیم). رفتار برخورد را به Broadcast message متصل کرده و خصوصیات آن را باز کنید. در کادر کلیدی رویداد، این عبارت را تایپ کنید Did Lose. در این وضعیت میتوانیم مقدار پخش را خالی بگذاریم، زیرا ما فقط در حال پخش یک حالت باخت هستیم. (مثلاً آیا باختید: بله/خیر).
اکنون که پیام پخش را اضافه کردهاید، میتوانید به ویرایشگر اصلی بازگردید.
اکنون به چیزی نیاز داریم که منطق خود را نگهداریم. میتوانیم یک شیء خالی دیگر ایجاد کنیم، اما ما میخواهیم بتوانیم به راحتی منطق خود را پیدا کنیم و یک شیء خالی میتواند به راحتی درمیان داراییهای بیشتری که به صحنه اضافه کردیم، گم شود. در عوض، ما از یک برچسب استفاده خواهیم کرد.
ایجاد یک برچسب با یک شیء خالی یکسان است. آیکون بیكر را انتخاب کنید و در پنجره، برچسب را انتخاب کنید. یک برچسب به سادگی یک شیء بازی است که شامل متن است. فراتر از آن، مانند هر شیء دیگری کار میکند. بر روی آن ضربه بزنید تا آن را انتخاب کرده و در جعبهای که در خصوصیات وجود دارد، جایی که میگوید Label، «Game Logic» را تایپ کنید. اگر میخواهید، میتوانید تنظیمات تراز، حاشیه و سایه را تغییر دهید تا منطق بیشتر دیده شود و قابل توجه باشد. لطفاً توجه داشته باشید که متن خود را به عرض خود محدود میکند.
حالا برچسب منطق بازی را خارج از فضای قابل مشاهده (مستطیل سبز) قرار دهید تا توسط بازیکن دیده نشود. منطق بازی را به عنوان مدیر صحنه در نظر بگیرید. اگر آنها کارشان را درست انجام دهند، هرگز آنها را نمیبینید، اما همه چیز به طور روان اجرا خواهد شد.
اکنون، رفتارهای Game Logic را باز کنید. آنچه که اکنون به آن نیاز داریم، راهی برای دریافت پیام خود است. زیر سفارشی، رفتار دریافت پیام را پیدا کرده و بکشید و آن را وارد کنید. خصوصیات آن را باز کرده و بر روی کلید رویداد ضربه بزنید. عبارت Did Lose را وارد کنید و اطمینان حاصل کنید که املای آن دقیقاً همان چیزی است که در Broadcast Message بود. سپس، به صحنه بروید و رفتار Load Overlay را بکشید و آن را به Game Over تنظیم کنید. آنها را به هم متصل کنید.
عملکرد "Receive Message" از نوع "Listener" است. فقط آنجا نشسته است تا وقتی که پیام مورد نظر را دریافت کند. در این مورد "Did Lose". به محض اینکه این پیام را دریافت کند، اقدام متصل شده را فعال میکند.
دکمه بازی را فشار دهید و آزمایش کنید. همانطور که قبلاً بود، صفحه بازی تمام شده باید به محض برخورد با زمین ظاهر شود.
هواپیمای پرشی:
برای بازی ما، میخواهیم هواپیما در محور افقی ثابت بماند، به این معنا که آن حرکت نخواهد کرد، تنها به بالا و پایین. به جای اینکه هواپیما در حال پرواز افقی از میان دنیا باشد، ما سناریو را دور هواپیما حرکت میدهیم و اینگونه احساس میشود که هواپیما به صورت افقی در حال حرکت است. این کار برای همراهی با سبک بازی تک دکمهای ما انجام میشود. روی صفحه ضربه بزنید، هواپیما به بالا میرود و سپس شروع به سقوط باز میکند.
به رفتارهای هواپیما برگردید و در زیر سفارشی، یک بسته رفتار جدید اضافه کنید. خصوصیاتش را باز کنید. بر خلاف سایر رفتارها، بسته به طور کامل خالی است. ما با این حال، میتوانیم نام آن را تغییر دهیم. در بالای خصوصیات، بر روی نام Behaviour Bundle ضربه بزنید تا تغییر یابد. «Jump» را تایپ کنید. در مرحله بعد، میخواهیم این بسته به طور پیشفرض غیر فعال باشد. بنابراین در پنل کوچک متصل به خصوصیات، جایی که نوشته شده On را پیدا کنید و به آن ضربه بزنید تا خاموش شود. بسته اکنون باید خاکستری شود.
یک بسته برای پیوستن یک گروه از رفتارها استفاده میشود. علاوه بر این، آنها در ترتیب چپ به راست اجرا خواهند شد. اینگونه میتوانیم بهتر کنترل کنیم که چگونه و کی برخی از رفتارها اتفاق میافتند. ما این بسته را خاموش کردهایم چون نمیخواهیم، و اقداماتی که به آن متصل خواهیم کرد، تا بعد از شروع بازی فعال شود.
اکنون میخواهیم برخی از رفتارها را به بسته خود متصل کنیم. اولاً، تنظیم سرعت که در زیر زبانه فیزیک است. خصوصیاتش را باز کنید و X و Y را به 0 تنظیم کنید. این کار را انجام میدهیم تا نیروی جاذبه را از هواپیما حذف کنیم و هر پرش قبلی که هنوز در حال عمل بوده را لغو کنیم.
سپس باید نیرویی را وارد کنیم، همچنین در زیر زبانه فیزیک. مقدار X را خالی بگذارید اما مقدار Y را تغییر دهید. در حال حاضر بیایید این را به 5 تنظیم کنیم. میتوانیم بعداً با این عدد بازی کنیم تا اثر بهتری برای هواپیما بیابیم.
در بالای بسته رفتار، یک رفتار شروع شده با لمس جدید اضافه کنید. این را به بسته پرش متصل کنید. اکنون میخواهیم این رفتار شروع شده با لمس به دکمهای که قبلاً ایجاد کردیم، واکنش نشان دهد. برای تغییر آن، خصوصیاتش را باز کرده و روی هواپیما ضربه بزنید تا به بوم بروید. لایه را به Button تغییر دهید و به داخل دکمه ضربه بزنید.
رفتارهای شما اکنون باید کمی شبیه به این باشند:
با این حال هنوز کارهای دیگری نیاز است انجام شود قبل از اینکه بتوانیم آزمایش کنیم. در ابتدا، باید بسته را فعال کنیم. بنابراین به دسته سفارشی بروید، سپس رفتار On را اضافه کنید و آن را به رفتار آغاز شده با لمس متصل کنید. خصوصیاتش را باز کرده و بر روی بخش انتخاب رفتار ضربه بزنید و بسته رفتار پرش را از لیست انتخاب کنید. بنابراین اکنون، وقتی ما برای اولین بار به دکمه ضربه میزنیم، بسته پرش فعال خواهد شد و تأثیر نیروی را بر روی هواپیما شروع خواهد کرد. البته، ما با مشکلاتی درباره رفتار شروع شده با لمسی که قبلاً ایجاد کردهایم، روبرو خواهیم شد. بیایید آن را اصلاح کنیم.
زیر اولین رفتار شروع شده با لمس، یک رفتار Off اضافه کنید (در زیر سفارشی) و آن را به همان رفتار شروع شده با لمس که میخواهید آن را غیرفعال کنید متصل کنید. این کار را انجام دهید، بنابراین اول هواپیما به یک جسم فیزیکی تبدیل میشود، سپس توانایی لمس هواپیما را غیرفعال ایجاد میکند. ما هنوز تمام نشدهایم. بعدا، باید یک پیام پخش کنیم تا نشان دهیم که بازی ما آغاز شده است. یک پیام پخش را اضافه کنید و آن را زیر رفتار Make Physics اضافه کنید. این اطمینان میدهد که پیام قبل از غیرفعال کردن رفتارها ارسال میشود. کلید رویداد را به Did Start تنظیم کنید.
سرانجام، ما میتوانیم آخرین رفتارها را اضافه کنیم. یک رفتار دریافت پیام را اضافه کنید، اما نیازی به متصل کردن آن به چیزی نیست. ما میخواهیم این کار خودش را انجام دهد. کلید رویداد را به Did Start تنظیم کنید. سپس یک رفتار On اضافه کرده و آن را به دریافت پیام متصل کنید. آن را به دومین رفتار شروع شده با لمس که ما ایجاد کردهایم، روشن کنید.
اما صبر کنید، ممکن است بپرسید، این رفتار هم اکنون روشن است! شما حق دارید! بیایید آن را خاموش کنیم. به این ترتیب ما دیگر با انبوه دکمهها که میتواند باعث ایجاد خطا شود، روبرو نخواهیم شد. با همهچیز گفته شده و انجام شده، رفتارهای هواپیمای شما باید به شکل زیر باشد:
بیایید آن را آزمایش کنیم. ممکن است متوجه شوید که هواپیما مانند سنگ میافتد و حتی پس از ضربه زدن هم نمیرود. خوب، این به خاطر این است که نیروهای پخش در خوشه Y با -25 کار میکند. اگر میخواهیم هواپیمای ما پرواز کند، باید بر جاذبه غلبه کنیم. خصوصیات پخش شدن را باز کنید و مقدار Y را به 50 و ضربکننده را به 5 تغییر دهید. این باید به هواپیمای ما برای ماندن در هوا کافی خدمت کند. مدتی وقت بگذارید تا اعداد را تنظیم کنید تا چیزی که حس خوبی دارد را پیدا کنید.
اضافه کردن موانع:
به مرحله بعدی بروید. ما باید موانع را برای این که بازیکن از آنها دوری کند، اضافه کنیم. در بازی ما، دو مانع اصلی وجود دارد. صخرهها و سقف. بله یک سقف. نه، ما این را در غار تنظیم نخواهیم کرد. دلیل این بسیار ساده است، بدون سقف بازیکن ممکن است به طور نظری فقط به طور دیوانهوار به صفحه ضربه بزند و هواپیما نه تنها از صفحه پرواز کند، بلکه به طور کامل هر مانع را دور بزند. این هیچوقت سرگرمکننده نیست، درست است؟
بیایید با سقف شروع کنیم چون ساده است. درست مانند زمین، ما از یک شیء خالی استفاده خواهیم کرد. مطمئن شوید که در لایه اصلی هستید و شیء خالی را اضافه کنید، سپس آن را ایجاد کرده و به عرض صفحه تنظیم کنید و آن را در طوری قرار دهید که کمی بالای بوم ما قرار گیرد. با این کار، هواپیما میتواند داخل فضای صفحه پرواز کند اما خواهد شکست وقتی که فراتر از این محدودیتها میرود. در خصوصیات شیء خالی، زیر دکمه رفتارها، سه تصویر را مشاهده خواهید کرد. یک سفینه فضایی، یک جعبه آجری و یک پرتره مناظر. این دکمهها تعیین میکنند که شیء خالی ما چه نوع شیئی خواهد بود. به ترتیب از چپ به راست، جسم فیزیکی، جسم دیواری و جسم مناظر.
اجسام فیزیکی، اجسامی هستند که تحت تأثیر فیزیک قرار میگیرند. ما این کار را نمیخواهیم. اجسام دیواری محکم هستند و برخورد دارند، اما نمیتوانند تحت تأثیر نیروهای خارجی قرار گیرند. اجسام مناظر هیچ برخوردی ندارند و نمیتوانند با هیچ چیز تعامل داشته باشند. به عنوان یک قاعده، هر شیئی که تنها برای دکور وجود داشته باشد باید به عنوان مناظر تنظیم شود تا حافظه را ذخیره کرده و عملکرد بازی بهتری داشته باشد.
شیء خالی را به جسم دیواری تنظیم کنید و به زیر آن دکمهها بروید و جایی که میگوید Passable، کلید را روشن کنید. این کار باعث میشود که جعبه فقط به زمین نیفتد بلکه هواپیما نیز میتواند از آن رد شود. به این ترتیب، هواپیما نمیتواند فقط به محض برخورد با جعبه متوقف شود، بلکه به آن اجازه میدهد که به طور مختصر از صفحه خارج شود تا ابتدا شروع به سقوط کند.
فقط به عنوان یک نکته خوب، با انتخاب شیء سقف هنوز انتخاب شده، بیایید آن را به سقف تغییر نام دهیم. در بالای منوی خصوصیات، جایی که میگوید خالی-# روی آن ضربه بزنید و تایپ کنید سقف. هرگز ضرری نخواهد داشت که سازماندهی کنید.
بعد، در حال حاضر ما میخواهیم به سقف خود یک برچسب اضافه کنیم. برچسبها راهی برای ارجاع به چندین شیء به طور همزمان به شرطی که آنها همان برچسب را به اشتراک بگذارند، هستند. مثلاً فرض کنید که شما یک کلید چراغ دارید و وقتی که استفاده میشود، چندین چراغ در یک صحنه را روشن میکند. با دادن همهٔ چراغها به عنوان همان برچسب، آنها میتوانند به طور یکجا ارجاع داده شوند و به طور همزمان روشن شوند. در مورد ما، ما میخواهیم که هواپیما بیفتد وقتی که با سقف و صخرهها برخورد میکند، بنابراین ما برچسبی به آن میدهیم تا این دلیل را ایجاد کند و به ما در صرفهجویی در وقت برای ساخت رفتارها کمک کند.
به شیء سقف خود که هنوز انتخاب شده است، نگاه کنید و منوی خصوصیات را باز کنید تا یک سری پنج دکمه ببینید. اولین دکمه باید غیر فعال باشد و پس از آن یک سفینه فضایی، چهار پیکان، تودهای از چهار خط و در آخر، برچسبهای قیمتی قرار داشته باشد. بر روی برچسبها ضربه بزنید تا پنجره برچسبها باز شود. در اینجا میتوانید برچسبهای موجود را جستجو کنید یا یک مورد جدید ایجاد کنید. در این مورد ما میخواهیم یک مورد جدید ایجاد کنیم. بر روی علامت + زده و نام آن Wall را وارد کنید و بر روی Ok ضربه بزنید. Wall اکنون باید در زیر جعبه جستجو با یک دایره سبز در سمت راست ظاهر شود. این دایره نشان میدهد که برچسب به شیء متصل است. اگر بخواهید برچسبها را تغییر دهید، به سادگی بر روی نام برچسب ضربه زده تا آن را حذف کنید.
حالا میخواهیم هواپیما دارای قابلیت برخورد با اشیائی باشد که به عنوان "Wall" برچسبگذاری شدهاند و هنگامی که این برخورد اتفاق میافتد، ورودی بازیکن غیر فعال شود. به این ترتیب، هواپیما به زمین خواهد افتاد و بازی به پایان خواهد رسید. برای انجام این کار، هواپیما را انتخاب کنید و به رفتارها بروید. در زیر اشیاء، «Collided» را انتخاب کنید و خصوصیات آن را باز کنید. اکنون، به جای اینکه بر روی انتخاب شیء ضربه بزنید و سقف خود را در بوم انتخاب کنید، در واقع میخواهیم به دنبال برچسب باشیم. برای انجام این کار، به پایین خصوصیات بروید، جایی که آیکون برچسب وجود دارد و آن را انتخاب کنید. این کار لیست برچسبها را نمایش میدهد. در حال حاضر، فقط یک مورد Wall داریم. آن را انتخاب کرده و سپس بر روی آیکون با سه دکمه افقی بر روی خطوط افقی ضربه بزنید تا دوباره به پنجره اصلی خصوصیات برگردید. حالا باید آیکون برچسب را در کادر انتخاب شیء مشاهده کنید.
با این کار، اکنون میتوانیم به سادگی یک رفتار Off از تب سفارشی اضافه کنیم و در خصوصیات آن، رفتار شروع شده با لمسی که کنترل بسته پرش ما را تغییر دهد، انتخاب کنید. این کار باعث میشود توانایی ما برای پرواز در هنگام برخورد با سقف غیر فعال شود. بیایید این را آزمایش کنیم. دکمه بازی را فشار دهید و بر روی صفحه ضربه بزنید تا هواپیما از محدوده پرواز کند. شما باید آن را ببینید که به زمین میافتد و صفحه پایان بازی بارگذاری میشود.
ممکن است از خود بپرسید "چرا هواپیما تنها به بالا و پایین میرود؟ چگونه میتوانیم از میان چیزها پرواز کنیم اگر نمیتواند به جلو برود؟" خوب، این بسیار ساده است. ما دنیا را به سمت هواپیما حرکت خواهیم داد. اگر این به نظرتان عجیب میآید، نگران نباشید، زمانی که در حال بازی است دیگر متوجه نمیشوید.
حالا زمان اضافه کردن صخرهها است. به مرورگر داراییها برگردید و به پایین بروید تا صخرههای خود را پیدا کنید. نسخههای مختلفی وجود دارد، بنابراین به سادگی مورد مورد نظر خود را انتخاب کنید. من از یک سنگ پایه برای این آموزش استفاده میکنم.
صخره را بر روی بوم خود بکشید و سپس آن را به سمت راست حرکت دهید تا قابل مشاهده نباشد. حالا آن را به یک جسم دیواری قابل عبور تبدیل کنید. حالا میخواهیم نقطه لنگر را تغییر دهیم. نقطه لنگر، جایی است که hyperpad فرض میکند موقعیت مرکز جسم است. بنابراین هنگامی که محاسبات موقعیت را انجام میدهد به نقطه لنگر ارجاع میدهد نه به مرکز واقعی.
برای تغییر آن، ما باید خصوصیات تبدیل را باز کنیم. در پایین پنجره خصوصیات، چهار پیکان را برای باز کردن گزینههای تبدیل انتخاب کنید. نقطه لنگر را پیدا کنید و آن را قفل کنید. اکنون شما باید ببینید که یک لنگر آبی در صخره ظاهر میشود. آن را بزنید و بکشید و به عنوان نزدیک به نوک بالای صخره بگذارید. بعد از اینکه این کار تمام شد، دوباره قفل کنید.
اکنون نیاز داریم صخره به سمت بازیکن حرکت کند. رفتار Set Velocity را در زیر فیزیک اضافه کنید. سرعت Y را به 0 و X را به -2 تنظیم کنید. این کار باعث میشود صخره به آرامی به سمت چپ حرکت کند. به عنوان یک نکته سریع، برای محور X، مقادیر منفی باعث حرکت اشیاء به سمت چپ و مقادیر مثبت به سمت راست میشود. همین مسئله برای محور Y نیز صدق میکند که مقادیر منفی به سمت پایین میروند و مثبت به سمت بالا میروند.
این سرعت با این حال، بسیار کند است و ممکن است همیشه باعث خستگی شود که مجدداً به رفتارهای صخره برویم و مقدار را تنظیم کنیم. به جای آن، میتوانیم از چیزی به نام ویژگی برای تسهیل این کار استفاده کنیم. بیایید به برچسب Logic در بازی برویم و خصوصیات آن را باز کنیم. به یاد دارید آن آیکون در پایین بود که چهار خط بر روی هم قرار داشت؟ روی آن ضربه بزنید و پنجره ویژگیها را باز کنید. ویژگیها در ایجاد خود به برچسبها مشابه هستند، بنابراین بیایید یک مورد جدید ایجاد کنیم و آن را با نام Speed وارد کنیم.
شما احتمالاً متوجه میشوید که بر خلاف برچسبها، زیر ویژگی جدید ما یک جعبه ورودی وجود دارد. میتوانیم از این باکس برای وارد کردن مقادیری که دیگر اشیاء میتوانند به آن ارجاع دهند، استفاده کنیم. در حال حاضر، بیایید سرعت را به 5 تنظیم کنیم. اکنون میتوانیم به رفتارهای صخرهها بازگردیم و یک رفتار Get Attribute در زیر اشیاء اضافه کنیم.
خصوصیات رفتار Get Attributes را باز کنید و بر روی نماد صخره که ظاهر میشود ضربه بزنید. در بوم، برچسب Logic را انتخاب کرده و زیر ویژگی کلید نوع مشخص شده، به پیشفرض تنظیم کنید و سرعت را برای وارد کردن جعبه انتخاب کنید.
حالا ما باید مطمئن شویم که صخره به سمت چپ حرکت میکند. به یاد دارید که گفتم مقادیر مثبت بر روی محور X به سمت راست میروند؟ خوب، ما این را تغییر خواهیم داد. به تب منطق رفته و رفتار Multiply Values را انتخاب کنید. آن را به رفتار Get Attribute متصل کنید و خصوصیات آن را باز کنید. اکنون دو جعبه ورودی خواهید دید. جعبه اول مقدار ما خواهد بود و دومی است که آن را ضرب خواهیم کرد. توجه داشته باشید که وقتی Multiply Values انتخاب شده است، برخی رفتارها با دایرههای سبز کوچک کنارشان ظاهر میشوند؟ این بدین معنی است که ما میتوانیم از آنها در جعبههای ورودی استفاده کنیم. برای انجام این کار، به سادگی بر روی دایره موجود در رفتار Get Attribute ضربه بزنید و آن را در اولین جعبه ورودی در خواص Multiply Values قرار دهید. (برای آشنایی بیشتر به مستندات اشتراک گذاری مقادیر مراجعه کنید).
بعد، در جعبه دوم، عدد -1 را وارد کنید. بنابراین اکنون ما با سرعت 5 را با مقدار 5 ضرب میکنیم که برابر با -5 است. اکنون این صخره باید اکنون به سمت چپ 5 متر حرکت کند. خوب، در حال حاضر، به زودی، به رفتار Velocity بروید و جایی که عدد -2 را نوشتیم، آن را با خروجی ناشی از Multiply Values جایگزین کنید. مقدار Y را 0 بگذارید.
بازی را آزمایش کنید و ببینید که صخره در صفحه شما حرکت میکند. اکنون صخره با سرعت مناسبی حرکت میکند، با این حال میتوانید هر زمان که میخواهید آن را به سرعت در برچسب بازی تغییر دهید. این به مراتب در مقایسه با ورود به رفتارهای صخره، سریعتر است؟
توجه داشته باشید که هواپیما نیز به سادگی از صخره عبور میکند؟ این به این دلیل است که ما آن را به عنوان قابل عبور تنظیم کردهایم. میخواهیم این کار را به همین ترتیب بگذاریم، اما همچنان میتوانیم هواپیما را به آن برخورد دهیم. همهچیزهایی که نیاز داریم این است که برچسب Wall را به کار ببریم. خصوصیات صخره را باز کنید و به برچسبها بروید. Wall را انتخاب کنید و بازی را آزمایش کنید. اطمینان حاصل کنید که به صخرهها برخورد میکنید.
چیز عجیبی اتفاق افتاد، درست است؟ هواپیما به طور غیرقابل کنترل شروع به سقوط کرد قبل از اینکه حتی به صخره برسد. این به این دلیل است که جعبه برخورد صخره به درستی تنظیم نشده است. به طور پیشفرض، برخورد یک شی به همان ابعاد جعبه محصور آن تنظیم میشود (منطقهای که میتوانید ببینید تا انتخاب کنید). جعبه محصور با حداکثر عرض و ارتفاع گرافیک جسم مشخص میشود. بنابراین، با توجه به شکل، جعبه محصور و بنابراین برخورد، به منظور دربرگیری کل جسم به صورت یک جعبه کشیده خواهد شد.
چگونه میتوانیم این را تعمیر کنیم؟ ساده.
hyperPad یک ویرایشگر برخورد ساختهشده دارد که به ما اجازه میدهد تا به راحتی برخورد یک شیء را اصلاح کنیم. برای دسترسی به آن، خصوصیات صخره را باز کرده و در سمت چپ خصیصهها، باید ببیند که پنجره کوچکی که شامل 3 گزینه است. دو فلش رو به یکدیگر، دو جعبه ای که در هم چیده شدهاند و یک سطل زباله.
ما گزینه اول را میخواهیم. بر روی آن ضربه بزنید تا ویرایشگر برخورد باز شود.
به طور لحظهای، شما ابزارهای متعددی را در نوار کناری خواهید دید. دو مورد اول برای ناوبری و حرکت هستند. با انتخاب فلش، میتوانیم به راحتی برخورد صخره را با کشیدن جعبه مانند شیء ویرایش کنیم. با این حال، شما ممکن است متوجه شوید که یک جعبه ممکن است بهترین شکل نباشد اگر بخواهیم برخورد به دقت زیادی انجام گیرد.
سه ابزار بعدی میتوانند در اینجا به ما کمک کنند. دو مورد اول، کروی و مربع، میتوانند جعبه محصور را به شکل مربوطه تغییر دهند. ابزار سوم، که به شکل یک شکل چند ضلعی عجیب است، به ما اجازه میدهد تا با ساده فشار انگشت خود و اتصال نقاط، جعبههای برخورد سفارشی بسازیم. بیایید از این یکی استفاده کنیم.
ابزار را انتخاب کنید و بر روی نوک صخره ضربه بزنید. شما باید ببینید که برخورد قدیمی ناپدید شده و یک نقطه سبز کوچک ظاهر میشود. حالا از گوشهٔ پایین چپ صخره، برای ایجاد دومین نقطه که با خطی سیاه متصل است، ضربه بزنید. این کار را برای گوشهٔ پایین راست مجدداً انجام دهید و در نهایت به نقطهٔ اصلی متصل کنید. اشکالی ندارد اگر دقت کاملی نداشته باشید، ما میتوانیم این را به راحتی اصلاح کنیم. به سادگی بر روی ابزار فلش ضربه بزنید و اکنون میتوانید نقاط خود را بکشید تا بهتر با صخره وفق پیدا کنید. در پایان، شما باید چیزی شبیه به این داشته باشید:
نهایتاً، بر روی علامت تیک ضربه بزنید تا این تغییرات را ذخیره کنید. اگر اشتباهی کردهاید، تنها کافیست از ابزار پاککن استفاده کنید، یا تنها بر روی X ضربه بزنید تا همه تغییرات را لغو کرده و مجدداً امتحان کنید. پس از این تمام تغییرات انجام شد، بازی خود را دوباره آزمایش کنید. هواپیما اکنون باید با برخورد با صخره به درستی سقوط کند.
حال، هنوز هم این یک کمی آسان است. تنها یک صخره وجود دارد و موقعیت آن همیشه یکسان است. باید وضعیت را کمی پنهان کنیم! بنابراین برنامه ما این است که موقعیت صخره را در محور Y به صورت تصادفی با هنگام اسپاون و منطق بازی را کنترل کند. حرکت به وسیله خود صخره کنترل میشود. اینجا است که درس زودتر در مورد تفکیک منطق واقعاً به عمل میآید.
برای آغاز، بیایید به لیست ویژگیهای Logic بازی خود بازگردیم و یک ویژگی جدید به نام موقعیت کف صخره ایجاد کنیم.
حال، وارد رفتارهای منطق بازی شوید و یک رفتار بسته رفتار جدید ایجاد کنید. آن را Calculate Positions نامگذاری کنید. اکنون باید به تب منطق رفته و رفتار Random Number را بردارید. خصوصیات آن را باز کنید و متغیرها را به 4 و 14 تنظیم کنید. آن را به بسته Calculate Positions متصل کنید.

