Godot: add_child () на дочерних узлах экземпляра для рекурсивного создания объектов - PullRequest
0 голосов
/ 29 февраля 2020

Я создаю небольшую программу, которая создает шаблоны изображений, подобные этим, используя сегменты линий, которые вращаются вокруг друг друга: изображение со страницы магазина Engare для справки

Как мне сообщить Годо создать экземпляры сцены Polygon2D, которые я использую как линейные сегменты с началами на узлах Position2D, которые существуют как дети в сцене Polygon2D? Вот пример моего кода:

const SHAPE_MASTER = preload("res://SpinningBar.tscn")
...
func bar_Maker(bar_num, parent_node):
    for i in range(bar_num):
        var GrabbedInstance = SHAPE_MASTER.instance()
        parent_node.add_child(GrabbedInstance)
        bar_Maker(bar_num - 1, $Polygon2D/RotPoint)
...
func _physics_process(delta):
...
    if Input.is_action_just_pressed("Switch Item"): # from an older version of the program, just bound to ctrl
        bar_Maker(segment_count, BarParent)

bar_num - это количество баров для экземпляра, установленное в другом месте (диапазон 1-6).
parent_node в основной сцене - это просто Node2D с именем BarParent.
SpinningBar.tscn Я создаю экземпляр, так как GrabbedInstance имеет узел Position2D с именем "RotPoint" в противоположном конце сегмента от начала объекта. Именно в этот момент я хотел бы, чтобы последовательные сегменты вращались вокруг (а также помещал эмиттеры частиц здесь, чтобы отслеживать линии, но это тривиальная проблема, когда на этот первый ответ дан ответ).

Запуск как есть и создание дополнительных чем 1 линейный сегмент возвращает «Попытка вызова функции add_child в базовом« нулевом экземпляре »для нулевого экземпляра». Очевидно, что я добавляю второй (и более поздние) сегменты неправильно, поэтому я знаю, что это связано с тем, как я выполняю рекурсию / выбираю новых родителей для сегментов 1+ глубиной узла.

1 Ответ

0 голосов
/ 29 февраля 2020

Прислонитесь головой к стене, и вы найдете ответ:

func bar_Maker(bar_num, parent_node):
    for i in range(bar_num):
        var GrabbedInstance = SHAPE_MASTER.instance()
        parent_node.add_child(GrabbedInstance)
        var new_children = GrabbedInstance.get_children()
        bar_Maker(bar_num - 1, new_children[0])

Если кто-то знает о более изящном способе сделать это, пожалуйста, сообщите мне и будущим читателям. o7

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...