آموزش بازی سازی : توقف بازی یا pause در انجین گودو

با یک آموزش دیگه از بازی سازی با انجین گودو در خدمت شما هستم. در این آموزش یاد میگیریم که چطور بازی رو با یک دکمه پاز یا متوقف کنیم و از حالت پاز خارج کنیم.

توی این پروژه یک آبجکت ساده داریم که از نوع rigidbody2 هست و جاذبه روی اون تاثیر میذاره. آیتم بعدی یک Button ئه که بازدن اون بازی متوقف میشه و دوباره به جریان میفته و روی افتادن اون آبجکت میتونید نتیجه رو ببینید. این کار توی بازی سازی خیلی ضروریه.( برای این آموزش از انجین گودو ورژن 4.2.2 ‌استفاده میکنم. ولی ورژن های بالای ۴ نباید تفاوت مهمی داشته باشن).

اگر آموزش های قبلی رو ندیدید توصیه میکنم از این جا ببینید. اگر میخواید اول نتیجه آموزش پاز کردن صحنه رو ببینید، یه سر به آخر صفحه بزنید و برگردید.

ایجاد پروژه

یک پروژه جدید ایجاد کنید. یک صحنه دوبعدی بسازید و در اون یک آبجکت از نوع Rigidbody2d با نودهای sprite2d و collisionshape2d در زیرمجموعه است. ریجید بادی نودیه که جاذبه روی اون تاثیر میذاره و برای بازی های فیزیکی مثل پازل های فیزیکی و … کاربرد داره. البته انواع دیگه ای از فیزیک بادی هم هست که هر کدوم کاربرد خاصی دارن. من صرفا جهت آموزش این نود رو انتخاب کردم. ریجید بادی به یک collisionshape نیاز داره تا بتونه برخوردها رو مدیریت کنه و خطایی پیش نیاد. در نتیجه من یک collisionshape2d و یک sprite2d‌اضافه کردم که بتونیم نتیجه رو ببینیم. تصویر پروژه به این صورته:

ساختار پروژه

در سمت راست تصویر، من gravity scale رو کمی کاهش دادم تا افتادن آبجکت فیزیکی کندتر اتفاق بیفته و بتونیم نتیجه رو بهتر ببینیم. این کار ضروری نیست. نود دیگه ای که باید به صحنه اضافه کنیم یک Button ئه. روی این دکمه علامت پاز یا II‌ قرار دادم. الان صحنه آمادست و میتونیم ادامه بدیم.

پاز کردن صفحه در گودو چطور اتفاق میفته؟

در انجین بازی سازی گودو وقتی میخوایم یه صحنه رو متوقف کنیم از متغیر paused که مربوط به get_tree یعنی درخت سلسله مراتب صحنه است و حالت true و false‌ داره استفاده میکنیم. یعنی وقتی صحنه را پاز میکنیم، در حالت عادی تمام اجزا و نودهای صحنه پاز یا متوقف میشن. فرض کنید یک دکمه پاز دارید. وقتی صحنه رو پاز کنید، خود دکمه پاز هم متوقف میشه و دیگه قابل کلیک کردن نیست. برای این مشکل باید کاری کنیم. این جاست که باید بگم توی انجین گودو هر نودی یک ویژگی داره به اسم process که تعیین میکنه در حالت پاز چه رفتاری داشته باشه. در حالت پیشفرض همه نودها حالت inherit هستن. این یعنی با پاز کردن بازی، اون ها متوقف میشن.

دکمه پاز نباید پاز بشه

در ادامه آموزش پاز کردن صحنه، کاری که ما باید کنیم اینه که حالت process دکمه خودمون رو به always (یا همیشه) تعییر بدیم. معنیش اینه که اگر بازی پاز شد، این نود همچنان پردازش بشه ( برای این که ما بتونیم دوباره روش کلیک کنیم و بازی رو از حالت پاز دربیاریم).

ویژگی process رو برای Button روی always قرار بدید.

الان اگر بازی رو پلی کنید،‌یک آبجت در حال افتادن میبینید. ما میخوایم با دکمه پاز صحنه رو متوقف کنیم و دوباره به جریان بندازیم.

وقت کدنویسی

الان باید سیگنال pressed از Button رو به اسکریپت نود اصلی وصل کنیم. در فانکشنی که ایجاد میشه باید این خط کد رو اضافه کنیم:

func _on_pause_btn_pressed():
get_tree().paused = !get_tree().paused

در توضیح کد باید بگم که با زدن دکمه ویژگی paused‌ صحنه بین حالت متوقف و اجراشدن نوسان میکنه. یعنی اگر پاز باشه پلی میشه و اگر در حال اجرا باشه پاز میشه.

چیز زیادی باقی نمونده. نتیجه رو ببینید:

نتیجه نهایی

امیدوارم آموزش پاز کردن صحنه براتون مفید باشه. موفق باشید.

دیدگاه‌ خود را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

پیمایش به بالا