یک محیط گیم پلی همهجانبه برای بازی های گودو خود با انیمیشن های جذاب ایجاد کنید.
در ساخت بازی، انیمیشن ها نقش مهمی در ایجاد یک تجربه جذاب و همه جانبه برای بازیکنان دارند. افزودن انیمیشن های دو بعدی به بازی گودو می تواند شخصیت ها و محیط های شما را زنده کند و آنها را از نظر بصری جذاب تر و تعاملی تر کند.
خوشبختانه، گودو ابزارها و ویژگی های قدرتمندی را برای ایجاد و کنترل آسان انیمیشن های دو بعدی ارائه می کند.
راه اندازی بازی گودو
برای شروع، یک صحنه اصلی بازی دو بعدی را در موتور بازی گودو تنظیم کنید. یک صحنه جدید ایجاد کنید و یک گره KinematicBody2D به عنوان شخصیت بازیکن اضافه کنید. در داخل KinematicBody2D، یک CollisionShape2D با شکل مستطیل اضافه کنید که نشان دهنده مرزهای برخورد بازیکن است.
کد استفاده شده در این مقاله در این مخزن GitHub موجود است و برای استفاده شما تحت مجوز MIT رایگان است.
علاوه بر این، یک گره AnimatedSprite برای مدیریت انیمیشن های پخش کننده اضافه کنید. علاوه بر این، مطمئن شوید که اقدامات ورودی زیر را در نقشه ورودی خود ترسیم کرده اید:
سپس کد GDScript را برای کنترل حرکت بازیکن بنویسید. اسکریپت زیر را به گره KinematicBody2D وصل کنید:
extends KinematicBody2Dconst SPEED = 200func _physics_process(delta): var velocity = Vector2.ZERO if Input.is_action_pressed("move_left"): velocity.x -= SPEED if Input.is_action_pressed("move_right"): velocity.x += SPEED if Input.is_action_pressed("move_up"): velocity.y -= SPEED if Input.is_action_pressed("move_down"): velocity.y += SPEED velocity = move_and_slide(velocity)
این اسکریپت سرعت ثابتی را برای پخش کننده تنظیم می کند و به آنها اجازه می دهد با استفاده از کلیدهای جهت دار یا WASD به چپ، راست، بالا و پایین حرکت کنند.
اضافه کردن SpriteSheet در AnimatedSprite
اکنون، AnimatedSprite را طوری پیکربندی کنید که از یک صفحه sprite برای انیمیشن ها استفاده کند. گره AnimatedSprite را انتخاب کنید و به بخش Frames در تب ویژگی های گره بروید. در اینجا، بر روی دکمه New SpriteFrames کلیک کنید.
به تب SpriteFrames که در پایین ویرایشگر گودو قرار دارد بروید. در تب SpriteFrames بر روی دکمه New Animation کلیک کنید. با افزودن فریم های مناسب به هر انیمیشن، انیمیشن هایی مانند walk و idle ایجاد کنید.
علاوه بر این، شما می توانید انیمیشن های دیگری مانند تیراندازی، پریدن و صعود برای یک بازی پلتفرمر ایجاد کنید. پس از آن، روی دکمه Add Frames from SpriteSheet کلیک کنید تا به طور خودکار فریم های جداگانه از صفحه sprite استخراج شود.
کنترل انیمیشن ها با استفاده از GDScript
اکنون که انیمیشن های خود را تنظیم کرده اید، می توانید آنها را با استفاده از GDScript به صورت برنامه نویسی کنترل کنید.
پخش و توقف انیمیشن
کنترل پخش انیمیشن ها برای ارائه تجربیات پویا و تعاملی در بازی شما ضروری است. گره AnimatedSprite در گودو روش هایی را برای پخش و توقف انیمیشن ها مطابق با منطق بازی شما ارائه می دهد.
گره KinematicBody2D را گسترش دهید و کنترل انیمیشن را در تابع _physics_process مدیریت کنید. میتوانید از ورودیهای play_animation و stop_animation برای فعال کردن اکشنهای انیمیشن مربوطه استفاده کنید.
extends KinematicBody2Dfunc _physics_process(delta): # Play the animation if Input.is_action_just_pressed("play_animation"): $AnimatedSprite.play() # Stop the animation and reset to the first frame if Input.is_action_just_pressed("stop_animation"): $AnimatedSprite.stop() $AnimatedSprite.frame = 0
با نقشه برداری از اقدامات ورودی مناسب، می توانید کنترل پخش انیمیشن در بازی خود را به بازیکنان ارائه دهید.
به عنوان مثال، ممکن است اکشن play_animation را به یک دکمه یا یک رویداد خاص در بازی خود متصل کنید، و به بازیکن اجازه دهید تا یک دنباله انیمیشن را در لحظه دلخواه فعال کند. علاوه بر این، میتوانید موسیقی بدون حق چاپ را برای پخش در حین اجرای انیمیشن پیدا کنید.
به طور مشابه، می توانید اقدامات stop_animation را برای متوقف کردن کامل انیمیشن فعال کنید.
با گنجاندن این مکانیسمهای کنترل انیمیشن، میتوانید عمق و تعامل را به انیمیشنهای بازی خود اضافه کنید و تجربههای جذابتری را برای بازیکنان خود ایجاد کنید.
چرخاندن انیمیشن
چرخش انیمیشن می تواند جذابیت بصری و تنوع را به بازی شما اضافه کند. می توانید گره AnimatedSprite را به صورت برنامه نویسی بچرخانید تا جهت انیمیشن را تغییر دهید. با استفاده از روش rotate() می توانید چرخش را بر حسب درجه اعمال کنید.
extends KinematicBody2Dfunc _physics_process(delta): if Input.is_action_just_pressed("rotate_animation"): # Rotate the animation by 45 degrees clockwise $AnimatedSprite.rotate(deg2rad(45))
هنگامی که دکمه های مرتبط با rotate_animation را فشار می دهید (می توانید این عمل را در نقشه ورودی خود تعریف کنید)، متد rotate() در گره AnimatedSprite فراخوانی می شود. با استفاده از deg2rad() گره را 45 درجه در جهت عقربه های ساعت می چرخاند تا درجه ها را به رادیان تبدیل کند.
به خاطر داشته باشید که چرخش را برای کل گره AnimatedSprite، از جمله تمام فریم های انیمیشن اعمال می کند. بنابراین، اگر میخواهید فقط فریمهای خاصی را بچرخانید، ممکن است لازم باشد آنها را به گرههای AnimatedSprite جداگانه تقسیم کنید یا از تکنیکهای دیگری مانند چرخاندن فریمهای جداگانه استفاده کنید.
چرخاندن انیمیشن
چرخاندن انیمیشن به صورت افقی یا عمودی می تواند برای انعکاس تغییرات در جهت کاراکتر مفید باشد. در گودو، گره AnimatedSprite ویژگی هایی را برای کنترل چرخش ارائه می دهد.
برای برگرداندن انیمیشن به صورت افقی، ویژگی flip_h AnimatedSprite را روی true تنظیم کنید. این انیمیشن را در امتداد محور افقی منعکس می کند. به طور مشابه، تنظیم ویژگی flip_v روی true، انیمیشن را در امتداد محور عمودی منعکس می کند.
extends KinematicBody2Dfunc _physics_process(delta): if Input.is_action_just_pressed("flip_animation"): $AnimatedSprite.flip_h = true # or $AnimatedSprite.flip_v = true for vertical flipping
اگر بازیکن اکشن ورودی flip_animation را فشار دهد، ویژگی flip_h AnimatedSprite را روی true تنظیم کنید. با این کار انیمیشن به صورت افقی چرخانده می شود.
استفاده از سیگنال ها در AnimatedSprite
گودو علاوه بر کنترل برنامهای انیمیشنها، یک سیستم رویداد قدرتمند به نام سیگنال ارائه میکند. سیگنال ها به شما این امکان را می دهند که به رویدادها یا تغییرات خاصی که در طول اجرای بازی شما رخ می دهد پاسخ دهید.
در مورد AnimatedSprite، دو سیگنال مهم وجود دارد که می توانید از آنها استفاده کنید: animation_finished() و frame_changed().
1. animation_finished() سیگنال
سیگنال animation_finished() زمانی که انیمیشن به آخرین فریم می رسد، یا در حین پخش تک پخش یا زمانی که حلقه می شود، منتشر می شود. این سیگنال زمانی مفید است که می خواهید اقداماتی را انجام دهید یا پس از اتمام یک انیمیشن، رویدادها را راه اندازی کنید.
extends KinematicBody2Dfunc _ready(): $AnimatedSprite.connect("animation_finished", self, "_on_animation_finished")func _on_animation_finished(): # Perform actions or trigger events print("Animation finished!") # Additional code here...
سیگنال animation_finished() AnimatedSprite را با استفاده از تابع connect() به متد _on_animation_finished() در همان اسکریپت متصل کنید.
هنگامی که انیمیشن به پایان رسید، می توانید منطق سفارشی را اجرا کنید یا با استفاده از متد _on_animation_finished() عملکردهای دیگر را راه اندازی کنید.
2. سیگنال frame_changed().
هر زمان که فریم فعلی انیمیشن تغییر کند، سیگنال ()frame_changed منتشر می شود. این ممکن است زمانی اتفاق بیفتد که انیمیشن در حال پخش است یا زمانی که فریم را به صورت برنامه ای تغییر می دهید. می توانید از این سیگنال برای تشخیص تغییرات فریم استفاده کنید و بر اساس آن واکنش نشان دهید.
extends KinematicBody2Dfunc _ready(): $AnimatedSprite.connect("frame_changed", self, "_on_frame_changed")func _on_frame_changed(): # Perform actions based on the current frame var currentFrame = $AnimatedSprite.frame print("Current frame: ", currentFrame) # Additional code here...
سیگنال Frame_changed() AnimatedSprite را به متد _on_frame_changed() در همان اسکریپت وصل کنید. هنگامی که فریم تغییر می کند، می توانید با استفاده از روش _on_frame_changed() به فریم فعلی دسترسی پیدا کنید و اقدامات یا منطق را بر اساس مقدار فریم انجام دهید.
با استفاده از سیگنالها، میتوانید به رویدادهای انیمیشن مانند تکمیل یا تغییرات فریم پاسخ دهید و رفتارهای پویا را وارد کنید یا اقدامات خاصی را در بازی خود ایجاد کنید.
بازی های گودو را با استفاده از انیمیشن ها جذاب تر کنید
افزودن انیمیشن های دو بعدی به بازی های گودو شما می تواند تجربه کلی بازیکن را تا حد زیادی بهبود بخشد. انیمیشن ها به شخصیت ها جان می بخشند و حرکات و اعمال آنها را از نظر بصری جذاب تر می کنند. با گنجاندن انیمیشن ها برای اقدامات مختلف مانند راه رفتن، دویدن، حمله و پریدن، می توانید یک محیط گیم پلی پویا و همه جانبه ایجاد کنید.
علاوه بر این، شما همچنین می توانید از انیمیشن ها برای ارائه بازخورد بصری به بازیکن استفاده کنید. این بازخورد کمک می کند تا بازی جذاب تر و پاسخگوتر شود و حس کنترل و درگیری بازیکن را افزایش دهد.