我如何在主要场景的脚本中访问或读取纹理布丁的值? 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]这将创建一个domino_pressed(n)
# in button's script
...
signal domino_pressed(n)
func _on_pressed() -> void:
domino_pressed.emit(_valor)
...
函数。现在,用该值安全地将其付诸实践,因为它已安全地传递给主要场景。
_on_domino_pressed(n)
一旦您学习何时将它们实施到您的项目中,因此信号是强大的,并且非常有用。不要忘记,带有信号的参数可以是任何内容,包括节点本身的信息 - 因此,您可以识别并记住哪些节点共享了哪些信号。