如何从其他Sprite检索变量?

问题描述

我在sprite1中有一个变量:

var answer = false

我想将同一变量传输到sprite2,而不必重新定义,并且当sprite1中的变量更改时,sprite2中的变量也可以更改。

解决方法

假设这两个精灵在某个级别上共享一个父节点,那么只要修改了sprite1,就可以使用观察者模式来更新sprite2。

首先,让我们在Sprite1上设置信号。仅当我们调用update_answer时才发出信号。这意味着我们必须调用它,而不是直接设置answer

如果您熟悉getter和setter,则可以改用setter。否则,此策略会正常工作。

// Sprite1
signal answer_changed(answer)
var answer = false

func update_answer(new_answer):
    answer = new_answer
    emit_signal("answer_changed",new_answer)

父母应同时提及两个孩子。在ready中,连接到sprite1的信号。现在,父级将监听更新。每当收到来自sprite1的信号时,它将自动update_sprite2

// Parent
onready var sprite1 = $Sprite1
onready var sprite2 = $Sprite2

func _ready():
    sprite1.connect("answer_changed",self,"update_sprite2")

func update_sprite2(answer):
    sprite2.answer = answer