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

gui1

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

gui2

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

gui3

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

gui4

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

gui5

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]

image