Восстановим структуру и код примера Scene Instancing в Godot
Создадим новый проект в Godot и назовём его Scene Instancing Experiment.
Сначала создадим сцену для шарика. Добавим узел RigidBody2D, внутрь него вложим Sprite2D и CollisionShape2D. Для CollisionShape2D выберем форму CircleShape2D. Загрузим текстуру шарика в Sprite2D, настроим форму столкновения под размеры спрайта и сохраним сцену как ball.tscn.
Сцена шарика готова. Теперь создадим основную сцену с шариками и «стаканом» для них.
Создадим новую сцену. Добавим корневой узел Node2D. Вложим в него CanvasLayer, а внутрь CanvasLayer — узел Label.
Снова выберем корневой Node2D и добавим в него ещё один узел — назовём его Node2D2. Затем в корневой Node2D добавим узел StaticBody2D, внутрь которого вложим CollisionPolygon2D и Polygon2D.
После этого в корневой Node2D добавим несколько экземпляров сцены ball.tscn. Также добавим Camera2D. Сохраним полученную сцену как generate_ball.tscn.
Теперь настроим сцену generate_ball.tscn.
В узле Label пропишем текст: «click the mouse to spawn a new ball».
Выделим CollisionPolygon2D и добавим точки, формируя многоугольник. После добавления предпоследней точки нажмём Enter. Теперь шарики будут падать на прозрачный полигон.
Те же точки добавим для Polygon2D и зальём его цветом. Изменим цвет на розовый.
Запустим проект и понаблюдаем: синие шарики падают в розовое корыто.
Осталось добавить код, который будет создавать новые шарики при нажатии левой кнопки мыши. Вспомним псевдокод, который описывает этот процесс.
Загружаем шарик
Функция ввода
Если Мы зажали кнопку мыши и не отпускаем
Выход
Если нажали на кнопку мыши
Если кнопка мыши левая
Вызываем функцию создания шариков
Функция создания шариков
Создание экземпляра узла шарика из шарика
Приравниваем глобальную позицию шарику месту клика мышкой
Добавить дочерний узел
Добавим код к узлу, который мы вложили в Node2D.
Вводим следующий код.
extends Node
@export var Ball:PackedScene
Затем выделяем узел Node и назначаем ему сцену ball.tscn (перетаскиваем файл сцены в соответствующий параметр или выбираем через инспектор).
Теперь нам нужно написать код, который будет создавать экземпляр шара в позиции курсора мыши при клике на экране, после чего шар должен падать вниз.
Следующий код как раз отвечает за эту логику.
extends Node2D
@export var Ball:PackedScene
func _unhandled_input(event: InputEvent) -> void:
if event.is_echo():
return
if event is InputEventMouseButton and event.is_pressed():
if event.button_index == MOUSE_BUTTON_LEFT:
generate(get_global_mouse_position())
func generate(pos:Vector2)->void:
var Ball2:Node2D=Ball.instantiate()
Ball2.global_position=pos;
add_child(Ball2)
pass
Готово,работает!
Конец!
Спасибо за внимание. Сцена работает. Мы восстановили структуру и код примера Scene Instancing в Godot. Спасибо за внимание!
























