مهمان گرامی، خوش‌آمدید!
شما قبل از این که بتوانید در این انجمن مطلبی ارسال کنید باید ثبت نام کنید.

نام کاربری
  

گذرواژه‌
  





جستجوی انجمن‌ها



(جستجوی پیشرفته)

آمار انجمن
» اعضا: 1
» آخرین عضو: MohsenElRod
» موضوعات انجمن: 5
» ارسال‌های انجمن: 5

آمار کامل

کاربران آنلاین
در حال حاضر 1 کاربر آنلاین وجود دارد
» 0 عضو | 1 مهمان

آخرین موضوع‌ها
آموزش گودات بر اساس کتاب ...
انجمن: موتور بازی سازی گودات
آخرین ارسال توسط: MohsenElRod
12-15-2020, 04:06 PM
» پاسخ: 0
» بازدید: 57
آموزش گودات بر اساس کتاب ...
انجمن: موتور بازی سازی گودات
آخرین ارسال توسط: MohsenElRod
12-15-2020, 04:04 PM
» پاسخ: 0
» بازدید: 41
آموزش گودات بر اساس کتاب ...
انجمن: موتور بازی سازی گودات
آخرین ارسال توسط: MohsenElRod
12-15-2020, 04:01 PM
» پاسخ: 0
» بازدید: 41
آموزش گودات بر اساس کتاب ...
انجمن: موتور بازی سازی گودات
آخرین ارسال توسط: MohsenElRod
12-15-2020, 03:57 PM
» پاسخ: 0
» بازدید: 37
آموزش گودات بر اساس کتاب ...
انجمن: موتور بازی سازی گودات
آخرین ارسال توسط: MohsenElRod
12-15-2020, 03:12 PM
» پاسخ: 0
» بازدید: 41

 
  آموزش گودات بر اساس کتاب گودات در 24 ساعت-بخش های 4 تا 24 - خرید
ارسال کننده: MohsenElRod - 12-15-2020, 04:06 PM - انجمن: موتور بازی سازی گودات - بدون پاسخ

خرید و دانلود کتاب آموزش گودات
خرید و دانلود کتاب آموزش گودات :
کتاب آموزش موتور بازی سازی گودات (که بعضی آن را گودوت می نویسند) ترجمه ای است از کتابی که
ذر سایت رسمی این موتور بازی سازی معرفی شده است
کتاب مذکور که نوشته کتسون و هرزوگ است Godot Engine Game Development in 24 Hours نام دارد و تصویر آن را مشاهده می کنید
[تصویر:  820-Godot%20Engine%20Game%20Development%...0Hours.jpg]
کتاب گفته شده به فارسی ترجمه شده و به راحتی در دسترس شماست
می توانید فصل های مختلف کتاب را از اینجا مجانی(فصل های 1 و 2و 3) دانلود کنید یا آن ها را خریداری کنید(فصل های 4 تا 25)
فهرست این کتاب مطالب زیر را پوشش می دهد:
Hour 1. Introducing the Godot Engine – فصل 1: مقدمه ای بر موتور گودات — مطالعه فصل به صورت رایگان– دانلود رایگان  فصل نخست کتاب آموزش گودات
Hour 2. Scene System – فصل 2: سیستم صحنه — مطالعه رایگان فصل دوم – دانلود فصل دوم کتاب آموزش گودات رایگان
HOUR 3. 2D Graphics – فصل3: گرافیک دو بعدی — مطالعه رایگان فصل سوم – دانلود رایگان فصل سوم کتاب آموزش گودوت
Hour 4. Scripting – فصل4: کد نویسی — خرید فصل4 کتاب آموزش گودات به مبلغ 1000 تومان
Hour 5. Game 1: Space Shooter – فصل5: تیر انداز فضایی– خرید فصل5 کتاب آموزش گودات به مبلغ 1000 تومان
Hour 6. More Scripting – فصل6: کدنویسی بیشتر– خرید فصل6 کتاب آموزش گودات به مبلغ 1000 تومان
Hour 7. Handling Input – فصل7: مدیریت ورودی گودات– خرید فصل7 کتاب آموزش گودات به مبلغ 1000 تومان
Hour 8. Physics System – فصل8: سیستم فیزیک گودات– خرید فصل8 کتاب آموزش گودات به مبلغ 1000 تومان
Hour 9. User Interface – فصل9: رابط کاربری– خرید فصل9 کتاب آموزش گودات به مبلغ 1000 تومان – به زودی
Hour 10. Animation – فصل10: انیمیشن– خرید فصل10 کتاب آموزش گودات به مبلغ 1000 تومان – به زودی
Hour 11. Game Flow – فصل11: جریان بازی– خرید فصل11 کتاب آموزش گودات به مبلغ 1000 تومان – به زودی
Hour 12. File System – فصل12: فایل سیستم– خرید فصل12 کتاب آموزش گودات به مبلغ 1000 تومان – به زودی
Hour 13. 3D Graphics – فصل13: گرافیک سه بعدی– خرید فصل13 کتاب آموزش گودات به مبلغ 1000 تومان – به زودی
Hour 14. Project Management – فصل14: مدیریت پروژه– خرید فصل14 کتاب آموزش گودات به مبلغ 1000 تومان – به زودی
Hour 15. Materials and Shaders – فصل15: ماتریال و شیدر– خرید فصل15 کتاب آموزش گودات به مبلغ 1000 تومان – به زودی
Hour 16. Lights and Shadows – فصل16: نور و سایه– خرید فصل16 کتاب آموزش گودات به مبلغ 1000 تومان – به زودی
Hour 17. Game 2: Bloxorz Clone – فصل 17:شبیه سازی بازی بلاکسرز– خرید فصل17 کتاب آموزش گودات به مبلغ 1000 تومان – به زودی
Hour 18. Environments – فصل18: محیط بازی– خرید فصل18 کتاب آموزش گودات به مبلغ 1000 تومان – به زودی
Hour 19. Sound – فصل19: صدا– خرید فصل19 کتاب آموزش گودات به مبلغ 1000 تومان – به زودی
Hour 20. Particle System – فصل20: سیستم ذرات(افکت های تصویری نظیر انفجار، مه، دود، غبار، جرقه و …)– خرید فصل20 کتاب آموزش گودات به مبلغ 1000 تومان – به زودی
Hour 21. Viewports and Canvas – فصل21:ویوپورت و بوم– خرید فصل21 کتاب آموزش گودات به مبلغ 1000 تومان
Hour 22. Networking – فصل22:شبکه– خرید فصل22 کتاب آموزش گودات به مبلغ 1000 تومان – به زودی
Hour 23. Game 3: Networked Bomberman Clone – فصل23:شبیه سازی بازی bomberman شبکه– خرید فصل23 کتاب آموزش گودات به مبلغ 1000 تومان – به زودی
Hour 24. Exporting the Project – فصل24:خروجی گرفتن از پروژه– خرید فصل24 کتاب آموزش گودات به مبلغ 1000 تومان – به زودی
Hour 25. Native Code – فصل25:کد بومی– خرید فصل25 کتاب آموزش گودات به مبلغ 1000 تومان – به زودی
 منبع: گودشاپز


  آموزش گودات بر اساس کتاب گودات در 24 ساعت-بخش 3-قسمت 2
ارسال کننده: MohsenElRod - 12-15-2020, 04:04 PM - انجمن: موتور بازی سازی گودات - بدون پاسخ

تمرین

[b]ساختن یک پس زمینه چند لایه لغزان (پارالاکس)[/b]
این جلوه را وقتی در عمل ببینید بیشتر برایتان جذابیت دارد. مراحل زیر را دنبال کنید تا پارالاکس خودتان را بسازید.
  1. یک پروژه جدید بسازید تصویر های پس زمینه، سفینه فضایی و ستاره ها را در پروژه کپی کنید.


  2. یک صحنه جدید بسازید و یک گره[تصویر:  word-image-46.jpeg] Node2D به عنوان ریشه در صحنه قرار دهید.


  3. صحنه را با نام [b]parallax-background.tscn[/b] ذخیره کنید.


  4. یک اسپرایت [تصویر:  word-image-47.jpeg]به عنوان فرزند گره ریشه در صحنه بگذارید و نام آن را به ship(سفینه/کشتی) تغییر دهید.


  5. نگاره اسپرایت (تکستچر آن) را تصویر سفینه فضایی قرار دهید.


  6. یک گره دوربین دوبعدی[تصویر:  word-image-48.jpeg] [b]Camera2D[/b]  به عنوان فرزند سفینه در درخت صحنه قرار دهید و با استفاده از کادر نظارت آن را Current(دوربین اصلی / فعال) قرار دهید.


  7. یک گره [تصویر:  word-image-49.jpeg][b]ParallaxBackground[/b]  به عنوان فرزند گره ریشه در صحنه بگذارید.


  8. یک گره[تصویر:  word-image-50.jpeg] [b]ParallaxLayer[/b]  به عنوان فرزند گره پیشین در درخت صحنه بگذارید. مشخصه Scale آن را (0.2, 0.2) قرار دهید. این عقبی ترین لایه ما خواهد بود.


  9. یک اسپرایت[تصویر:  word-image-51.jpeg] به عنوان فرزند این لایه اضافه کنید و تصویر پس زمینه را به عنوان مقدار نگاره آن قرار دهید. تصویر را بکشید تا به اندازه تصویر اصلی(ویوپورت) بزرگ شود.


  10. یک ستاره کوچک به عنوان اسپرایت به پروژه اضافه کنید. سپس لایه پس زمینه را انتخاب کنید. حالا آن اسپرایت ستاره را از کادر فایل سیستم بگیرید و به ویو پورت بکشید. چند بار این کار را تکرار کنید به این شکل ستاره ها در درخت صحنه به عنوان اسپرایت هایی که زیر مجموعه و فرزند گره انتخاب شده (پس زمینه هستند) به صحنه اضافه خواهند شد.


  11. یک لایه پارالاکس ([b]ParallaxLayer[/b]  [تصویر:  word-image-52.jpeg]) دیگر به عنوان فرزند گره ParallaxBackground به صحنه اضافخ کنید و Scale آن را (0.5, 0.5) قرار دهید. این لایه نزدیک تر است و سریعتر حرکت می کند.


  12. ستاره هایی بزرگتر به عنوان فرزندان این لایه دوم به صحنه اضافه کنید.


  13. به گره Ship یک اسکریپ اضافه کنید و کد زیر را به آن اضافه کنید.
[b]کد حرکت سفینه فضایی[/b]
extends Sprite
export var speed = 500
func _process(delta):
var direction = Vector2()
if Input.is_action_pressed(“ui_left”):
direction.x = -1.0
elif Input.is_action_pressed(“ui_right”):
direction.x = 1.0
if Input.is_action_pressed(“ui_up”):
direction.y = -1.0
elif Input.is_action_pressed(“ui_down”):
direction.y = 1.0
var velocity = direction * speed * delta;
position += velocity
  1. صحنه را ذخیره کنید و آن را اجرا کنید. حالا می توانید سفینه را با دکمه های جهت کیبرد یا دکمه های جهت دسته بازی حرکت دهید. جلوه یا اِفِکت پارالاکس باید با حرکت سفینه قابل مشاهده باشد.
خلاصه
در این بخش دانش زیادی درباره گرافیک های دوبعدی آموختید، دانش عمومی نه فقط درباره گودات.
آموختید که چگونه نمایه ها (اسپرایت ها) کار می کنند و گره ها با چه ترتیبی ترسیم می شوند. مشاهده کردید که بردار ها و ماتریس ها به چه کار می آیند و چگونه با مختصات مکانی ابعادی اشیاء کار می کنند. و نیز آموختید که چگونه از دوربین های دوبعدی، نقشه های کاشه ای و جلوه پارالاکس استفاده کنید.
تمرین
  1. یک صحنه جدید بسازید و یک نمایه را به عنوان گره ریشه آن قرار دهید و یک تصویر را به عنوان نگاره آن قرار دهید.


  2. نمایه دیگری به عنوان فرزند نمایه پیشین بسازید و نگاره آن را مقدار دهی کنید و آن را از جایی که در آن قرار گرفته حرکت دهید.


  3. گره ریشه را به اطراف حرکت دهید و حرکت گره فرزند را مشاهده کنید.


  4. یک گره [تصویر:  word-image-53.jpeg][b]RemoteTransform2D[/b]  به عنوان فرزند گره ریشه قرار دهید و مقدار مشخصه [b]Remote Path[/b]  را برابر با فرزند دیگر گره ریشه(نمایه دیگر) قرار دهید.


  5. گره RemoteTransform2D را به اطراف حرکت دهید(با استفاده از ابزار[تصویر:  word-image-54.jpeg] [b]Move[/b] ). مشاهده کنید که چگونه اسپرایت مورد نظر برای تعقیب این گره به حرکت در می آید.


  6. صحنه را ذخیره و اجرا کنید و نتیجه را مشاهده کنید.
گودوت


  آموزش گودات بر اساس کتاب گودات در 24 ساعت-بخش 3
ارسال کننده: MohsenElRod - 12-15-2020, 04:01 PM - انجمن: موتور بازی سازی گودات - بدون پاسخ

بسم الله الرحمن الرحیم

آموزش موتور بازی سازی گودات – بخش سوم – گرافیک
[b]در این بخش چه خواهیم آموخت[/b]
  • ویژگی های گرافیک دو بعدی در گودات
    انجام عملیات های ریاضی برداری ساده
  • استفاده از دوربین های دو بعدی
  • ساختن یک تایل مپ با تایل ست[ساختن محیط مرحله با مجموعه کاشی های گرافیکی]
  • ساختن زمینه پارالاکس(خزنده – توضیح آن داده خواهد شد)
