我正在制作一个具有多个场景的游戏,并且需要具有 get_node(来自另一个场景的节点)的变量,并且我不知道如何从另一个场景获取节点。
如果我理解正确的话,您想连接到来自另一个场景中的节点的信号。
直接方法可行:
const bullet := preload("res://Bullet.tscn")
func create_bullet() -> void:
var instance := bullet.instance()
instance.connect("hit", self, "method")
get_parent().add_child(instance)
# etc
func method() -> void:
# whatever
pass
Run Code Online (Sandbox Code Playgroud)
然而,这并不总是方便。
为了进一步解耦代码,我建议使用信号总线。
见解是物体可以发出其他物体的信号。因此,如果您有一个每个人都可以引用的公共对象,您可以将信号放在那里。
要拥有每个人都可以引用的对象,请创建一个自动加载(单例)。你可以调用它SignalBus。
在自动加载中有一个脚本,您可以在其中定义信号。例如:
signal hit
Run Code Online (Sandbox Code Playgroud)
然后在需要发出信号的地方执行以下操作:
SignalBus.emit_signal("hit")
Run Code Online (Sandbox Code Playgroud)
要在需要接收它的地方连接到它,请执行以下操作:
func _ready() -> void:
SignalBus.connect("hit", self, "method")
func method() -> void:
# whatever
pass
Run Code Online (Sandbox Code Playgroud)
由于每个场景都可以引用自动加载,因此它们中的任何一个都可以发出信号,并且它们中的任何一个都可以接收信号。他们不需要互相认识。
| 归档时间: |
|
| 查看次数: |
6574 次 |
| 最近记录: |