04 Experimentos con Interfaces - hektorprofe/godot-descubre GitHub Wiki
Escena con nombre SandboxInterface.tscn
y los scripts en un directorio scripts/SandboxInterface
.
Vamos escondiendo los nodos que no usemos y yastá.
43. Botón que Cambia de Color
Node base: BotonColor
extends Button
# Lista de colores para alternar
@export var colors = [Color.RED, Color.GREEN, Color.BLUE, Color.YELLOW]
var current_color_index = 0
func _ready():
# Conectar la señal de presionar el botón a una función local
self.connect("pressed", _on_Button_pressed)
func _on_Button_pressed():
# Cambiar al siguiente color
# 0+0 % 4 => 0 \
# 0+1 % 4 => 1 |
# 1+1 % 4 => 2 |
# 2+1 % 4 => 3 /
# 3+1 % 4 => 0 \
# 4+1 % 4 => 1 |
# 5+1 % 4 => 2 |
# 6+1 % 4 => 3 /
current_color_index = (current_color_index + 1) % colors.size()
self.self_modulate = colors[current_color_index] # no afecta a los hijos
44. Contador de Clics
Node base: BotonContador
extends Button
# Inicializa el contador de clics
@export var label : Label
var click_count : int = 0
func _ready():
# Conecta la señal 'pressed' del botón al método '_on_Button_pressed'
self.connect("pressed", _on_Button_pressed)
# Inicializa el texto del contador de clics
label.text = "Clics: 0"
func _on_Button_pressed():
# Incrementa el contador de clics
click_count += 1
# Actualiza el texto del label para mostrar el nuevo número de clics
label.text = "Clics: " + str(click_count) # Acceso con variable exportada
%Label.text = "Clics: " + str(click_count) # Acceso con nombre único
get_parent().get_node("Label").text = "Clics: " + str(click_count) # Acceso al padre y hermano
get_node("../Label").text = "Clics: " + str(click_count) # Acceso relativo
45. Slider de Tamaño
Node base: SliderTamano
extends HSlider
@export var icon : Sprite2D
func _ready() -> void:
# Asegúrate de conectar la señal 'value_changed' del Slider a este método.
connect("value_changed", _on_Slider_value_changed)
self.min_value = 0.1
self.max_value = 3.0
self.step = 0.1
self.value = 1
func _on_Slider_value_changed(value):
# Ajusta la escala del Sprite basándose en el valor del Slider.
# El valor del Slider ajusta directamente la propiedad de escala del Sprite.
icon.scale = Vector2(value, value) # Acceso con variable exportada
%Icon.scale = Vector2(value, value) # Acceso con nombre único
get_parent().get_node("Icon").scale = Vector2(value, value) # Acceso al padre y hermano
get_node("../Icon").scale = Vector2(value, value) # Acceso relativo
46. Menú Selección OptionButton
Node base: BotonSeleccion
extends OptionButton
@export var label : Label
func _ready() -> void:
# Asegúrate de conectar la señal 'item_selected' del OptionButton a este método.
self.connect("item_selected", _on_OptionButton_item_selected)
func _on_OptionButton_item_selected(index):
# Actualiza el texto del Label con la opción seleccionada del OptionButton.
label.text = self.get_item_text(index)
47. Selector Fecha SpinBox
Node base: SelectorFecha
extends Label
@export var spinbox_dia : SpinBox # Manualmente
@export var spinbox_mes : SpinBox # Manualmente
@export var spinbox_ano : SpinBox # Manualmente
# El value no lo usaremos aunque se pasa desde value_changed(value)
func actualizar(value):
var fecha = "Fecha seleccionada: %s/%s/%s"
self.text = fecha % [spinbox_dia.value, spinbox_mes.value, spinbox_ano.value]