موتو گودات ابزارهای خاص کار روی بازی های دو بعدی دارد. بسیاری از موتورهای بازی سازی از یک روش برای بازی های دو بعدی و سه بعدی استفاده می کنند و این در حالی است که برهی از مفاهیم و موضوعات دو بعدی در سه بعدی و بالعکس وجود ندارد. ساز و کار های دو بعدی و سه بعدی از همین گونه مفاهیم هستند. در بازی سه بعدی شما یک جهان سه بعدی برای کاوش دارید و موقعیت اشیاء در این جهان مهم است در حالیکه در بازی دو بعدی شما تنها و تنها صفحه نمایش را دارید و رویش کار می کنید.
در این بخش شما یاد می گیرید که چطور با گرافیک های دوبعدی کار کنید و یاد می گیرید که چگونه گودات با صفحه نمایش کار می کند. شما با ابزارهای خاص ساختن بازی های دوبعدی آشنا می شوید و یاد می گیرید که چگونه کار می کنند، و این که چطور از آن ها استفاده کنید.
اسپرایت ها و نحوه و ترتیب ترسیم آن ها روی صحنه
اساس یک بازی دو بعدی اسپرایت است، بیایید از اینجا به بعد اسپرایت را نمایه بنامیم. نمایه یا اسپرایت را به سادگی می توان یک تصویر دانست که می تواند هر جایی در صفحه نمایشی که در اختیار بازی است ترسیم شود. یک اسپرایت را می توان بزرگ و کوچک نمود(SCALE کرد) آن را چرخاند(ROTATE داد) و برعکس کرد(FLIP کرد) و به این شکل افکت های تصویری مختلفی را ایجاد کرد. قبل از شروع استفاده از اسپرایت ها ابتدا تصویر اصلی (ViewPort) را معرفی می کنیم، که جایی است که اسپرایت ها در آن ترسیم خواهند شد.
مختصات تصویر اصلی (Viewport Coordinates)
این تصویر اصلی با تصویر اصلی که در محیط ویرایشگر هست و از آن گفتیم تفاوت هایی دارد، چرا که ما اکنون درباره نحوه دیده شدن بازی در زمان اجرا می گوییم. شما می توانید تصویر اصلی یا ویو پورت را به مانند یک صفحه دکارتی(ریاضیات دکارتی با مختصات x,y من هم چیز زیادی یادم نمانده هر جا لازم باشد توضیح بیشتری خواهیم داد) که موقعیت مبدا آن، یعنی نقطه (0,0) در گوشه بالا چپ تصویر است. Y به سمت پایین تصویر مثبت می شود و به سمت بالا منفی. X هم به سمت راست تصویر مثبت است و به سمت چپ تصویر منفی. اگر در بازی که عرضه می شود به کاربر اجازه داده شود که پنجره بازی را کوچک و بزرگ کند این سیستم مختصات هم به همان اندازه بزرگ و کوچک خواهد شد.
 
[تصویر:  word-image.png]
سیستم مختصات دوبعدی گودات
ترتیب ترسیم شدن نمایه ها در صحنه نمایش در گودات
گره ها به ترتیبی که در درخت صحنه دارند ترسیم خواهند شد. یعنی گره های بالاتر در سلسله مراتب درخت زودتر ترسیم می شوند به همین علت هم در صحنه نمایش پشت سر گره هایی که در سلسله مراتب پایین تر هستند قرار می گیرند. این ترتیب بر عکس لایه هاست که معمولا لایه های بالاتر جلوتر از بقیه نشان داده می شوند مثل فتوشاپ و پینت دات نت.
[تصویر:  word-image-1.png]
تصویر بالا به سادگی نحوه ترتیب ترسیم را نشان می دهد اگر می خواهید یک گره را بالاتر نشان دهید باید در پایین درخت قرار بگیرد. نکته: فرزندان یک گره بعد از آن رسم می شوند اما پشت سر گره های هم ردیف در چنین گره ای قرار می گیرند. به درخت صحنه و صحنه ای که ترسیم شده دقت کنید.
نکته
[b]مدیریت مشخصات مکانی و ابعادی(ترنسفورمTransform) گره ها از طریق گره های دیگر[/b]
به یاد داشته باشید که موقعیت مکانی و ضریب بزرگی و کوچکی یک گره از گره والدش متاثر است و تاثیر می پذیرد. گاهی می خواهید این اتفاق بیفتد اما همزمان لازم است که آن گره پیش از دیگر گره های بالای آن گره در درخت ترسیم شود. برای این کار، از گره [b]RemoteTransform2D[/b]  استفاده می شود. می توان این گره را به عنوان فرزند یک گره به آن افزود تا مشخصات مکانی ابعادی آن گره را از این طریق تغییر داد و آن را پشت گره ی دلخواه ترسیم کرد. در این صورت شما می توانید این گره را پیش از گره های بالاتر در درخت صحنه ترسیم کنید و با کدی که در گره های دیگر می نویسید موقعیت مکانی و ابعادی این گره را تغییر دهید.
به یاد داشته باشید که شما گزینه های دیگری هم دارید. مثلا با استفاده از مشخصه Z-Index گره می توانید ترتیب ترسیم شدن آن را تغییر دهید و به این صورت هر گره ای که Z-Index بیشتری داشته باشد دیرتر و بالاتر از دیگر گره ها ترسیم خواهد شد. همچنین می توانید با استفاده از مشخصه [b]Show Behind Parent [/b]در گره به گره بگویید که پیش از والدش ترسیم شود و در نتیجه پشت آن قرار گیرد. اما گزینه های دیگر محدودیت هایی دارند. استفاده از Z-Index هم کمتر از درخت صحنه کارآمد است.
نمایه ها (Sprites)
گره نمایه (Sprite) پر استفاده ترین گره بازی های دو بعدی است. این گره تنها یک تکستچر(texture /نگاره-محتوای فایل تصویری که در بازی استفاده می شود) را در بر گرفته است که شما می توانید آن را بچرخانید(rotate)، بزرگ یا کوچک کنید(scale) و موقعیت مکانی آن را به هر جایی از تصویر اصلی بازی یا حتی بیرون از آن تغییر دهید(translate). این گره می تواند برای کاراکترها(انسان ها و هیولاها و حیوانات و …)، اشیاء(درخت و گل و گیاه و میز و صندلی و…)، رابط کاربری (منوها، نوار سلامتی و میزان مهمات و …) و هر چیز دیگری که به تصاویر نیاز دارد مورد استفاده قرار گیرد. نمایه ها مخصوصا در نمایش انیمیشن های برگه نمایه (spritesheet) بسیار عالی هستند. برگه نمایه یک تصویر است که شامل چندین حالت یک موجودیت است مثلا ده تصویر از لحظه های مختلف راه رفتن یک انسان و نمایش پشت سر هم این تکه های تصویر باعث نشان دادن یک انیمیشن خواهد شد. مانند کاری که در گوشه دفترچه یادداشت های دوران مدرسه می کردیم، اگر می کردیم. برای این کار باید ناحیه نمایه(موقعیت اسپرایت ها) در برگه نمایه (اسپرایت شیت) مشخص شده باشد.
ناحیه نمایه (Sprite Regions)
در مستندات گودات دو قابلیت درباره نمایه ها دیده می شود، یکی مشخصه ناحیه([b]Region[/b]) است. که به شما امکان می دهد که تنها بخشی از یک تصویر را در صفحه نمایش بازی نشان دهید. این قابلیت مخصوصا زمانی مفید است که یک برگه داشته باشید که چیزهای زیادی را در آن قرار داده اید و می خواهید بدون اینکه آن برگه تصویر را تکه تکه ذخیره کنید آن را روی صفحه نمایش نشان دهید.
در پایین پنجره ویرایشگر شما می توانید ویرایشگر ناحیه نگاره ([b]Texture Region[/b]) را پیدا کنید. تصویر زیر.
[تصویر:  word-image-25.jpeg]
این ابزار را می توان برای تکه تکه کردن تصویری یک عکس و انتخاب دقیق بخش های مختلفی که می خواهید به عنوان یک نمایه نشان دهید استفاده کرد. توجه داشته باشید که این ابزار تنها زمانی در دسترس است که یک گره از نوع نمایه(Sprite) را در انتخاب داشته باشید.
فریم ها
اگ بخواهیم یک انیمیشن برگه نمایه (spritesheet animation) بسازیم، انتخاب تک تک فریم هایی که باید نمایش داده شوند فوق العاده آزار دهنده خواهد بود. گودات ابزاری دارد که به این کار کمک می کند: مشخصه Frame در گره نمایه. شما می توانید [b]Vframes [/b]را به تعداد ردیف های برگه نمایه قرار دهید و همینطور [b]Hframes[/b] را به تعداد ستون های آن. وقتی که مشخصه [b]Frame[/b] را در نمایه تعین کردید فریم جاری از برگه انتخاب می شود، به طور عملی به این موارد خواهیم پرداخت، به یاد داشته باشید که نخستین فریم 0 خواهد بود. تعداد فریم ها برابر ستون ها ضرب در ردیف ها ی برگه نمایه هاست. فریم ها از چپ به راست و از بالا به پایین نشان داده خواهند شد. مانند ترتیب اعداد در تصویر پیشین.
بردار ها و مشخصه های موقعیت مکانی و ابعادی(Vectors and Transforms)
یک وقفه در آموزش ابزارها داریم و به بحث نظری درباره ریاضی مورد استفاده در گرافیک های دوبعدی بر می گردیم. شاید از دور به نظر ترسناک و سخت می رسد، اما اولا آسان است و ثانیا دانستن این ریاضیات کار بازی سازی را هم برای شما به مراتب ساده تر می کند و آزادی عمل شما را بی نهایت افزایش می دهد به علاوه این که برای همه عملیات ریاضی تابع از پیش تعریف شده داریم و کافی است که مثلا بدانید سینوس چیست و کجا ها استفاده می شود و اصلا قرار نیست که معادله ای را حل کنید. با استفاده از ریاضی بردارها شما می توانید بی خیال استفاده از مثلثات و محاسبات زاویه ها شوید. تازه تابع های از پیش تعریف شده موتور گودات هم که جای خود را دارند.
بردار(Vector)
قبلا گفتیم که ویو پورت(تصویر اصلی) یک صفحه ساده دکارتی است یعنی هر نقطه روی آن با دو مشخصه X و Y قابل نمایش است. یک [b]بردار[/b] (Vector) را اغلب با یک (x,y) که نشان دهنده فاصله(حرکت) افقی و عمودی آن از محور های X و Y است نشان می دهند. در تصویر زیر مشاهده می کنید. نقطه شروع (مبدا/Orgigin) جایی است که دو محور مختصات از رو هم می گذرند یعنی نقطه 0,0.
[تصویر:  word-image-26.jpeg]
تصویر فوق یک بردار را در فضای دوبعدی نشان می دهد. m نشان دهنده اندازه بردار (magnitude) است یعنی همان طول بردار. d زاویه بردار از محور افقی است که برای آن است در انی تصویر به شما نشان دهیم که جهت بردار چگونه است.
از بردار ها برای نشان دادن موقعیت مکانی استفاده می شود و همچنین می توان به عنوان ترکیبی از جهت و اندازه حرکت به آن ها نگاه کرد. اگر به بردار به چشم یک کمان یا فِلِش نگاه کنیم، که به یک نقطه اشاره می کند. جهت جایی است که مورد اشاره است و اندازه یا بزرگی بردار طول این فلش است.
برای حساب کردن بزرگی بردار می توان از قاعده فیثاغورثی استفاده کرد. طول بردار وتر مثلث فیثاغورثی است X و Y هم دو ضلع مجاور آن. بنابر این…
[تصویر:  word-image-27.jpeg]
هر چند که اصلا نیازی به این کارها نیست و گودات خودش برای محاسبه طول بردار تابع از پیش تعریف شده دارد. var m = vector.length() که فعلا با آن کاری نداریم.
عملیات برداری
عملیات های ریاضی زیادی را نمی توان روی بردار ها انجام داد. از همین مقدار هم تعداد کمی در بازی ها کاربرد دارند و پرکاربرد هستند. شما می توانید بردارها را جمع، تفریق یا ضرب در یک عدد کنید.
[تصویر:  word-image-28.jpeg]
جمع(addition)، تفریق (subtraction) و ضرب در یک عدد(scalar multiplication) بردار ها را مشاهده می کنید.
  • [b]جمع بردارها [/b]جزء به جزء انجام می شود به این صورت که X بردار اول با X بردار دوم و Y بردار اول با Y بردار دوم جمع می شود. (1, 2) + (3, 4) = (4, 6). همانطور که تصویر مشاهده می کنید مانند آن است که از انتهای بردار اول بردار دوم شروع شود و نقطه پایان بردار دوم حاصل جمع و بزرگی بردار از ابتدای بردار اول تا انتهای بردار دوم است. اگر آن را مثل حرکت روی صفحه دکارتی ببنیم مثل این است که از مبدا مختصات به انتهای بردار اول بروید و سپس بردار دوم را دنبال کنید تا به انتهای مسیر برسید.

  • [b]تفریق بردارها[/b] همانند جمع جزء به جزء است. نتیجه همان برداری است که از انتهای بردار دوم به انتهای بردار اول می رود. این عملیات برای یافتن فاصله دو بردار مورد استفاده قرار می گیرد.

  • [b]ضرب بردار در عدد[/b] همانند ضرب اعداد است برای هر یک از اجزای بردار مثلا 3 × (1, 2) = (3, 6). بردار حاصل در همان جهت بردار نخست خواهد بود اما طول آن در یک عدد ضرب شده است. عددی که [b]اسکالر[/b] نامیده می شود چون از Scale به معنای بزرگ و کوچک کردن می آید و بردار را به ضریب خاصی بزرگنمایی می کند.

  • ضرب بردار ها نوعی ضرب است که از مجموع حاصلضرب اجزای بردار حاصل می شود و یک عدد خروجی آن است. این عملیات با نقطه نشان داده می شود. مثل (1,2)·(3,4)=1×3+2×4=11. حاصل ضرب دو بردار بزرگی، یا اندازه هر دو بردار است، که ضرب در کسینوس زاویه بین آن دو بردار شده باشد. به صورت ریاضی می توان گفت: a · b = ||a|| ||b|| cos θ این ضرب می توان برای بدست آوردن زاویه بین دو بردار استفاده شود که البته برای این کار هم گودات تابع از پیش تعریف شده دارد. به علاوه می توان برای دانستن این که هر چیزی در کدام سمت بردار قرار گرفته است از آن استفاده کرد.

  • [b]حاصلضرب ضربدری:: [/b]یکی دیگر از انواع ضرب برداری است و تنها برای سه و هفت بعد:: تعریف شده است، پس برای نیاز ما که دو بعدی است کارایی ندارد. در ضرب ضربدری بردارها، بردار دیگری حاصل می شود، که بر هر دو بردار عمود است. این عملیات بردار در فصل مربوط به گرافیک سه بعدی توضیح داده خواهد شد.
