Перемещающиеся платформы

Проблема

Вам нужны перемещающиеся платформы в вашей 2D-платформере.

Решение

Существует несколько способов решения этой проблемы. В этом рецепте мы будем использовать AnimatableBody2D для нашей платформы и перемещать её с помощью Tween. Это позволяет использовать различные стили движения, минимизируя количество необходимого кода.

Вы также можете реализовать эту технику перемещения платформ с использованием AnimationPlayer вместо tween. Большая часть настройки будет такой же, но вместо кода tween вы будете анимировать свойство позиции тела.

Настройка

Мы начнем с базовой настройки платформера, используя статью из Рецептов Godot — персонаж платформера. Основное движение из этого рецепта будет хорошо работать с платформами.

Создание платформы

Сцена платформы содержит следующие узлы:

  • Node2D («MovingPlatform»): Родительский узел Node2D служит «якорем» или стартовой точкой для платформы. Мы будем анимировать позицию платформы относительно этого родительского узла.
    • AnimatableBody2D представляет собой саму платформу. Этот узел будет перемещаться.
      • Sprite2D: Здесь можно использовать спрайт-лист, отдельные изображения или даже TileMap.
      • CollisionShape2D: Не делайте хитбокс слишком большим, иначе игрок будет казаться «парящим» у края платформы.

Настройте текстуру Sprite2D и форму столкновения соответствующим образом. В AnimatableBody2D установите свойство «Sync to Physics» в «Включено». Поскольку мы перемещаем тело в коде, это гарантирует, что оно перемещается во время физического шага, оставаясь в синхронизации с игроком и другими физическими телами.

Теперь добавьте сценарий к корневому узлу Node2D:

extends Node2D

@export var offset = Vector2(0, -320)
@export var duration = 5.0

func _ready():
    start_tween()

func start_tween():
    var tween = get_tree().create_tween().set_process_mode(Tween.TWEEN_PROCESS_PHYSICS)
    tween.set_loops().set_parallel(false)
    tween.tween_property($AnimatableBody2d, "position", offset, duration / 2)
    tween.tween_property($AnimatableBody2d, "position", Vector2.ZERO, duration / 2)

Мы использовали несколько опций Tween здесь, чтобы сделать все более плавным:

  • set_process_mode(): гарантирует, что весь процесс движения происходит во время обработки физики.
  • set_loops(): это делает повторение tween.
  • set_parallel(false): по умолчанию все изменения tween_property() происходят одновременно. Это заставляет их происходить один за другим: сначала перемещение в один конец смещения, затем обратно к началу.

Используя два экспортированных свойства, вы можете настроить движение платформы. Установите смещение, чтобы определить, куда двигается tween относительно своей стартовой точки, и длительность, чтобы определить, как долго занимает завершение цикла.

Добавьте несколько платформ на ваш уровень/мир и опробуйте их:

Скачайте этот проект

Скачайте код проекта здесь: https://github.com/godotrecipes/2d_moving_platforms

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

семь − шесть =

Прокрутить вверх