【问题标题】:Godot: add_child() on an instanced node's children to recursively create objectsGodot:在实例节点的子节点上添加_child() 以递归创建对象
【发布时间】:2020-02-28 21:18:38
【问题描述】:

我正在创建一个小程序,它使用围绕彼此旋转的线段创建类似这样的图像模式: image from Engare Steam store page for reference

如何告诉 Godot 创建 Polygon2D 场景的实例,我将其用作线段,其原点位于 Polygon2D 场景中作为子节点存在的 Position2D 节点上?这是我的代码示例:

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 只是一个名为 BarParent 的 Node2D。
我作为 GrabbedInstance 实例化的 SpinningBar.tscn 在对象原点的段的另一端有一个名为“RotPoint”的 Position2D 节点。这就是我希望连续段旋转的点(并且还把粒子发射器放在这里跟踪线,但一旦第一个得到回答,这就是一个微不足道的问题)。

按原样运行并创建超过 1 个线段会返回“尝试在空实例的基础‘空实例’中调用函数‘add_child’。”显然,我错误地添加了第二个(及以后的)段,所以我知道这与我如何为 1+ 个节点深度的段执行递归/选择新父项有关。

【问题讨论】:

    标签: godot


    【解决方案1】:

    用头撞墙,你会找到答案:

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-19
      • 2017-10-01
      • 2017-05-04
      • 1970-01-01
      • 2019-01-22
      • 2012-12-30
      • 1970-01-01
      相关资源
      最近更新 更多