بردار های واحد (Unit vectors)
یک بردار واحد:: برداری به بزرگی 1 است. این بردارها زمانی که تنها برای بیان جهت بکار می روند بسیار کارایی دارند. از آن جا هر کدام می تواند در یک عدد اسکالر ضرب شود تا بزرگی آن تغییر کند. به علاوه در ضرب نقطه ای بردار ها کاربرد دارد چرا که عدد حاصل همواره در محدوده -1 و 1 خواهد بود و این معنای خاصی دارد، معنای آن این است که اگر بردارها موازی باشند مقدار 1 خواهد بود و اگر کاملا بر خلاف جهت یکدیگر باشند مقدار -1 خواهد بود.
شیوه به دست آوردن بردار واحد:: از یک بردار معمولی را نرمال سازی ([b]normalization) می نامند. و می توان با تقسیم هر جزء(X,Y) بر بزرگی بردار آن را به دست آورد. گودات تابع خاص این کار را نیز در خود دارد.[/b]
var unit = vector.normalized().
مختصات مکانی ابعادی (Transforms)
یکی دیگر از دانش های ریاضی مفید در بازی ها شیوه استفاده از ماتریس ها برای تغییرات مکانی ابعادی در اشیاء است. هر گره (نود) در موقعیت مکانی محلی (Local) خودش مستقر است و از مختصات مکانی ابعادی شی والدش برای تعیین موقعیت خود در فضای کلی (global space) استفاده می کند. شما می توانید این مسئله را با افزودن یک اسپرایت به درخت صحنه و یک اسپرایت دیگر به عنوان فرزند اسپرایت پیشین ببینید. اسپرایت والد را در صحنه حرکت دهید، سپس اسپرایت فرزند را انتخاب کنید و می بینید که مشخصه موقعیت مکانی آن در کادر نظارت برابر (0,0) است. شما حرکت اسپرایت یا نمایه فرزند را در صحنه می بینید اما این حرکت متاثر از حرکت والد و تغییر مختصات مکانی ابعادی آن در صحنه است.
مختصات مکانی ابعادی یا transform ترکیبی است از انتقال (موقعیت مکانی)، چرخش و ضریب بزرگنمایی. انتقال فاصله بین مبدا در فضای عمومی و فضای محلی است. چرخش و ضریب بزرگنمایی را می توان به صورت یک زاویه و یک بردار به نمایش گذاشت اما انتقال در قالب بردار ها نمایش داده می شوند. سه بردار که نهایتا در یک ماتریس 3 در 2 به نمایش در می آیند.
[تصویر:  word-image-29.jpeg]
دو ردیف اول X و Y فضای محلی که در این ماتریس ارائه شده را نشان می دهند، خط بعدی هم انتقال است. گودات یک کلاس به نام Transform برای کمک به شما در این زمینه دارد.
[b]عملیات مختصات مکانی ابعادی در گودات[/b]
var transform = Transform2D()
var x = transform.x # X axis vector
var y = transform.y # Y axis vector
var o = transform.o # Origin translation vector
 
توجه: علامت # در کد بالا نشان کامنت (توضیحات) است و تنها برای نشان دادن توضیحات اضافه در کنار کد به کار می رود و آن چه بعد از آن نوشته شود توضیح در نظر گرفته می شود و در زمان اجرا نادیده گرفته می شود.
توان مختصات مکانی-ابعادی (The Power of Transforms)
کارکرد اصلی ماتریس ها نگهداری عملیات های مختصات مکانی ابعادی است. اگر شما یک ماتریس مختصات را در یک ماتریس دیگر ضرب کنید، حاصل ماتریسی است از ترکیب دو عملیات. کد پایین این پاراگراف را مشاهده کنید. به یاد داشته باشید، ترتیب دارای اهمیت است و در صورت ریاضی مختصات متاخر(دوم/آخر) به روی مختصات مقدم(اول) اعمال شود ولی در گودات این ترتیب عکس است. به صورت پیشفرض یک مختصات که با یک ماتریس همانی (identity/این همانی یا ماتریس واحد) نشان داده می شود.
[تصویر:  word-image-30.jpeg]
این یعنی هیچ مختصاتی تغییر نمی کند و شی مختصات پیشفرض خود را نگه خواهد داشت. یعنی موقعیت مکانی، چرخش و ضریب بزرگنمایی پیش فرض خود را.
برای نمونه، می توانید یک ماتریس داشته باشید که چرخش گره را تغییر خواهد داد و آن را با یک ماتریس دیگر ترکیب کنید که بزرگ نمایی را تغییر می دهد و این ماتریس را بر ماتریس مختصات یک شی اعمال کنید تا هم بزرگنمایی آن را تغییر دهید و هم آن را بچرخانید.
[b]ترکیب کردن ماتریس ها[/b]
var rotate_matrix = Transform2D().rotated(deg2rad(90)) # rotate 90 degrees
var scale_matrix = Transform2D().scaled(Vector2(2, 2)) # scale twice in each axis
var translate_matrix = Transform2D().translated
var combined_matrix = translate_matrix * rotate_matrix * scale_matrix # combine the transforms in order
$my_node.transform *= combined # apply the transform to a node
نکته
[b]ماتریس ها مختصات وارونه / عکس (Inverse Transform Matrices)[/b]
یکی دیگر از چیزهای جالبی که به وسیله ماتریس ها ممکن شده، قابلیت معکوس کردن مختصات است. اگر شما یک ماتریس معکوس را بر مختصات اعمال کنید مانند آن است که تمام مختصات مکانی ابعادی را معکوس کرده اید. مثلا می توانید کاری کنید که یک گره مختصات والدهایش را نادیده بگیرد.
به یاد داشته باشید که ماتریس وارونه تنها زمانی که ماتریس های نرمال شده ی راست گوشه:: کار می کند. در غیر این صورت شما باید از وارونگی نسبی برای اعمال معکوس کردن مختصات استفاده کنید. گودات برای همه این ها تابع حاضری دارد.
دوربین ها(Cameras)
داشتن مرحله ای بزرگ تر از پنجره بازی چیز عجیب و غریبی نیست. در یک بازی RPG (رجوع کنید به ژانرهای بازی) بازیکن اغلب یک دنیای بزرگ در اختیار دارد که در آن اکتشاف کند. این همان جایی است که دوربین ها پا به میدان می گذارند. به جای آن که تمام جهان بازی را حرکت دهید تا بخشی که قرار است دیده در تصویر اصلی (ویو پورت) قرار بگیرد، می توانید به سادگی یک دوربین در صحنه قرار دهید و کاری کنید که دنبال بازیکن برود و تصویر دوربین را به روی تصویر اصلی قرار دهید.
گره دوربین دو بعدی ([تصویر:  word-image-31.jpeg][b] Camera2D[/b] ) کاملا مانند هر گره دیگری است. آن را در درخت صحنه می گذاریم، هر کجا که می خواهیم باشد. اغلب به عنوان گره فرزند برای گره کاراکتر در صحنه قرار می گیرد. خود گره دوربین چیز خاصی ندارد. اینجا بعضی از مشخصه های آن را معرفی می کنیم.
  • مشخصه [b]Offset: این مشخصه مرکز دوربین را تغییر می دهد.به جای آن که موقعیت دوربین را تغییر دهیم می توانیم آفست آن را تنظیم کنیم تا دوربین بلغزد(اسکرول کند). برای ساختن انیمیشن ها این شیوه کاملا مفید است و به سادگی می توان آفست را به حالت اصلی اش برگرداند.[/b]

  • [b]حالت لنگر (Anchor Mode): این حالت مشخص می کند که گره انتخابی باید در مرکز دوربین بماند و فاصله از اطراف رعایت شود(کشیدن به سمت مرکز) یا اینکه در گوشه بالا چپ ثابت بماند.[/b]

  • [b]چرخش (Anchor Mode): این حالت مشخص می کند که زمانی که گره والد دوربین چرخید دوربین هم باید همراه آن بچرخد. اگر دوربین بچرخد به جای آن که چرخش گره والد را ببینید، مشاهده می کنید که جهان در حال چرخش است. و گره والد را ثابت می بینید.[/b]

  • [b]دوربین فعال(Current): این مشخصه دوربین فعال را تعیین می کند. تنها یک دوربین به ازای هر تصویری که روی خروجی نشان داده می شود می تواند فعال باشد.[/b]

  • [b]بزرگنمایی(Zoom): این مشخصه بزرگنمایی تصویر را تغییر می دهد. هر چه این عدد بزرگتر باشد اشیاء را جلوتر می بینید.[/b]

  • [b]محدودیت ها(Limits): این مشخصه تعیین می کند که دوربین تا کجا می تواند پیش برود. از این ویژگی می توان برای جلوگیری از خروج دوربین از مرزهای مرحله استفاده کرد.[/b]

  • [b]حاشیه های کشیدن (Drag Margins): می توان کاری کرد که دوربین علیرغم حرکت گره والدش در محدوده حاشیه ها بماند. جتی می توان تنها در جهت عمودی یا جهت افقی این ویژگی را فعال کرد.[/b]

  • [b]نرم کردن (Smoothing): اگر فعال باشد دوربین به جای اینکه ناگهان حرکت کند و نا گهان بایستد حرکاتی نرم در افزایش و کاهش سرعت خواهد داشت. می توان تعیین کرد که اگر دوربین به محدودیت ها رسید تصویر نرم بشود.[/b]
نکته
[b]چند تصویری(Split Screens / تقسیم کردن صفحه نمایش)[/b]
وقتی بازیهایی که صفحه نمایش را تقسیم می کنند (مثل کراش پلی استیشن یا بیشتر بازی های دونفره کنسولی) مورد بحث هستند دوربین ها فوق العاده کارآیی دارند. می توان یک دوربین برای هر بازیکن ایجاد کرد و به آن ها گفت که هر کدامشان تصویرشان را روی گره ویوپورت جداگانه ای نشان دهند. این ویژگی را در بخشی که مربوط به ویوپورت ها ست بیشتر توضیح خواهیم داد.
تایل مپ ها (TileMaps / نقشه های کاشه ای)
یک ویژگی معمول دیگر در بازی های دوبعدی تایل مپ است. این ویژگی امکان ساختن مجموعه ای از کاشی ها را فراهم می کند که برای ساختن تصویر محیط های بازی از آن استفاده می شود. نه تنها این کار حجم کاری که باید انجام شود را کم می کند؛ بلکه کمک می کند تا به سرعت مراحل بزرگ و متنوعی را برای بازی خود بسازید. گودات گره تایل مپ[تصویر:  word-image-32.jpeg] [b]TileMap[/b] را خاص این ویژگی دارد.
 
ساختن مجموعه کاشی ها(Making a TileSet)
قبل از ساختن مرحله های بازی با تایل مپ، لازم است یک منبع تایل ست([b]TileSet[تصویر:  word-image-33.jpeg][/b]/مجموعه کاشی) بسازید. گودات یک راه پیش روی شما می گذارد که تصاویر دلخواهتان را به عنوان منبع به موتوربازی بشناسانید و از آن استفاده کنید. می توان از یک تصویر برای تمام تایل ها استفاده کرد و آن را تقسیم کرد یا این که برای هر تایل یک فایل تصویر جدا داشت.
 
