مفاهیمی که در این مطلب پوشش داده میشن:

  • معرفی نود button
  • نحوه ایجاد و اتصال یک اسکریپت به یک نود
  • نحوه ایجاد یه سیگنال و اتصال به یک نود دیگر

سیگنال‌ها در انجین گودو مفهوم و ابزار مهمی هستن. حتی انجین‌های دیگه بازی سازی و حتی نرم‌افزارهای دیگه برنامه نویسی هم به نوعی از سیگنال‌ها استفاده میکنن. فقط اسم‌های متفاوتی دارن.سیگنال‌ها اونقدر در ساخت بازی مهم هستند که تقریبا میشه مطمئن بود هیچ بازی ای ساخته نمیشه مگه اینکه در اون از سیگنال‌ها استفاده بشه. حالا این سیگنال چی هست؟! من سعی میکنم در این مطلب مفهوم اون رو جا بندازم و با یه مثال ساده روش استفاده از اون رو بهتون نشون بدم.

سیگنال در گودو، نوعی پیامه که از یک بخش به بخش دیگه ارسال میشه و وقوع یه رویداد رو اطلاع میده. سیگنال ها به رویدادها مرتبط هستن. برای مثال، وقتی وقتی یه تایمر، زمانش به آخر میرسه یا وقتی یه دکمه فشرده میشه یه رویداد رخ داده یا یه اتفاق افتاده. توی گودو هر نود دارای چند سیگنال پیشفرضه که هر کدوم یه اتفاق رو درباره اون نود مخابره میکنن به نود دیگه، هر نودی که شما بخواید. در واقع سیگنال‌ها یه فرستنده دارن و یه گیرنده. در آینده وقتی کاملا با سیگنال‌ها آشنا شدید، خواهید دید که قابلیت‌های خیلی زیادی دارن و تقریبا هر رویدادی، حتی تغییر یه متغیر میتونه یه سیگنال باشه. 

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

حالا شروع کنیم. یه پروژه گودو ایجاد کنید. قبلا یاد گرفتید. و یه نود دوبعدی و یه صحنه دوبعدی ایجاد کنید. روی node2D کلیک راست و گزینه add child node رو انتخاب کنید. از میون نودها Button رو انتخاب کنید. button یه دکمه سادست که معمولا یه متن روش داره.

بیاید نگاهی به سیگنال‌های button بندازیم. در سمت راست برنامه گودو یه تب به اسم node هست و زیر مجموعه اون یه تب دیگه به اسم signals. (یه تب دیگه به اسم group هم هست که بعدا توضیح میدم). از سمت چپ تصویر توی تب scene، button رو انتخاب کنید و بعد سمت راست، از تب نود، signal رو انتخاب کنید.

می‌بینید که دکمه یا button تعدادی سیگنال داره، وقتی دکمه پایینه، وقتی دکمه بالاست، وقتی دکمه فشرده شده، وقتی دکمه رها شده و ...

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

وقتی روی نود در تب scene کلیک میکنیم، بالای تب یه دکمه با یه اضافه سبز ظاهر میشه. کار این دکمه اضافه کردن و اتصال یه اسکریپت به نود انتخاب شدست. روی اون دکمه کلیک کنید:

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

دقت کنید که الان کنار node2D ما در تب scene، یه آیکون طومار یا کاغذ ظاهر شد. این یعنی نود مورد نظر دارای اسکریپت است. حالا وقتشه که سیگنال button رو به node2D وصل کنیم( یا از button به node2d یه پیام مخابره کنیم).

همون طور که بهتون نشون دادم button  رو انتخاب کنید. به بخش سیگنالها برید. سیگنال ()pressed رو انتخاب کنید و روی اون دابل کلیک کنید. یه پنجره باز میشه که اونجا باید نود Node2D  رو انتخاب کنید و دکمه connect رو کلیک کنید.

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

حالا توجهتونو به این قسمت جلب میکنم. یه صفحه برای شما باز میشه که اسکریپت مربوط به نود Node2D ست و یه تابع یا فانکشن توش هست به اسم

func _on_button_pressed():
	pass #replace with function body.

 

میخوام به چند چیز دقت کنید. بالای صفحه از تب 2D به script جابجا شدیم. وارد محیط اسکریپت نویسی شدیم و اسکریپت نود Node2D برامون باز شده.توی اون قسمت کد که هایلایت کردم کدی رو مینویسید که وقتی روی دکمه button کلیک میکنید میخواید اجرا بشه. 

خوب الان در آستانه شروع کدنویسی هستیم.در مطالب آینده نکته هایی در باره کدنویسی گودو بهتون خوام گفت. 

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