Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
Створення ворога
Тепер настав час зробити ворогів, від яких гравцеві доведеться ухилятися. Їх поведінка буде не дуже складною: вони будуть час від часу виникати по краях екрана і рухатися у випадковому напрямку по прямій лінії.
Ми створимо сцену Mob, яку ми зможемо потім використати, для створення будь-якої кількості незалежних мобів в грі.
Налаштування вузлів
Клацніть Сцена -> Нова сцена вгорі меню та додайте наступні вузли:
RigidBody2D (тверде тіло 2D) (названий
Mob)VisibleOnScreenNotifier2D
Don't forget to set the children so they can't be selected, like you did with
the Player scene. This is done by selecting the parent node (RigidBody2D) in the
Scene tree dock, then using the button at the top of the 2D editor
(Ctrl + G or Cmd + G on macOS).
Виберіть вузол Mob і задайте властивість Gravity Scale в відділі RigidBody2D в Інспекторі на 0. Це не дасть ворогу падати вниз.
In addition, in the Mob node inspector,
under the CollisionObject2D
section, expand the Collision group and
uncheck the 1 inside the Mask property.
This will ensure the mobs do not collide with each other.
Налаштуйте AnimatedSprite2D так, як ви налаштовували його для гравця. На цей раз, у нас є 3 анімації: fly , swim, і walk. В папці art є по два зображення для кожної анімації.
Властивість Animation Speed має бути встановлена для кожної анімації окремо. Встановіть значення 3 для всіх трьох.
Ви можете використовувати кнопки "Відтворити анімацію" праворуч від поля введення Animation Speed для попереднього перегляду вашої анімації.
Ми вибиратимемо одну з цих анімації випадковим чином, тому моби будуть мати певну різноманітність.
Як і зображення гравця, ці зображення мобів потрібно зменшити. Встановіть в AnimatedSprite2D властивість Scale на (0.75, 0.75).
Як і в сцені Player, додайте CapsuleShape2D для зіткнення. Щоб вирівняти фігуру із зображенням, потрібно встановити властивість Rotation на 90 (під "Transform" в Інспекторі).
Збережіть сцену.
Скрипт ворога
Додайте такий скрипт до Mob:
extends RigidBody2D
using Godot;
public partial class Mob : RigidBody2D
{
// Don't forget to rebuild the project.
}
Тепер давайте розглянемо решту скрипту. В _ready() ми відтворюємо анімацію і випадковим чином вибираємо один з трьох її варіантів:
func _ready():
var mob_types = Array($AnimatedSprite2D.sprite_frames.get_animation_names())
$AnimatedSprite2D.animation = mob_types.pick_random()
$AnimatedSprite2D.play()
public override void _Ready()
{
var animatedSprite2D = GetNode<AnimatedSprite2D>("AnimatedSprite2D");
string[] mobTypes = animatedSprite2D.SpriteFrames.GetAnimationNames();
animatedSprite2D.Play(mobTypes[GD.Randi() % mobTypes.Length]);
}
Спочатку ми отримуємо список назв анімацій з властивості AnimatedSprite2D sprite_frames. Вона повертає масив, який містить всі три назви анімацій: ["walk", "swim", "fly"].
У коді GDScript ми використовуємо метод Array.pick_random для випадкового вибору однієї з цих назв анімації. Тим часом у коді C# ми вибираємо випадкове число між 0 і 2, щоб вибрати одне з цих імен зі списку (індекси масиву починаються з 0). Вираз GD.Randi() % n вибирає випадкове ціле число від 0 до n-1.
Нарешті, ми викликаємо play(), щоб розпочати відтворення вибраної анімації.
Останній фрагмент - це змусити мобів видаляти себе, коли вони залишають екран. Підключіть сигнал screen_exited() вузла VisibleOnScreenNotifier2D до Mob і додайте цей код:
func _on_visible_on_screen_notifier_2d_screen_exited():
queue_free()
// We also specified this function name in PascalCase in the editor's connection window.
private void OnVisibleOnScreenNotifier2DScreenExited()
{
QueueFree();
}
queue_free() — це функція, яка фактично «звільняє» або видаляє вузол у кінці кадру.
На цьому завершуємо сцену Mob.
З гравцем і ворогами закінчено, в наступній частині ми об'єднаємо їх у новій сцені. Ми змусимо ворогів випадковим чином виникати навколо ігрової дошки і рухатися вперед, перетворюючи наш проект в гру.