تمرین
[b]مجموعه کاشی(تایل ست) خودتان را بسازید[/b]
تصویر یا تصاویر دلخواه خود برای تایل ست را انتخاب کنید و گام ها زیر را انتخاب کنید.
  1. تصویر یا تصاویری را که انتخاب کرده اید در پروژه کپی کنید.

  2. یک صحنه جدید بسازید و یک گره [تصویر:  word-image-34.jpeg]Node2D به عنوان ریشه آن اضافه کنید.
 
  1. صحنه را با نام [b]tileset-source.tscn[/b] ذخیره کنید.

  2. یک گره نمایه یا اسپرایت[تصویر:  word-image-35.jpeg] به عنوان گره ریشه اضافه کنید و نام دلخواه کاشی مورد نظرتان را روی آن بگذارید. مثلا چمن(grass) یا سنگ(stone) یا صخره (rock) یا هرچیزی که خواستید.
 
  1. تصویر دلخواه برای کاشی را در مشخصه نگاره(texture) اسپرایت قرار دهید

  2. اگر لازم است مشخصه ناحیه (Region) را تنظیم کنید تا کاشی درست مشخص شود.

  3. اگر قرار است با کاشی برخورد صورت بگیرد مثلا کاراکتر روی آن راه برود و از آن رد نشود باید یک گره [تصویر:  word-image-36.jpeg][b]StaticBody2D[/b]  به عنوان فرزند نمایه (اسپرایت) ایجاد کنید. همچنین به یک گره [b]CollisionShape2D[تصویر:  word-image-37.jpeg][/b] همانطور که در بخش مربوط به فیزیک بازی ها مشاهده خواهد کرد نیاز دارد.

 
  1. گام های چهار تا هفت را برای تمام کاشی هایی که لازم دارید انجام دهید.

  2. صحنه را ذخیره کنید.

  3. روی منوی Scene کلیک کنید و گزینه Convert To و سپس TileSet را انتخاب کنید.

  4. فایل را به نام [b]tileset.res[/b] ذخیره کنید. این فایل منبع تایل ست ما خواهد بود.
نکته
[b]Grid and Snapping[/b]
چیدن دستی کاشی ها کنار یک دیگر کاری سخت و طاقت فرسات، گودات راه حل ساده ای دارد. استفاده از گرید(شبکه چهار خانه) و توابع قالب زدن است. در نوار ابزاری که روی تصویر اصلی مشاهده می کنید منوی Edit قابل مشاهده است. آن جا شما گزینه های [b]Use Snap[/b] و [b]Show Grid[/b]  را دارید. گرید اغلب متناسب با سایز کاشی که شما ساخته اید نیست. اما می توان در همان منو با کلیک روی گزینه [b]Configure Snap[/b] و سپس می توانید با تنظیم گزینه گام های گرید به سایز کاشی این مسئله را حل کنید. استفاده از تایل ست در صحنه بدین صورت به مراتب راحت تر است.
استفاده از تایل مپ ها
حالا که یک منبع مجموعه کاشی را آماده کردیم ایم وقت استفاده از آن برای ساختن مراحل بازی است. استفاده از مجموعه کاشی سخت نیست فقط باید یک گره نقشه کاشه ای [b]TileMap[تصویر:  word-image-38.jpeg][/b] به صحنه اضافه کنید. و مشخصه مجموعه کاشی [b]TileSet[تصویر:  word-image-39.jpeg] آن را به فایلی که ساخته ایم تنظیم کنید. می توان این کار را با انتخاب فایل تایل ست از کادر فایل سیستم و کشیدن آن به کادر نظارت و رها کردن آن روی مشخصه تایل ست در زمانی که تایل مپ در انتخاب است انجام داد. به علاوه باید مشخصه اندازه سلول (Cell Size[/b]) را هم تعیین کنید تا به اندازه کاشی ها درآید.
 
وقتی گره تایل مپ را در صحنه انتخاب کنید، ویرایشگر بسته کاشی هارا در سمت چپ تصویر اصلی نشان خواهد داد و یک گرید را هم برای کمک به جایگذاری کاشی ها به شما نشان خواهد داد. فرآیند ساختن صحنه با ترکیب کاشی ها به سادگی انتخاب کردن کاشی دلخواه از لیست و کلیک روی صحنه در جایی است که می خواهید کاشی آن جا قرار بگیرد. اگر جایی از نقشه کلیک راست کنید کاشی حاضر در آن نقطه پاک خواهد شد.
چند مورد قابل مشاهده در نوار ابزار برای ساختن تایل مپ ها در دسترس است که عبارت اند از:
  • [b]موقعیت کاشی Tile position: گزینه نخست موقعیت کنونی موس در موقعیت کاشی ها را را نشان می دهد. به علاوه نام کاشی که در این موقعیت قرار گرفته را نیز نشان می دهد. این ابزار زمانی مفید است که بخواهید با دقت ریاضی کاشی هایتان را در صحنه جایگذاری کنید.[/b]

  • [b]تایل مپ([تصویر:  word-image-40.jpeg]نقشه کاشه ای/TileMap): این منو چند تابع دارد که برای ویرایش نقشه کاربرد دارد. موارد زیر موارد حاضر در این منو هستند.[/b]
 
    • [b]سطل (Bucket): مثل سطل برنامه های نقاشی است با این تفاوت که محوطه انتخاب شده را با یک کاشی پر می کند.[/b]
[تصویر:  word-image-2.png]
    • [b]انتخاب کاشی(Pick Tile): مانند کاری است که ابزار قطره چکان ([/b]eyedropper) در برنامه های نقاشی انجام می دهد. این اکان را می دهد که کاشی حاضر در موقعیت موس را انتخاب کرده و به عنوان کاشی فعال از آن استفاده کنید و آن را در جاهای دیگر قرار دهید.
[تصویر:  word-image-3.png]
    • ابزار انتخاب ([b]Select[/b]): این گزینه شما را قادر می سازد تا بخشی از نقشه را انتخاب کنید.
[تصویر:  word-image-4.png]
    • [b]کپی کردن بخش انتخاب شده(Duplicate selection): این گزینه یک کپی از بخش انتخاب شده به شما می دهد و شما می توانید آن را هرکجای دیگری از نقشه که خواستید بگذارید.[/b]

    • [b]پاک کردن بخش انتخاب شده (Erase selection): بخشی که انتخاب شده است از کاشی ها را پاک می کند.[/b]

    • [b]پس و پیش کردن (Transpose[تصویر:  word-image-41.jpeg]): این گزینه ردیف کاشی ها را به ستون و بالعکس تغییر می دهد. مانند این است که تصویر را 90 درجه به چپ بچرخانید و برعکسش کنید.[/b]
    • [b]معکوس کردن X ([تصویر:  word-image-42.jpeg]Mirror X) کاشی را روی محور افقی معکوس می کند.[/b]
    • [b]معکوس کردن Y ([تصویر:  word-image-43.jpeg]Mirror Y) کاشی را روی محور عمودی معکوس می کند.[/b]
    • [b]دکمه های چرخاندن ([تصویر:  word-image-44.jpeg]Rotate Buttons) کاشی را به ترتیب 0، 90، 180 یا 280 درجه می چرخاند.[/b]
نکته
[b]ابزارهای خارجی تایل سِت و تایل مپ[/b]
ابزارهایی خارج از گودات وجود دارد که می تواند برای ساختن کاشی ها و نقشه کاشی ها به کار رود. مثل برنامه Tiled Map Editor. گودات به خودی خود آن را نمی شناسد اما افزونه یا پلاگین هایی در کتابخانه محتوای گودات (Asset Library) یافت می شود که به شما کمک می کند. افزونه هایی هم برای جدا کردن تصویر و ساختن مجموعه کاشی به صورت خودکار وجود دارد.
دیگر شیوه های تصویر پردازی (Other Projections)
نقشه کاشه ای های راست(Orthogonal) معمول ترین نوع هستند و در گودات پیشفرض محسوب می شوند. اما استفاده از نقشه های ایزومتریک (2.5D/دو و نیم بُعدی/isometric) و شش ضلعی هم در گودات میسر است.
برای استفاده از حالت ایزومتریک باید حالت TileMap را تغییر دهید برای این کار مشخصه mode آن را از Square به Isometric تغییر دهید. ویرایشگر به صورت خودکار تغییراتی را که اعمال کرده اید نشان خواهد داد. برای حالت شش ضلعی؛ باید mode را روی Square نگاه داشت اما مشخصه Half Offset را به Offset X و یا Offset Y بسته به شیوه تصویر پردازی صحنه تغییر داد. این باعث می شود که گرید شبیه یک دیوار آجری دیده شود که ردیف ها یا ستون ها یک Offset نسبت به خانه پیشین دارند.
حتی می توان یک تصویر پردازی دلخواه را با حالت Custom تغییر مشخصه Custom Transform به مختصات ماتریس خود شکل داد.
پس زمینه چند لایه لغزنده یا پارالاکس (ParallaxBackground)
یک گره جالب و پرکاربرد دیگر ParallaxBackground یا پس زمینه چند لایه لغزان است. با استفاده از این گره می توان به سادگی جلوه پارالاکس را پیاده سازی کرد، به این صورت که اشیائی که دور تر از دوربین قرار دارند بسیار آهسته تر از اشیاء نزدیک به دوربین جابجا می شوند. این افکت(جلوه) در بازی های لغزان از پهلو (مثل بازی قارچ خور و …) معمول است و عمق خاصی به تصویر بازی می بخشد.
گره ParallaxBackground
این گره خود به شما کمک می کند تا جلوه دلخواه را پیاده کنید. این گره با کمک گره ParallaxLayer تمام گزینه هایی که برای ارائه پس زمینه پارالاکس نیاز دارید را فراهم می کند.
بخشی از مشخصات این گره عبارت است از:
  • [b]Offset[/b]: برای تعیین میزان آفست پس زمینه است. اگر گره Camera2D داشته باشید این مشخصه به صورت خودکار مقدار خواهد گرفت. اما می توان به وسیله کد یا انیمیشن هم آن را مقدار دهی کرد تا جلوه دلخواه ساخته شود. مثلا برای حرکت ابرها در بازی.

  • [b]Base offset[/b]: این ویژگی مقدار پایه مشخصه offset در گره های فرزند گره های ParrallaxLayer را مشخص می کند.

  • [b]Base scale[/b]:این مشخصه مقدار ضریب بزرگنمایی پایه برای گره های فرزند گره ParallaxLayer را تعیین می کند.

  • [b]Limit begin/end[/b]: این مشخصه محدودیت جایی که پس زمینه از آن جا اسکرول می شود و می لغزد را مشخص می کند. آغاز محدودیت محدوده بالا چپ را مشخص می کند و پایان محدودیت محدوده پایین راست را. پس زمینه وقتی به این محدوده ها برسد دست از لغزش برخواهد داشت.

  • [b]Ignore camera zoom: اگر این مشخصه فعال باشد، پس زمینه مشخصه بزرگنمایی(zoom) دوربین را در نظر نخواهد گرفت و ترسیم تصویر را در اندازه معمولی انجام خواهد داد.[/b]
گره ParallaxLayer
گره ParallaxBackground با داشتن چند ParallaxLayer به عنوان گره های فرزندش کار خواهد کرد. چنان که در تصویر بعد از این پاراگراف مشاهده می کنید. هر لایه به عنوان یک سطح با فاصله ای متفاوت از دیگر سطح ها نسبت به دوربین کار می کند. با داشتن چندین لایه شما می توانید هر لایه را با سرعت مخصوص به خودش حرکت دهید، که جلوه پارالاکس(چند لایه لغزان) دلخواه شما را ایجاد خواهد کرد. این گره تنها سه مشخصه دارد.
[تصویر:  word-image-45.jpeg]
یک نمونه پس زمینه پارالاکس
  • مشخصه [b]Scale[/b]: میزان حرکت لایه نسبت به افست پس زمینه را مشخص می کند. هرچه کمتر باشد حرکت آهسته تر خواهد بود و برای لایه های عقب تر کمتر خواهد بود. شما می توانید برای هر محور مقادیر متفاوتی قرار دهید.

  • مشخصه [b]Offset[/b]: افست شروع لایه است که می تواند شروع لایه از موقعیت متفاوتی را میسر سازد.

  • مشخصه [b]Mirroring: اندازه قاب لایه را مشخص می کند. وقتی از اندازه مشخص شده در این مشخصه عبور کند لایه تکرار خواهد شد. به یاد داشته باشید که اگر این مشخصه کمتر از اندازه صفحه نمایش باشد شاید به درستی کار نکند.[/b]
گودوت


  آموزش گودات بر اساس کتاب گودات در 24 ساعت-بخش 2
ارسال کننده: MohsenElRod - 12-15-2020, 03:57 PM - انجمن: موتور بازی سازی گودات - بدون پاسخ

بسم الله الرحمن الرحیم

[b]فصل دوم – ساز و کار صحنه ها …[/b]
[b]در این فصل خواهیم آموخت[/b]
سیستم صحنه ها در گودات چه اجزایی دارد
گره ها چه هستند و چگونه از آن ها استفاده می کنیم
چگونه گره ها و صحنه ها با هم ارتباط پیدا می کنند
مدیریت اجزای بازی (منابع) در گودات چگونه است
چگونه با امکانات و قابلیت های سیستم صحنه در گودات آشنا بشویم
یکی از بخش های خاص گودات و چیزی که گودات را از سایر موتور های بازی سازی متمایز می کند، سیستم صحنه ([b]Scene System[/b]) در گودات است. گودت بر اساس گره ها و نحوه تشکیل صحنه از گره ها کار می کند.
[b]گره و صحنه[/b]
هر بازی در گودات بر اساس گره ها و صحنه ها شکل می گیرند. گره ها اتم های بازی هستند که با هم مولکول ها که همان صحنه ها باشند را تشکیل می دهند و از ترکیب صحنه های مختلف می توان صحنه های بزرگ تر و پیچیده تر را شکل داد و در نهایت با ترکیب این صحنه ها بازی شما شکل می گیرد.
[b]Node یا گره[/b]
یک [b]Node[/b] گره بنیادی ترین(ساده ترین) جزء در فرآیند ساختن بازی در گودات است. این یک جزء ساده است که کارکرد و مشخصه های خودش را دارد. یک گره را می توان از طریق وراثت در شی گرایی(از مفاهیم برنامه نویسی) گسترش داد یعنی بر کارایی های آن افزود و مشخصات دیگری به آن اضافه کرد. در بازی شما می توان از اسکریپت نویسی برای این گسترش استفاده کرد. و مثلا برای گره گلوله تعیین کرد که اگر به بازیکن برخورد کرد از میزان سلامتی او کم کند.
وقتی شما روی افزودن [تصویر:  word-image.jpeg]گره در کادر [درخت] صحنه کلیک می کنید، انواع زیادی از گره ها به شما ارائه می شود که می توانید از میان آن ها انتخاب کنید قصد ساختن چه نوع گره ای را دارید. شاید وقت زیادی صرف شود تا بدانید که تک تک این گره ها به چه کار می آیند، برای شروع به همه آن ها نیاز نداریم. نام انواع گره ها به خوبی انتخاب شده است و مختصری از کاری که می کنند را بیان می کند.
 
