GODOT add_to_group 带有继承变量
GODOT add_to_group with an inheritance variable
我在几个不同的父节点下有几个节点。每个子节点都继承自基本脚本,因为它们都具有相同的功能,只是不同的变量值。在“_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 将首先递归地在基础 class 上调用 _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
这样,每次派生 class 设置 _parent
,它都会相应地从组中添加和删除节点。
顺便说一句,以防万一,如果您只打算将此用于 is_in_group
,那么您根本不需要群组。您可以检查 if node._parent == something
.
而不是检查 if node.is_in_group(something)
此外,如果这是父节点的谓词,则可以用get_parent()
检查父节点:if node.get_parent() == something
或if node.get_parent().name == something
。 我提醒你 get_children
。
我在几个不同的父节点下有几个节点。每个子节点都继承自基本脚本,因为它们都具有相同的功能,只是不同的变量值。在“_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 将首先递归地在基础 class 上调用 _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
这样,每次派生 class 设置 _parent
,它都会相应地从组中添加和删除节点。
顺便说一句,以防万一,如果您只打算将此用于 is_in_group
,那么您根本不需要群组。您可以检查 if node._parent == something
.
if node.is_in_group(something)
此外,如果这是父节点的谓词,则可以用get_parent()
检查父节点:if node.get_parent() == something
或if node.get_parent().name == something
。 我提醒你 get_children
。