【问题标题】:GODOT add_to_group with an inheritance variable带有继承变量的 GODOT add_to_group
【发布时间】:2021-07-30 07:09:10
【问题描述】:

我在几个不同的父节点下有几个节点。每个子节点都继承自基本脚本,因为它们都具有相同的功能,只是各个变量值不同。在“_ready”上,我希望每个节点都将自己添加到以其父节点命名的组中。

Base.gd:

extends Area2D

export var _parent: String

func _ready() -> void:
     add_to_group(_parent)

Node1.gd

extends "res://Base.gd"

func _ready() -> void:
     _parent = "MyParentNode"

这似乎应该将 Node1 添加到组“MyParentNode”中。我也收到此调试错误:

add_to_group:条件“!p_identifier.operator String().length()”为真。

【问题讨论】:

    标签: godot gdscript


    【解决方案1】:

    Godot 将首先在基类上递归调用_ready。我将详细介绍 Godot 如何在 my answer to How to know if an overriden method calls its super method or not? 中调用 _ready

    因此,戈多会这样称呼:

    func _ready() -> void:
         add_to_group(_parent)
    

    然后这个:

    func _ready() -> void:
         _parent = "MyParentNode"
    

    因此,调用add_to_group时没有设置_parent


    现在,如果你想设置一个变量,我建议使用setget

    extends Area2D
    
    export var _parent:String setget ser_parent
    
    func set_parent(new_value:String) -> void:
        if _parent == new_value:
            return
    
        if is_in_group(_parent):
            remove_from_group(_parent)
    
        add_to_group(new_value)
        _parent = new_value
    

    这样,每次派生类设置_parent,它都会相应地从组中添加和删除节点。


    顺便说一句,以防万一,如果您只打算将其用于is_in_group,那么您根本不需要组。您可以只检查if node._parent == something,而不是检查if node.is_in_group(something)

    此外,如果这是基于父节点的,您可以使用get_parent()检查父节点:if node.get_parent() == somethingif node.get_parent().name == something我提醒你get_children

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-17
      • 1970-01-01
      • 2013-08-21
      • 1970-01-01
      • 2014-04-06
      • 2011-09-12
      相关资源
      最近更新 更多