سه نوع اصلی گره داریم و مابقی گره ها زیر مجموعه یا فرزندان این گره های والد هستند. گره های اصلی عبارتند از [b][تصویر:  word-image-1.jpeg]Node2D گره های دو بعدی، Spatial[تصویر:  word-image-2.jpeg]فضای[سه بعدی]، Control [تصویر:  word-image-3.jpeg]کنترلی[/b]. گره دوبعدی تمام گره هایی را که در بازی دو بعدی لازم است در بر گرفته است و گره فضای[سه بعدی] برای تمام گره های سه بعدی قابل استفاده در بازی است. شباهت ها و ارتباط هایی بین زیر مجموعه های گره دو بعدی و فضای[سه بعدی] هست. مثلا گره دوربین یا Camera که هم در بازی دوبعدی کاربرد دارد و هم دربازی سه بعدی. و گره کنترل هم برای تمام رابط های کاربری(منو ها، دکمه ها و …) به کار می رود و هم در بازی های دوبعدی و هم در بازی های سه بعدی کارایی دارد.
   [تصویر:  word-image-4.jpeg]
پنجره ساختن یک گره جدید، که لیستی از تمام گره هایی که شما می توانید در صحنه استفاده کنید را در بر دارد.
هر گره می تواند بازخورد یا تابع بازگشت به حلقه اصلی(*نکته) بازی را داشته باشد [تابع بازگشت یعنی در شرایط تعیین شده به برنامه ای که بازی را هدایت می کند بگوید که چه کار باید بکند]. این قابلیت مشخص می کند که مثلا گره ای که مسئول پخش انیمیشن است به درستی و در هر فریم از تصویر سازی بازی به روز شود و گره ای که مسئول نمایش سیستم ذرات(مثل دود، آتش، آبشار و …) است را در مرحله بعدی باید پردازش کرد. به علاوه می توان برای اجرای اسکریپت های خاص از این قابلیت بهره گرفت، یعنی می توان بررسی کرد که اگر کاربر دکمه ای را فشرده باشد بر اساس دکمه شخصیت بازیکن را حرکت دهیم.
نکته*
حلقه اصلی بازی یا the game loop عبارت است از اجرای مداوم یک سری دستورات تکراری برای مثال حلقه بازی چنین چیزی است – قدم اول: صحنه را نشان بده، قدم دوم:واکنش های بازی کن را جمع آوری کن از طریق ورودی هایی مثل کیبرد، موس، دسته بازی و …، قدم سوم: بسته به واکنش بازیکن تغییرات در اشیاء بازی را اعمال کن، مثلا خودرو را جابجا کن و …، و برگرد به قدم اول یعنی صحنه ای که تغییرات لازم در آن اعمال شده را دوباره نشان بده. این حلقه هر بار در هر فریم جهان بازی(تمام اجزای بازی در صحنه حاضر، چه آن هایی که کاربر می بیند و چه آن هایی که کاربر نمی بیند) را به روز می کند، ورودی های کاربر را چک می کند. و نتیجه را به روی نمایشگر تصویر می کشد و گودات دو نوع حلقه بازی دارد Idle و Fixed. حلقه Idle برای آن استفاده می شود که امور مربوط به صحنه در سریعترین زمان ممکن انجام شود. و حلقه Fixed در فواصل زمانی ثابت که با حلقه مدیریت فیزیک بازی همگام و هماهنگ است امور صحنه را رتق و فتق می کند، پیشفرض فواصل زمانی به گونه ای است که صحنه بازی هر ثانیه شصت مرتبه به روز می شود (60 فریم بر ثانیه / 60FPS)
[b]Scene یا صحنه[/b]
یک صحنه به تنهایی و به خودی خود کار زیادی برای انجام ندارد. برای آشنا شدن با تمام قابلیت ها لازم است آن را با دیگر گره ها ترکیب کنیم تا قابلیت ها و کارکرد های آن را بیشتر کنیم و گسترش دهیم. به همین علت صحنه های مختلف را می سازیم. یک صحنه چیزی بیش از یک گره اصلی و گره های دیگری به عنوان فرزندان آن نیست، گره هایی که یک ساختار درختی را شکل می دهد، گره اصلی به عنوان ریشه درخت(Root) و گره های فرزند(زیر مجموعه) به عنوان شاخه های اصلی و فرعی درخت. مهم است که بدانید که ساختار صحنه بر این اساس شکل می گیرد که هر گره می تواند چند فرزند داشته باشد اما هیچ گره ای بیشتر از یک والد ندارد مثلا در گره والد ماشین و چهار فرزند لاستیک های آن هیچ لاستیکی در آن واحد متعلق به دو ماشین نیست اما یک ماشین در آن واحد چهار لاستیک دارد.
[تصویر:  word-image-5.jpeg]
[b]درخت صحنه برای پروژه نمونه سه بعدی گودات[/b]
این ساختار درختی ضامن این است که ارتباط گره های والد و فرزند به درستی برقرار باشد. می توان مشخصات ساختار درختی را این گونه برشمرد:
گره ها در ساختار درختی پردازش می شوند، گره والد پیش از فرزندانش بازخورد ها را دریافت می کند.
گره ها در ساختار درختی در صحنه نشان داده می شود، والد ها پیش از فرزندانشان ترسیم می شوند یعنی اگر والد یک مربع باشد و فرزند یک دایره و دستور ترسیم داده شود ابتدا مربع ترسیم می شود و سپس دایره و به این صورت دایره روی مربع قرار می گیرد. و اگر مختصاتشان یکی باشد دایره روی مربع را خواهد پوشاند.(این مسئله در گره های سه بعدی صادق نیست).
گره ها مختصاتشان را از والد هایشان به ارث می برند یعنی اگر والد ماشین 100 پیکسل به جلو برود، چهار لاستیک که گره های فرزند آن هستند هم این تغییر را به ارث می برند و هر یک 100 پیکسل به جلو می روند. در بزرگنمایی و کوچک کردن و نیز چرخاندن نیز این مسئله مراعات می شود.
[b]Resources یا اجزای بازی (منابع)[/b]
یکی دیگر از انواع خاص اشیاء در گودات منابع یا اجزای بازی ([b]Resource[/b]) هستند. گره ها کارهای مختلف بازی را میسر می سازند و منابع داده های لازم را آماده می کنند. مثلا [تصویر:  word-image-6.jpeg][b]AnimationPlayer[/b] (گره پخش کننده انیمیشن) مسئول پخش کردن و متوقف کردن انیمیشن هاست. برای این که این گره بدانید چه باید بکند لازم است از داده هایی که از منبع [b]Animation[تصویر:  word-image-7.jpeg][/b] انیمیشن می آید نیاز مند است. یک منبع از نوع انیمیشن تمام مشخصات گره هایی که باید متحرک شوند تا انیمیشن شکل بگیرد را در خود نگاه می دارد. گره پخش کننده انیمیشن از این داده ها برای ساختن تغییرات لازم در صحنه بهره می گیرد.
 
انواع منبع اصلی، در گودات زیاد هستند، اما شما به ندرت نیاز به ساختن آن ها دارید. اغلب به صورت خودکار و با وارد کردن فایل ها به گودات این منابع ساخته می شوند. زمانی که مشخصه Texture یک اسپرایت را مقدار دهی می کنید گودات یک منبع از فایل png مورد استفاده شما خواهد ساخت. همینطور وقتی در AnimationPlayer یک انیمیشن می سازید.
اگر لازم باشد یک منبع را به صورت دستی بسازید می توانید با کلیک روی منبع جدید [تصویر:  word-image-8.jpeg]([b]New Resource[/b]) کادر نظارت (Inspector) انتخاب کنید. پنجره ای شبیه پنجره افزودن گره ها باز می شود. اما این پنجره انواع منبع های قابل استفاده را به جای گره ها نشان می دهد. بد نیست نگاهی به انواع منابعی که گودات استفاده می کند بیاندازید.
 
[b]مشاهده و ویرایش منابع[/b]
می توان مشخصات منابع را مثل گره ها، در کادر نظارت(Inspector) ویرایش کرد. برخی از منابع مشخصات خاصی برای تغییر دادن ندارند اما برخی را می توان به کلی از این طریق تغییر داد. اگر مشخصه ی یک گره به یک منبع نیاز داشته باشد می توانید با کلیک روی همان مشخصه به منبع آن درسترسی پیدا کنید که در همان Inspector نشان داده خواهد شد. هر زمان لازم باشد می توانید با استفاده از دکمه بازگشت [تصویر:  word-image-9.jpeg][b]Back [/b]یا از طریقه کلیک روی دکمه تاریخچه [b]History[تصویر:  word-image-10.jpeg][/b] به سراغ شیئی که پیشتر وایش کرده اید بروید.
 
برخی انواع منبع وایشگر مخصوص خودشان را دارند. مثلا اگر شما یک منبع از نوع [تصویر:  word-image-11.jpeg][b]Theme[/b] بسازید ویراشگر مخصوص این کار ظاهر خواهد شد و شما می توانید مشخصات تم خود را تغییر دهید. وقتی روی مشخصه ای کلیک می کنید که یک تم را در بر می گیرد هم می توانید این ویرایشگر را باز کنید. همچنین با دابل کلیک روی فایل مربوط (فایل تم) در کادر فایل سیستم می توانید به این ویرایشگر دسترسی پیدا کنید.
 
[b]منابع کجا جای میگیریند و چگونه با منابع دیگر اشتباه گرفته نمی شوند (یکتا می مانند)[/b]
منابع در گودات مب توانند در فایل صحنه ذخیره شوند یا در فایل مجزای خودشان ذخیره شوند. هر روش مزایا و معایب خودش را دارد، و بسته به هر مورد خاص هر یک از دو روش می توانید بهتر باشد. در کل اگر از منبع دوباره در صحنه استفاده می شود بهتر است که آن را در فایل مجزا ذخیره کرد تا بدین صورت بتوان آن را در جاهای مختلف بارگیری کرد و بعد از استفاده از حافظه پاک کرد تا حافظه کمتری استفاده شود.
لازم است که بدانید منابع به صورت پیشفرض به اشتراک گذاشته می شوند. اگر شما یک گره را در درخت صحنه duplicate کنید (تکثیر؛ کپی) منابعی که مورد استفاده آن دو گره است به اشتراک گذاشته می شود، یعنی اگر یکی را ویرایش کنید روی آن دیگری که از منبع مشترک استفاده می کند نیز همین تغییر اعمال خواهد شد. معمولا این رفتار مفید است (حداقل این کارایی را دارد که گودات اطمینان حاصل کند که هر منبع تنها یک بار از هارد دیسک خوانده می شود و به این صورت بهبود کارایی و سرعت رقم می خورد) اما اگر شما می خواهید که دو نمونه مجزا از یک منبع داشته باشید باید آن ها را یکتا(مستقل) کنید. این کار را می توان با کلیک روی نقطه چین عمودی [تصویر:  word-image-12.jpeg] کنار مشخصه منبع زمانی که مشخصه های گره در کادر نظارت نشان داده می شوند و انتخاب گزینه یکتا سازی [b]Make Unique[تصویر:  word-image-13.jpeg] [/b]انجام داد. همچنین شما می توانید تمام منابع زیر مجموعه یک گره را با انتخاب گزینه Make Sub-Resources Unige در منوی ابزارها[b]Tools[/b][تصویر:  word-image-14.jpeg]در کادر نظارت یکتا کنید.
   [تصویر:  word-image-15.jpeg]
