gpt4 book ai didi

Godot 监听来自同一场景的多个实例的信号

转载 作者:行者123 更新时间:2023-12-04 07:18:02 24 4
gpt4 key购买 nike

我有以下场景:播放器敌人攻击

当攻击与敌人发生碰撞时,敌人会发出“onHit”信号。

播放器监听该信号并反弹回来。

这一切都很好,但是现在如果我复制敌人所以有多个敌人场景,我如何听所有这些场景的信号?有没有办法抓取场景的所有实例并连接到它们的所有信号?有没有更好的方法将此消息发送回播放器?

我对 Godot 很陌生,所以任何建议都非常有帮助!谢谢。

最佳答案

使用信号总线。

是的,您可以遍历节点并找到所有敌人(例如,通过比较他们的脚本)。但是,如果所有敌人都将自己注册到 _ready 上的列表(或组)中会更容易。但是,您不需要任何这些。

洞察力是这样的:一个对象可以发出其他对象的信号。

我们通过创建信号总线来利用这一点。这是Godot中的常见模式。如下:

  • 创建一个 autoload (singleton)脚本。 我们称之为SignalBus

  • 在脚本中,定义信号。没有别的了。 *在我们的例子中,我们定义 on_hit:

    signal on_hit
  • 每个需要发出信号的地方都从信号总线上发出。 在这种情况下,敌人会这样做:

    SignalBus.emit_signal("on_hit")
  • 在你需要处理信号的地方,连接它。例如在 _ready 上。 类似这样的:

    func _ready() -> void:
    SignalBus.connect("on_hit", self, "_on_hit")

    func _on_hit() -> void:
    # whatever
    pass

这样,信号的发射器和接收器就不需要相互了解了。他们只需要知道信号总线。随处可用(由于是自动加载)。

关于Godot 监听来自同一场景的多个实例的信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68675099/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com