如何通过信号将信息从继承的按钮场景共享到父场景?

问题描述 投票:0回答:1
,并且能够看到纹理按钮场景中的值,但是我不知道如何在主要场景中获得此值。我试图创建一个全球组,但我不知道如何获得值。

我如何在主要场景的脚本中访问或读取纹理布丁的值? below是主要场景和纹理布顿场景的脚本。

class_name PrincipalScene extends Node2D ##CONFS @export_category("Pedras Domino") @export var _pedras = [ preload("res://DominoX/pedras/0_0.tscn"), preload("res://DominoX/pedras/0_1.tscn"), preload("res://DominoX/pedras/0_0.tscn"), preload("res://DominoX/pedras/0_1.tscn"), preload("res://DominoX/pedras/0_0.tscn"), preload("res://DominoX/pedras/0_1.tscn"), preload("res://DominoX/pedras/0_0.tscn"), preload("res://DominoX/pedras/0_0.tscn"), preload("res://DominoX/pedras/0_1.tscn"), preload("res://DominoX/pedras/0_0.tscn"), preload("res://DominoX/pedras/0_1.tscn"), preload("res://DominoX/pedras/0_0.tscn"), preload("res://DominoX/pedras/0_1.tscn"), preload("res://DominoX/pedras/0_0.tscn"), preload("res://DominoX/pedras/0_0.tscn"), preload("res://DominoX/pedras/0_1.tscn"), preload("res://DominoX/pedras/0_0.tscn"), preload("res://DominoX/pedras/0_1.tscn"), preload("res://DominoX/pedras/0_0.tscn"), preload("res://DominoX/pedras/0_1.tscn"), preload("res://DominoX/pedras/0_0.tscn"), preload("res://DominoX/pedras/0_0.tscn"), preload("res://DominoX/pedras/0_0.tscn"), preload("res://DominoX/pedras/0_1.tscn"), preload("res://DominoX/pedras/0_0.tscn"), preload("res://DominoX/pedras/0_1.tscn"), preload("res://DominoX/pedras/0_0.tscn"), preload("res://DominoX/pedras/0_1.tscn") ] var _rng = RandomNumberGenerator.new() @export_category("PANELS") #@export var _panel_topo: GridContainer #@export var _panel_bottom: GridContainer #@export var _panel_left: VBoxContainer #@export var _panel_right: VBoxContainer # Called when the node enters the scene tree for the first time. func _ready() -> void: _rng.randomize() _spawn_random_object() func _process(_delta: float) -> void: pass func _spawn_random_object(): #SELECT THE STONES while(_controle.size() < _pedras.size()): var _random_index = _rng.randi() % _pedras.size() if(!self._controle.has(_random_index)): self._controle.append(_random_index) #GET THE STONES 7 EACH 7 var _topo = _controle.slice(0,7) var _bottom = _controle.slice(7, 14) var _left = _controle.slice(14, 21) var _right = _controle.slice(21, 28) #INSTANCE STONES for i in _topo.size(): $PanelTop/Top.add_child(self._pedras[i].instantiate()) for i in _bottom.size(): $PanelBottom/Bottom.add_child(self._pedras[i].instantiate()) for i in _left.size(): $PanelLeft/Left.add_child(self._pedras[i].instantiate()) for i in _right.size(): $PanelRight/Right.add_child(self._pedras[i].instantiate()) class_name Stone extends TextureButton @export_category("Confs") @export var _valor: int @export var _index: Array[int] var _click_stone: bool = false #STONE VALUE RETURNS func get_valor_pedra() -> int: return _valor #STONE INDEX VALUE RETURNS func get_index_pedra() -> Array[int]: return _index #STONE WAS CLICK func get_click_stone() -> bool: return _click_stone func _on_pressed() -> void: print("Stone Click Value: " + str(get_valor_pedra())) print("Stone Click Array Values" + str(get_index_pedra())) self._click_stone = true self.get_valor_pedra() self.get_index_pedra() self.get_click_stone() print("Click Stone: " + str(self._click_stone)) func _on_button_up() -> void: self._click_stone = false print("Click Stone: " + str(self._click_stone))

	
这似乎您正在尝试向其父母提供场景广播信息。要记住的方便短语是“呼叫并发出信号”。要点是,节点是使用类似

get_node(...).dostuff(...)

与孩子互动并使用信号与父母互动的最佳实践。

我发现了这篇文章

在学习此事时很有帮助。

,解决问题的方法是在通过数字传递的纹理按钮上创建信号,并将信号连接到主要场景。幸运的是,按钮已经有一个信号,该信号在按下纹理布顿时,因此您只需要修改信号即可传递一个值。本质上,最简单的方法是创建一个新信号,该信号由旧信号触发并替换。 首先,将
pressed()
信号从纹理布丁连接到自身。 [单击texturebutton场景,然后转到节点选项卡 - >信号选项卡 - >右键单击按() - >连接 - >选择texturebutton]这将创建一个
godot
1个回答
2
投票
函数。如下所示,创建一个新的信号,并将其传递到体内。

domino_pressed(n)

第二,只需将新信号连接到主节点即可。 [单击texturebutton场景,然后转到节点选项卡 - >信号选项卡 - >右键单击domino_presse() - > connect->选择principalScene]这将创建一个

# in button's script ... signal domino_pressed(n) func _on_pressed() -> void: domino_pressed.emit(_valor) ...

函数。现在,用该值安全地将其付诸实践,因为它已安全地传递给主要场景。 _on_domino_pressed(n) 一旦您学习何时将它们实施到您的项目中,因此信号是强大的,并且非常有用。不要忘记,带有信号的参数可以是任何内容,包括节点本身的信息 - 因此,您可以识别并记住哪些节点共享了哪些信号。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.