منوی منابع و گزینه Make Uniqe
[b]ترکیب کردن صحنه ها[/b]
با این که یک صحنه به تنهایی می تواند کاملا قدرتمند باشد، اما طولی نمی کشد که زیاده از حد بزرگ شود و مدیریت آن از توان خارج شود. یک بازی از ترکیب صحنه ها شکل می گیرد. لازم نیست که یک صحنه را “یک مرحله” یا یک “منطقه از بازی” در نظر بگیرید، بلکه حتی یک مجموعه کوچک از اجزای حاضر در بازی می توانند یک صحنه باشند. صحنه ای که می تواند برای تشکیل دادن صحنه های بزرگتر در کنار دیگر صحنه ها قرار بگیرد.
وراثت صحنه ها([b]Inheriting Scenes)[/b]
دو را برای گسترش صحنه ها وجود دارد، گسترش صحنه یعنی بزرگ کردن آن از طریق افزودن اجزای مختلف. می توان صحنه ها را به ارث برد[از مباحث برنامه نویسی شی گرا که در حد امکان توضیح داده خواهد شد.] یا این که نمونه ای از آن ایجاد کرد (یعنی یک کپی از آن ساخت). وراثت راهی برای ساختن صحنه هایی است که از یک صحنه مادر مشتق شده اند. مثلا شما یک صحنه آماده می کنید و در این صحنه یک سطح به عنوان زمین چند درخت و بوته، نور پردازی و یک صدای باد می گذارید. حالا با وراثت از این صحنه، صحنه دیگری می سازید که یک خانه به آن اضافه می کنید، تمام اجزای صحنه والد در صحنه فرزند خواهند بود بعلاوه خانه. شاید شما یک ساختار پیشفرض از گره ها و مشخصه ها برای کاراکتر تعریف کرده اید. حالا کاراکتر بازی کن از این کاراکتر ارث می برد همراه با داشتن چند مشخصه افزون بر آن. در این حالت اگر به هر دلیل لازم شد ساختار کاراکترها تغییر کند، مثلا حالا باید به کاراکترها قابلیت شنا کردن اضافه شود، به کلاس والد این قابلیت اضافه می شود و به این صورت تمام کلاس های فرزند به خودی خود این قابلیت را دریافت خواهند کرد.
کار وراثت در اینجا دقیقا همان کاری است که در برنامه نویسی شی گرا می کند. شما یک صحنه پایه(base) دارید که تعدادی ساختار کلی و عمومی دارد و صحنه فرزند شما از آن ارث برده است، حالا صحنه والد را می توان با افزودن گره های دیگر به درخت و تغییر مشخصات صحنه پایه(base) به صورت دلخواه تغییر داد.
وراثت در صحنه ها مانند آن است که از روی آن ها در یک صحنه جدید به عنوان گره اصلی (root) نمونه سازی کرد.
شما می توانید یک صحنه موروثی را با کلیک روی گزینه [b]New Inherited Scene [/b]ذیل منوی [b]Scene [/b]بسازید. با این کار پنجره ای باز خواهد شد که به شما امکان انتخاب صحنه پایه(والد/base) را خواهد داد.
نمونه سازی از صحنه ها([b]Instancing Scenes)[/b]
وقتی مرحله بازی خودتان را طراحی می کنید معمولا چند دشمن را در آن قرار می دهید. این دشمن ها یک ظاهر دارند و مانند یکدیگر رفتار می کنند. پس به سادگی می توانید گره دشمن را کپی/پیست کنید و آن ها را در جاهای مختلف مرحله خودتان قرار دهید. هرچند اگر بعدا لازم باشد که تغییری در ظاهر یا رفتار آن ها ایجاد کنید باید برای هر یک جداگانه تغییرات را اعمال کنید و مانند وراثت نیست که با تغییر در صحنه Base بتوانید همه آن ها را تغییر دهید. همین کارایی Instancig است که شما می توانید نمونه های کاملا مستقلی داشته باشید که حداقل تا بخشی از کار مشابه هم و یکسان باشند.
می توانید به جای ان که دشمنان را مستقیما در مرحله بسازید، یک صحنه جدید بسازید که فقط شامل یک دشمن است. شما می توانید هر مقدار که بخواهید این صحنه و دشمن را دستکاری کنید و تغییر دهید، بعد به سادگی آن صحنه را در صحنه مرحله بازی نمونه سازی (Instantiate) می کنید. یک نمونه ساخته شده از صحنه به این معناست که یک ارجاع به صحنه دیگر در درخت صحنه جاری وجود خواهد داشت. از آن جا که صحنه همواره یک گره اصلی یا ریشه دارد صحنه ای که (با گره اصلی اش) به صحنه جاری افزوده شده است می تواند مانند یک گره معمولی رفتار کند و مورد استفاده قرار گیرد. و می توانید این گره را هرجای صحنه که خواستید قرار دهید.
زمانی که صحنه اصلی که روی هارد دیسک ذخیره شده است تغییر دهید، تمام نمونه هایی که از روی آن ساخته شده اند به روز می شوند و آن چه را تغییر داده اید بازتاب می دهند. توجه داشته باشید که اگر مشخصه ای از یک صحنه نمونه(کپی یا بدل) را تغییر دهید اثری روی صحنه اصلی نخواهد داشت، و اگر صحنه اصلی هم تغییر کند تغییری در این نمونه ها رخ نخواهد داد، برای باز گرداندن تغییرهایی که در مشخصه های نسخه اصلی ایجاد شده به حالت پیشین(حالتی که در هارد دیسک ذخیره شده است) می توانید روی دکمه بازگشت[تصویر:  word-image-16.jpeg]([b]Revert[/b]) در کنار همان مشخصه در کادر نظارت کلیک کنید.
 
تمرین
[b]نمونه سازی صحن ها(Instancing Scenes)[/b]
چهار راه برای نمونه سازی از صحنه ها در ویرایشگر پیش روی ماست. هر یک را در ضمن تمرین برایتان شرح دادهیم. به دستورات زیر عمل کنید.
  1. یک صحنه ساده بسازید که بتوانیم از آن نمونه سازی کنیم. این صحنه تنها یک گره ریشه را در بر خواهد گرفت. این صحنه را با نام [b]subscene.tscn [/b]ذخیره کنید.


  2. یک صحنه جدید دیگر بسازید و یک گره ([تصویر:  word-image-17.jpeg]Node) به عنوان گره ریشه در آن بسازید.
 
  1. صحنه را با نام main-scene.tscn ذخیره کنید.


  2. روی گزینه نمونه سازی صحنه[تصویر:  word-image-18.jpeg] در کادر [درخت] صحنه کلیک کنید([b]Instance Scene)[/b].
 
  1. در پنجره انتخاب فایلی که نشان داده می شود فایل [b]subscene.tscn[/b] را انتخاب نمایید و روی دکمه Open کلیک کنید.


  2. حالا می توانید در کادر صحنه یک گره فرزند با علامت خاص[تصویر:  word-image-19.jpeg] (زیر صحنه [b]Subscene[/b]) مشاهده کنید. این علامت یعنی این گره از صحنه دیگری به این صحنه آمده است.
 
  1. حالا [b]subscene.tscn [/b]را در کادر فایل سیستم پیدا کنید، آن را انتخاب کنید، بگیرید و به کادر صحنه، روی درخت صحنه بکشید. این راه دوم بود.


  2. حالا گره اصلی(ریشه) در کادر صحنه را انتخاب کنید آن را انتخاب کنید.


  3. فایل [b]subscene.tscn [/b]را در کادر فایل سیستم پیدا کنید، آن را انتخاب کنید، بگیرید و به تصویر اصلی(viewport) بکشید نگاه دارید. یک پیش نمایش از این که چگونه در تصویر جای خواهد گرفت خواهید دید.


  4. صحنه را هر جای تصویر اصلی که خواستید رها کنید. صحنه رها شده به عنوان فرزند گره ای که در کادر صحنه در حالت انتخاب است در درخت صحنه جای خواهد گرفت.


  5. در کادر صحنه روی گره ریشه کلیک کنید.


  6. به کادر فایل سیستم برگردید روی فایل [b]subscene3.tscn [/b]کلیک راست کنید و گزینه Instance را از منویی که باز شده است انتخاب کنید. این آخرین راهی بود که می توانستید یک نمونه از صحنه را به ویرایشگر وارد کنید.
[تصویر:  word-image-20.jpeg]
صحنه های نمونه سازی شده در درخت صحنه که زیر مجموعه گره خانه هستند.
نکته
[b]چه زمانی یک صحنه جدید بسازیم[/b]
شاید دلتان بخواهد یک صحنه جدید بسازید و همینطور چیزهای مختلف را توی آن بریزید تا وقتی که راضیتان کند. اما مهم است که قبل از شروع به ساختن صحنه های بازی یک طرح کلی داشته باشیم. می توان هر بخش جدا را یک صحنه دانست. مثلا کاراکتر بازی کن می تواند صحنه خودش را داشته باشد. خانه رئیس مرحله هم صحنه خودش را دارد، و شاید تکه از لوازم خانه او هم یک صحنه باشند مخصوصا اگر قرار باشد از آن ها دوباره استفاده شود. و در جاهای مختلف این مرحله یا مراحل دیگر دوباره از آن ها استفاده شود.
بعضی از موتورهای بازی سازی بین “صحنه ها” و “اشیاء پیش ساخته” یا prefab ها مرز و تمایز قائل هستند. در گودات این گونه نیست. اگر شما از اشیاء پیش ساخته در موتورهای دیگر استفاده کرده اید در گودات همان ها را هم یک صحنه خواهید دید. این کار باعث می شود جریان کار بسیار بسیار انعطاف پذیر تر باشد و کار شما هم ساده تر است.
[b]مدیریت صحنه های زیر مجموعه[/b]
وقتی شما بازی خود را به صحنه های کوچک و تک فرایند تقسیم می کنید، کار کردن با اجزای مختلف صحنه به مراتب ساده تر خواهد بود. هرچند شما باید بدانید که چگونه باید صحنه های بزرگی را که از ترکیب صحنه های کوچک ساخته می شود را مدیریت و رفع اشکال کرد. این بخش راهنمایی هایی در این باره به شما ارائه خواهد داد.
[b]باز کردن صحنه های نمونه سازی شده[/b]
گاهی لازم است تغییری در صحنه ای که از روی آن نمونه سازی شده انجام دهید و این تغییر در تمام نمونه های ساخته شده دیده شود. لازم نیست که تمام فایل سیستم را به دنبال صحنه اصلی بگردید، در این پروژه این کار سخت نیست اما در یک بازی واقعی با هزاران صحنه کار راحتی نیست. فقط کافی است روی گزینه باز کردن صحنه زیر مجموعه [تصویر:  word-image-21.jpeg][b]Open Subscene [/b]که در کنار کادر صحنه ظاهر می شود استفاده کنید. وقتی روی این آیکون کلیک کنید صحنه اصلی که از روی آن نمونه سازی شده، در بخش دیگری از ویرایشگر باز خواهد شد. اگر شما تغییر در این صحنه اصلی بدهید، و آن را ذخیره کنید ویرایش گر همه چیز را به روز رسانی می کند تا همه نمونه ها تغییرات شما را نشان بدهند.
 
[b]ویرایش گره ها(و صحنه های زیر مجموعه) در یک صحنه نمونه سازی شده (Subscene)[/b]
به صورت پیشفرض تنها گره اصلی صحنه نمونه سازی شده به عنوان فرزند در درخت صحنه جاری نشان داده می شود. این کار باعث می شود تا درخت صحنه قابل فهم و استفاده بماند و شلوغ نشود و از کپسوله سازی زیر صحنه ها حفاظت می کند.(از بحث های برنامه نویسی شی گرا). اما گاه لازم است اجزا و مشخصات گره های فرزند یک صحنه نمونه سازی شده دستکاری شود. اگر شما گزینه [b]Editable Children[/b] را فعال کرده باشید این امر میسر می شود. می توانید با کلیک راست روی گره صحنه نمونه سازی شده در درخت صحنه و انتخاب گزینه [b]Editable Children[/b] آن را فعال کنید.
به یاد داشته باشید که هر مشخصه ای که در یک صحنه نمونه سازی شده تغییر می دهید در صورت ذخیره در صحنه اصلی(صحنه جاری) ذخیره خواهد شد. پس اگر شما بعدا صحنه ای را که نمونه سازی از روی آن انجام گرفته بعدا تغییر دهید آن تغییرات اینجا دیده نخواهند شد چرا که با تغییر دادن آن ها به آن ها استقلال داده اید و حتی با غیر فعال کرد گزینه [b]Editable Children[/b] نیز این مسئله مرتفع نمی شود بلکه باید تمام تغییرات را به حالت قبل Revert کنید.
[b]قطع پیوند صحنه نمونه سازی شده از صحنه ای که از روی آن نمونه سازی شده است[/b]
گاه آن قدر یک صحنه را ویرایش کرده اید که بهتر است اتصال آن به صحنه ای که نمونه سازی از روی آن انجام شده است را قطع کنید. یا گاهی می خواهید یک صحنه را کپی کنید اما نیازی به ارتباط با صحنه اصلی ندارید. در این گونه موارد می توان وضعیت زیر صحنه بودن صحنه نمونه سازی شده را با کلیک راست روی صحنه مذکور در درخت صحنه جاری و انتخاب[b]Discard Instancing[/b] منقضی کرد و از میان برداشت.
زمانی که این اتفاق می افتد، درخت صحنه نمونه سازی شده به درخت صحنه جاری اضافه می شود و بخشی از آن خواهد شد، مانند این که از ابتدا آن صحنه و تمام اجزای آن را در همین صحنه جاری ساخته باشید.
[b]تقسیم کردن یک صحنه [به بخش های کوچکتر] (Splitting a Scene)[/b]
گاهی لازم است که بر عکس مورد قبل عمل کنید، یعنی صحنه شما بیش از اندازه بزرگ می شود و لازم است بخش هایی از آن به صحنه های جدا تبدیل شوند و در صحنه جاری نمونه سازی شوند. گودات این قابلیت را دارد که بخشی از درخت صحنه را به عنوان یک صحنه مجزا ذخیره کند و به عنوان یک زیر صحنه در صحنه جاری وارد کند. اگر روی گره در درخت صحنه کلیک راست کنید گزینه [b]Save Branch as Scene[/b] (ذخیره شاخه به عنوان یک صحنه) را خواهید دید. این گزینه یک پنجره ذخیره فایل نشان خواهد داد که از طریق آن می توانید آن گره و گره های زیر مجموعه آن را می توانید به عنوان یک صحنه ذخیره کنید. بعد از اینکه ذخیره انجام شد آن شاخه به یک صحنه نمونه سازی شده تبدیل خواهد شد.
نکته
[b]دور باطل در اجزای صحنه[/b]
گودات دور باطل در اجزای صحنه را نمی پذیرد. یعنی اگر صحنه [b]الف[/b] نمونه سازی شده از صحنه [b]ب[/b] باشد و [b]ب[/b] نمونه سازی شده از صحنه [b]جیم [/b]باشد، گودات این اجازه را به شما نخواهد داد که صحنه الف را در داخل صحنه جیم نمونه سازی کنید. چرا که الف از ب و ب از جیم نمونه سازی شده و اضافه کردن صحنه الف در جیم باعث می شود که صحنه جیم یک نمونه از خودش را در خودش داشته باشد که رفتار و عملکرد آن باعث خروج بازی از روال طبیعی و اصطلاحا کرش(خراب) شدن بازی می شود.
[b]خلاصه[/b]
با سیستم صحنه ها در گودات آشنا شدیم و صحنه ها، گره ها و منابع را شناخیتم. شما دیدید که چگونه ترکیب گره های یک درخت صحنه را شکل می دهد و این که ساز و کار گره ها چگونه است و اینکه منابع شامل داده هایی هستند. شما دانستید که چگونه صحنه ها را تقسیم کنید یا آن ها را پیوند بزنید.
[b]تمرین[/b]
این بخش آموزش بیشتر مفهومی بود تا کاربردی. شما باید برای آشنایی با مفاهیمی که برایتان توضیح داده ایم وفت بگذارید و ببینید که چگونه هر چیزی از این مفاهیم تاثیر می پذیرد.
  1. یک صحنه جدید بسازی و یک گره ساده [b]Node[تصویر:  word-image-22.jpeg][/b] به عنوان گره ریشه در آن قرار دهید.
 
  1. نام گره ریشه را به [b]MasterScene[/b] تغییر دهید و آن را به نام [b]Master-Scene.tscn [/b]ذخیره کنید.


  2. صحنه دیگری بسازی د و یک گره اسپرایت [b]Sprite[/b] [تصویر:  word-image-23.jpeg]در آن قرار دهید.
 
  1. گره اسچرایت را به تغییر[b] SubScene[/b] نام دهید و به نام [b]Sub-Scene.tscn[/b] ذخیره کنید.


  2. [b]Sub-Scene [/b]را در صحنه [b]Master-Scene.tscn [/b]نمونه سازی کنید.


  3. در ویرایشگر به صحنه [b]Sub-Scene.tscn[/b] بروید و جای تنها گره ای که در آن صحنه هست را عوض کنید. صحنه را ذخیره کنید.


  4. به [b]Master-Scene.tscn [/b]باز گردید و ببینید که چگونه صحنه زیر مجموعه تغییر پیدا کرده است.


  5. موقعیت مکانی صحنه زیر مجموعه را در صحنه جاری تغییر دهید و آن را ذخیره کنید.


  6. در ویرایشگر به صحنه subscene بروید و یک بار دیگر موقعیت گره اصلی آن صحنه را تغییر دهید و آن را ذخیره کنید.


  7. وقتی به صحنه master بر می گردید، ببینید که چگونه این بار موقعیت مکانی اسپرایت ما تغییر پیدا نکرده است.


  8. گره SubScene را در صحنه master انتخاب کنید.


  9. در کادر نظارت (Inspector) قسمت Transform و از آنجا مشخصه Position را پیدا کنید. حالا کنار این مشخصه دکمه بازگردانی [b]Revert[تصویر:  word-image-24.jpeg][/b] را کلیک کنید.
 
  1. مشاهده کنید که چگونه تغییراتی که درموقعیت مکانی این گره ایجاد شده به موقعیتی که در صحنه subscene ذخیره شده است باز می گردد.

از سایت گودشاپز


  آموزش گودات بر اساس کتاب گودات در 24 ساعت
ارسال کننده: MohsenElRod - 12-15-2020, 03:12 PM - انجمن: موتور بازی سازی گودات - بدون پاسخ

بسم الله اارحمن الرحیم
مقدمه ای بر گودات

محتوای این فصل
* نصب گودات
* ساختن پروژه جدید
* استفاده از ویرایشگر
* اجرای صحنه(scene)نمونه
* مشخص کردن صحنه اصلی پروژه
گودات نرم افزاری است برای ساختن بازی. ابزارهای بسیاری برای ساختن انواع بازی های دو و سه بعدی را در خود دارد. بازی هایی با هر سطحی از پیچیدگی. تمام این ها در یک فایل دانلودی که به نسبت موتورهای دیگر کوچک محسوب می شود ارائه شده است. بدون هر چیز اضافه ای. از آن جا که گودات تحت امتیاز MIT ارائخ شده، می توانید به رایگان از آن استفاده کنید و بازی خود را به هر نحو که خواستید عرضه کنید.
در این فصل کار با گودات را شروع خواهیم کرد. نحوه دانلود و نصب آن را خواهیم آموخت و ویرایشگر گودات را برای نخستین بار اجرا خواهیم کرد. نخستین بار است که مدیریت پروژه گودات را می بینید. شما با استفاده از ویرایشگر اجزای یک صحنه ساده را کنار هم می گذارید و آن را برای تست اجرا می کنید. دست آخر صحنه اصلی بازی را تعیین می کنید و تغییر هایی هم در تنظیمات معمول پروژه انجام می دهید.
[b]نصب گودات[/b]
برخلاف بیشتر نرم افزارها گودات اصلا نیازی به نصب ندارد. تنها کافی است نسخه پرتابل را دانلود کنید و فایل اجرایی را در هر پوشه ای که خواستید کپی کنید. البته نسخه قابل نصب هم در دسترس است.
[b]دانلود و نصب گودات[/b]
گودات خیلی سبک و کم حجم استو ویرایشگر آن تنها 30 مگابایت حجم دارد و شامل تمام ویژگی هاست. تقریبا روی هر کامپیوتری اجرا می شود.
  • به سایت گودات بروید https://godotengine.org و گودات را دانلود کنید.

  • فایل دانلود شده را در هر پوشه ای که خواستید از فشرده سازی خارج کنید.
[b]ساختن پروژه جدید[/b]
اولین باری که گودات را باز می کنید صفحه مدیریت پروژه پیام خوش آمد گویی را نشان می دهد. این جا جایی است که شما می توانید پروژه های خود را ببینید، پروژه جدیدی بسازید و پروژه های دیگر را وارد ویرایشگر کنید. اگر روی تب Templates کلیک کنید شما به کتابخانه محتوای گودات وارد می شوید که می توانید نمونه کارهای گودات را دانلود کنید.
[b]رابط کاربری مدیریت پروژه[/b]
بخش اصلی مدیریت پروژه فهرستی از پروژه های شما را نشان می دهد. می توانید نام، آیکون و مسیر هر بازی که روی آن کار می کنید را اینجا ببینید.
[تصویر:  1.jpg]
مدیریت پروژه گودات که تنها یک پروژه در دسترس دارد
[b]تمرین[/b]
[b]یک پروژه تازه بسازید[/b]
هر پروژه گودات یک فایل به نام project.godot دارد و از این طریق توسط گودات شناخته می شود. تنظیمات پروژه در این فایل نگهداری می شود.
  1. در بخش مدیریت پروژه روی دکمخ New Project کلیک کنید

  2. مسیر دلخواه را انتخاب کنید پوشه ای که انتخاب می کنید باید کاملا خالی باشد، می توانید پوشه جدیدی برای پروژه بسازید

  3. نام دلخواه برای پروژه را وارد کنید این نام را می توان در مراحل بعد تغییر داد

  4. دکمه Create را کلیک کنید. پروژه خودکار ساخته می شود و وارد ویرایشگر می شود.
نکته
[b]پنجره کنسول[/b]
وقتی گودات را اجرا می کنید پنجره کنسول(محیط داس و command prompt) در کنار گودات اجرا می شود. این پنجره اشکالات، خطاها و اطلاعات مرتبط با خود گودات و بازی شما را نشان خواهد داد. اگر به مشکل خوردید حتما پیغام های این پنجره را بررسی کنید.
[b]استفاده از محیط ویرایشگر[/b]
وقتی یک پروژه ایجاد شد و در ویرایشگر باز شد شما صفحه خوش آمد را در محیط اصلی گودات خواهید دید. منوها و دکمه هایی را می بینید که توضیح خواهیم داد. الان هیچ چیز در پروژه نیست اما به زودی چیزهای مختلفی به آن اضافه خواهیم کرد.
[تصویر:  1-1.jpg]
پنجره اصلی ویرایشگر گودات
[b]تصویر اصلی([/b][b]viewport[/b][b])[/b]
وسط صفحه نمایش شما تصویر اصلی بازی را می بینید. مرحله ای که شما در حال ویرایش آن هستید اینجا دیده می شود. این تصویر خیلی شبیه بازی نهایی است که شما می سازید.
تصویر اصلی بسته به محتوا تغییر می کند. در بالا شما می توانید یک نوار را ببینید که به شما می گوید چه چیزی را مشاهده می کنید. شما می توانید این تصویر اصلی را به دوبعدی، سه بعدی، ویرایشگر کد و کتابخانه محتوا تغییر دهید. در طول پروژه بسته به فایلی که با آن کار می کنید تصویر اصلی بین این موارد در گذار است.
[b]بخش های مختلف گودات[/b]
گرداگرد تصویر اصلی چند کادر دیده می شود که برای مدیریت و تنظیم بازی شما مورد استفاده قرار می گیرد. این کادرها بخش هایی هستند که بیشترین استفاده را در ساختن صحنه دارند. در باره هر یک از این کادر ها مختصری خواهیم گفت.
[b]کادر [/b][b]FileSystem[/b]
به صورت پیشفرض، در کادر فایل سیستم می توان فایل های پروژه را مشاهده کرد. پیش نمایش صحنه ها و اجزای بازی نیز اینجا قابل مشاهده است و در کل فایل هایی که در پوشه پروژه شماست اینجا دیده می شود. از این بخش می توان فایل های پروژه را تغییر نام داد، جابجا و یا حذف کرد.
[تصویر:  1-2.jpg]
کادر سیستم فایل
[b]کادر درخت [سلسله مراتب] صحنه[/b]
در این کادر سلسله مراتب صحنه ای که در ویرایشگر باز است را می بینید. بیشتر کار گودات بر مبنای صحنه(scene) ها و گره(Node) هاست. در فصل بعدی در این باره خواهیم گفت. بیشتر زمانی که بخواهید به صحنه خودتان گره و کد اضافه کنید یا سلسله مراتب صحنه را مشخص کنید از این کادر استفاده خواهد شد. همچنین می توانید بدون زیر و رو کردن تصویر اصلی از طریق این کادر اشیاء مورد نظر در صحنه را انتخاب کنید.
[تصویر:  1-3.jpg]
کادر درخت صحنه(Scene Tree)
[b]کادر گره([/b][b]Node[/b][b])[/b]
درست در قسمت پایین کادر درخت صحنه، در کنار Inspector کادر گره یا Node را مشاهده می کنید. این کادر شامل دو بخش سیگنال ها(signals) و گروه ها(groups) است که در برنامه نویسی بازی مورد استفاده قرار می گیرد که به موقع به آن خواهیم پرداخت.
[تصویر:  1-4.jpg]
[b]کادر گره یا [/b][b]Node[/b]
[b]کادر [/b][b]Inspector[/b][b](نظارت)[/b]
این کادر از پرکاربرد ترین بخش هاست، که امکان ویرایش مشخصات گره ها و اجزای مختلف صحنه ی بازی را به شما می دهد. این کادر به صورت خودکار مشخصات گره ای را که انتخاب شده است نشن می دهد. وقتی که با دقت پیکسلی قصد انجام تغییرات در صحنه را دارید یا قصد ساختن انیمیشن برای بازی را دارید بیشتر به کاربرد آن واقف خواهید شد.
[تصویر:  1-5.jpg]
کادر Inspector
[b]کادر واردکردن ([/b][b]Import[/b][b])[/b]
این کادر جایی است که تنظیمات وارد کردن فایل های مختلف را در آن مشخص می کنید. گودات پیشفرض های قابل قبولی برای فایل های مختلف دارد اما گاهی لازم است موارد مشخصی تغییر پیدا کنند. این تنظیمات را می توانید و قتی فایل در کادر فایل سیستم انتخاب شده است مشاهده کنید و تغییر دهید.
[تصویر:  1-6.jpg]
کادر Import
[b]نخستین صحنه[/b]
حالا که شما با پنجره اصلی ویرایشگر آشنا شده اید وقت آن رسیده است که یک صحنه ساده بسازیم. این صحنه در یک تصویر و یک دکمه ساده خواهد داشت. ما یک کد ساده هم برای ظاهر و ناپدید شدن تصویر با کلیک روی دکمه خواهیم نوشت.
[b]تمرین[/b]
[b]ساختن یک صحنه ساده[/b]
  1. در کادر [درخت] صحنه روی دکمه افزودن گره [تصویر:  %d8%a2%d9%85%d9%88%d8%b2%d8%b4-%d9%85%d9...8%a7%d8%aa] کلیک کنید

  2. پنجره Create New Node باز می شود. گزینه Node2D[تصویر:  %d8%a2%d9%85%d9%88%d8%b2%d8%b4-%d9%85%d9...8%a7%d8%aa] را انتخاب کنید تا گره اصلی در صحنه باشد. توجه کنید که چگونه تصویر اصلی خودکار به حالت 2D می رود. این تغییر ها در گودات کاملا عادی است.
— توجه در صورتی که نمی توانید گره دلخواه را برای افزودن به صحنه پیدا کنید بخشی از نام آن را در کادر متنی وارد کنید تا به گره دلخواه برسید.
  1. در کادر صحنه روی Node2D که ساختید دابل کلیک کنید، نام آن به حابت ویرایش در می آید نام آن را MyFirstScene بگذارید. نام اهمیت خاصی ندارد و دلخواه شماست اما از آن جا که در کد از این نام استفاده شده در حال حاضر همین نام را استفاده کنید.

  2. دوباره روی Add Node[تصویر:  %d8%a2%d9%85%d9%88%d8%b2%d8%b4-%d9%85%d9...8%a7%d8%aa] کلیک کنید اما این بار به جای Node2D یک اسپرایت[تصویر:  %d8%a2%d9%85%d9%88%d8%b2%d8%b4-%d9%85%d9...8%a7%d8%aa] اضافه کنید. بگذارید همان نام پیشفرض رویش بماند.

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

  4. گره ای را که به [b]MyFirstScene[/b][b] [/b]تغییر نام داده بودیم دوباره انتخاب گنید. برای اینکه گره بعدی که به صحنه اضافه می کنیم، فرزند این گره باشد لازم است که این گره انتخاب شده باشد.

  5. دکمه [تصویر:  %d8%a2%d9%85%d9%88%d8%b2%d8%b4-%d9%85%d9...8%a7%d8%aa] افزودن گره را بزنید و یک Button یا دکمه [تصویر:  %d8%a2%d9%85%d9%88%d8%b2%d8%b4-%d9%85%d9...8%a7%d8%aa] به صحنه بیفزایید. نام این گره هم اهمیتی ندارد و می توانید آن را به حالت پیشفرض رها کنید.

  6. در حالی که دکمه افزوده شده در حالت انتخاب باشد در کادر نظارت یا  Inspector گزینه Text را به “روی من کلیک کنید” یا “Click Me!” تغییر دهید.

  7. اسپرایت را انتخاب کنید و در تصویر اصلی آن را بگیرید و بکشید تا به وسط صحنه برسد. مرزهای تصویر نهایی بازی را می توانید به شکل خطوط آبی که اضلاع یک چهار گوش هستند ببینید.

  8. دکمه را هم کمی پایینتر از اسپرایت قرار دهید. شبیه تصویر زیر
[تصویر:  1-7.jpg]
اولین صحنه ای که در ویرایشگر گودات ساختیم
  1. حالا دکمه اجرای صحنه ویرایش شده [تصویر:  1-11.jpg] را در گوشه بالا سمت راست پنجره گودات پیدا کنید و بزنید.

  2. یک اخطار نشان داده می شود و می گوید که باید صحنه را قبل از اجرا ذخیره کنید، روی Yes کلیک کنید و صحنه را با نام [b]MyFirstScene.tscn [/b]که به صورت پیشفرض وجود دارد ذخیره کنید.

  3. 3.      صحنه اجرا می شود. حالا می توانید پنجره بازی را که اجرا شده ببندید و به ویرایشگر برگردید. این مرحله از آموزش تمام شده است.
[b]افزودن کد[/b]
احتمالا متوجه شده اید که دکمه ای که در صحنه گذاشته ایم هیچ کاری نمی کند. حالا وقت آن است که به دکمه بگوییم که وقتی کلیک شد باید چه کند. این کار را با کد نویسی انجام می دهیم. کار سختی نیست، برنامه نویسی جزء جدایی ناپذیر بازی هاست. هر چه زودتر آن را شروع کنیم بهتر است.
برای کد نویسی دکمه گره اصلی را در کادر صحنه انتخاب کنید و روی دکمه افزودن کد(اسکریپت) [تصویر:  %d8%a2%d9%85%d9%88%d8%b2%d8%b4-%d9%85%d9...8%a7%d8%aa] در قسمت بالای همان کادر کلیک کنید. یک پنجره باز می شود که به شما اجازه انتخاب نوع اسکریپت را می دهد. در این مورد ما یک [b]GDScript[/b]  می خواهیم که در این مورد وقتی Node2D که گره اصلی صحنه است انتخاب شده از آن وراثت خواهد داشت(فعلا معنای وراثت مهم نیست). این کد را با نام MyFirstScene.gd در پوشه اصلی پروژه ذخیره کنید.
[تصویر:  1-8.jpg]
پنجره افزودن اسکریپت به گره. برای ساختن اسکریپت تازه یا افزودن اسکریپت موجود به یک گره از این پنجره استفاده می شود.
بعد از کلیک روی دکمه [b]Create[/b] تصویر اصلی به صورت خودکار به حالت کد نویسی [b]Script[/b] می رود. و اسکریپتی که ساختید در آن باز خواهد شد. برای کاری که الان می خواهیم بکنیم. می توانید همه خط ها به جز خط اول را پاک کنید.
قبل از کد نویسی نخست باید سیگنال فشرده شدن دکمه را به یک تابع(چند خط کد که یک نام دارند) جدید متصل کنیم. این کار باعث می شود هر بار که دکمه فشرده شود، سیگنال فشرده شدن دکمه ایجاد شود و تابع متصل را اجرا کند. از کادر [درخت] صحنه دکمه (Button) را انتخاب کنید و سپس روی بخش signals از کادر گره(node) کلیک کنید. اینجا می توان لیست تمام سیگنال های قابل استفاده دکمه را دید. روی سیگنال [b]pressed()[/b]کلیک کنید و بعد دکمه [b]Connect[/b] را از قسمت پایین کادر گره بزنید. پنجره اتصال سیگنال باز می شود که بعدا بیشتر درباره آن خواهیم گفت. حالا می توانیم با پیشفرض های خود پنجره دکمه[b] [/b][b]Connect[/b] را بزنیم.
حالا دوباره ویرایشگر کد نشان داده می شود اما این بار یک تابع جدید به نام on_Button_pressed() در خود دارد. این تابع هر زمان که روی دکمه کلیک کنید فرا خوانده می شود(یعنی دستوراتی که در خطوط بعد از این خط نوشته شده اند اجرا می شود). حالا می توانید کد زیر را دراین قسمت بنویسید. فقط خط آخر کد را لازم است اضافه کنید.
[b]کد: کارکرد دکمه ساده[/b]
extends Node2D
func _on_Button_pressed():
    $Sprite.visible = not $Sprite.visible
این کد کاملا ساده است و توضیح کاری که می کند هم کاملا ساده است: این کد ویژگی Visible(قابل مشاده بودن) گره اسپرایت را بر عکس مقدار کنونی اش قرار می دهد یعنی اگر True(بله) باشد برابر False(خیر) قرار می دهد و بالعکس.[1] این کار باعث می شود که اسپرایت بین حالت قابل مشاهده و حالت غیر قابل مشاهده جابجا شود و این کار با فشردن دکمه انجام خواهد شد. حالا می توانید صحنه را اجرا کنید و نتیجه را مشاهده کنید.
نکته
[b]ویرایشگر گرافیکی کد[/b]
گودات یک زبان برنامه نویسی گرافیکی هم دارد. با که آزادی عمل کدنویسی را ندارد اما ابزار بسیار خوبی است که می تواند برای کسانی که با برنامه نویسی آشنا نیستند مفید باشد. شکل زیر عملکرد کد دکمه را که در این زبان گرافیکی ساخته شده است نشان می دهد.
[تصویر:  1-9.jpg]
[b]مشخص  کردن صحنه اصلی بازی[/b]
اگر شما تلاش کرده باشید که پروژه را به جای صحنه ی در حال ویرایش اجرا کنید، یعنی به جای دکمه اجرای صحنه در حال ویرایش [تصویر:  1-11.jpg] دکمه اجرای بازی را زده باشید [تصویر:  1-12.jpg] شما یک پیغام خطا مشاهده می کنید که می گوید صحنه اصلی بازی مشخص نشده است(تصویر زیر). صحنه اصلی، صحنه ای است وقتی بازی اجرا می شود اول و پیش از همه اجرا می شود. مثلا می توان صحنه اصلی را منوی اصلی بازی یا صحنه یک انیمیشن برای ورود به بازی یا معرفی سازنده و … قرار داد.
[تصویر:  1-10.jpg]
اگر شما روی دکمه انتخاب[b]Select[/b]  در پنجره پیغام کلیک کنید کادر انتخاب فایل باز می شود که از طریق آن می توانید صحنه اصلی را انتخاب کنید. اکنون فقط یک صحنه در بازی داریم. همان صحنه را انتخاب کنید. با این کار هر زمان پروژه اجرا شود [تصویر:  1-12.jpg] همین صحنه اجرا خواهد شد.
[b]تنظیمات پروژه ([/b][b]Project Settings[/b][b])[/b]
قسمت تنظیمات پروژه بخش مهمی است چرا که بسیاری از گزینه هایی که مشخص می کند پروژه شما چگونه به کاربر نهایی عرضه خواهد شد این جا تعیین می شود. شما می توانید از طریق منوی پروژه[b]Project [/b]به بخش تنظیمات پروژه وارد شوید.
[تصویر:  01fig13.jpg]
بخش تنظیمات پروژه گودات
مثلا از طریق بخش تنظیمات می توان اندازه تصویر بازی و این که تمام صفحه باشد یا یک پنجره را تعیین کنید یا نام پنجره بازی را تغییر دهید و همینطور دیگر چیزهایی که در بازی عرضه شده قابل مشاهده است. اندازه جاذبه پیشفرض و دیگر گزینه های فیزیک بازی و نیز تنظیمات گرافیکی و بسیاری موارد دیگر از طریق همین بخش قابل مشاهده و تغییر است.
[b]چه کردیم؟[/b]
در این فصل کار با گودات شروع شد. آموختید که گودات را چگونه نصب و اجرا کنید.محیط مدیریت پروژه را مشاهده کردید و نخستین پروژه خود را ساختید و کار با ویرایشگر گرافیکی گودات شروع شد. با بخش های مختلف ویرایشگر اصلی گودات آشنا شدید و کادرهای مختلف آن را شناختید. آموختید که چگونه یک صحنه ساده بسازید و چگونه به صحنه ها کد اضافه کنید. شما همچنین با تنظیمات پروژه و چگونگی تعیین صحنه اصلی بازی آشنا شدید.
[b]تمرین[/b]
برای کار با ویرایشگر گودات وقت صرف کنید تا با بخش های مختلف آن آشنا شوید. در بخش های بعدی کتاب با همه این قسمت ها کار داریم.
  1. صحنه جدیدی بسازید و یک گره دو بعدی Node2D به عنوان گره اصلی در آن ایجاد کنید. نام آن را به MyTestScene تغییر دهید و آن را با نام پیشفرض ذخیره کنید.

  2. یک اسپرایت [تصویر:  p0011_03.jpg] به صحنه اضافه کنید.

  3. از طریق ویندوز (بدون استفاده از گودات) یک عکس را در پوشه پروژه کپی کنید.

  4. به گودات برگردید و ببینید که عکسی که کپی کرده اید در کادر فایل سیستم چگونه نشان داده می شود. این عکس را به عنوان Texture در اسپرایت خود قرار دهید.

  5. تلاش کنید اندازه های اسپرایت را عوض کنید و آن را بچرخانید. از نوار بالای تصویر اصلی (ViewPort) استفاده کنید.

  6. به کادر نظارت (inspector) نگاه کنید و ببینید که مشخصات اسپرایت با تغییراتی که در تصویر اصلی می دهید چگونه تغییر می کند.

  7. از دکمه های قفل کردن [تصویر:  p0017_02.jpg] و قفل گشایی [تصویر:  p0017_03.jpg] در نوار ابزار بالای تصویر اصلی استفاده کنید. مشاهده کنید که با زدن این دکمه چه تغییری در تصویر اصلی رخ می دهد.

  8. عکس را در کادر فایل سیستم انتخاب کنید. حالا به کادر وارد کردن ([b]Import[/b]) بروید و تنظیماتی را که می بینید تغییر دهید. روی دکمه [b]Reimport[/b] کلیک کنید تا تغییراتی که داده اید در تصویر اصلی اعمال شود با تنظیمات وارد کردن کمی کار کنید.

  9. منوی اشکالزدایی [b]Debug[/b] را باز کنید و گزینه [b]Sync Scene Changes[/b] را فعال کنید.

  10. بازی را اجرا کنید و بدون بستن پنجره بازی تغییراتی در اسپرایت خود بدهید. مشاهده کنید که چگونه به صورت خودکار تغییراتی که داده اید در پنجره بازی اعمال می شود.

  11. یک برچسب([b]Label)[/b] [تصویر:  p0017_04.jpg] به صحنه اضافه کنید و مشخصه Text آن را متن دلخواه قرار دهید. اگر هنوز پنجره بازی باز باشد شما افزوده شدن آن به بازی را هم خواهید دید.

  12. پنجره بازی را ببندید و صحنه خود را ذخیره کنید، با استفاده از منوی صحنه([b]Scene[/b]) یا کلید های کنترل و S.

  13. به بخش تنظیمات پروژه بروید و صحنه جدید را به عنوان صحنه اصلی بازی تعیین کنید.

  14. پروژه را اجرا کنید [تصویر:  1-12.jpg] و ببینید که چگونه صحنه اصلی بازی تغییر کرده است.


[1]  True و False صحیح و غلط و مقدار یک نوع منطقی Boolean هستند که دراینجا برای تقریب ذهن بله و خیر معنا شده اند.


منبع : آموزش گودات گودوت