How we can using active button in godot 4.2.1 version?

Godot 4.2.1

I have this GDScript code in godot 4.2.1 and I want to use active buttons when I press the buttons, project is work but when I click the buttons active buttons not work, any idea will appreciated.

extends Node2D

var scenes = {
    "one": "res://Scenes/One.tscn",
    "two": "res://Scenes/Two.tscn",
    "three": "res://Scenes/Three.tscn",
    "four": "res://Scenes/Four.tscn"

var oneButton
var twoButton
var threeButton
var fourButton

var oneButtonActive
var twoButtonActive
var threeButtonActive
var fourButtonActive

func _ready():
    # Load active textures here
    oneButtonActive = preload("res://Assets/bg_one.png")
    twoButtonActive = preload("res://Assets/bg_two.png")
    threeButtonActive = preload("res://Assets/bg_three.png")
    fourButtonActive = preload("res://Assets/bg_four.png")

    oneButton = $HBoxContainer/TextureRect/HBoxContainer/oneButton
    twoButton = $HBoxContainer/TextureRect/HBoxContainer2/twoButton
    threeButton = $HBoxContainer/TextureRect/HBoxContainer3/threeButton
    fourButton = $HBoxContainer/TextureRect/HBoxContainer4/fourButton

    oneButton.texture_normal = preload("res://Assets/one.png")
    twoButton.texture_normal = preload("res://Assets/two.png")
    threeButton.texture_normal = preload("res://Assets/three.png")
    fourButton.texture_normal = preload("res://Assets/four.png")

    oneButton.connect("pressed", Callable(self, "_on_one_button_pressed"))
    twoButton.connect("pressed", Callable(self, "_on_two_button_pressed"))
    threeButton.connect("pressed", Callable(self, "_on_three_button_pressed"))
    fourButton.connect("pressed", Callable(self, "_on_four_button_pressed"))

func _on_one_button_pressed():
    oneButton.texture_normal = oneButtonActive

func _on_two_button_pressed():
    twoButton.texture_normal = twoButtonActive

func _on_three_button_pressed():
    threeButton.texture_normal = threeButtonActive

func _on_four_button_pressed():
    fourButton.texture_normal = fourButtonActive

func change_scene(scene_name: String) -> void:
    if scenes.has(scene_name):
        var new_scene_resource = load(scenes[scene_name])
        if new_scene_resource is PackedScene:
            var new_scene = new_scene_resource.instantiate()
            if new_scene:
                # Add the new scene to the tree

                if get_tree().current_scene:
                get_tree().current_scene = new_scene
                print("Error: failed to instance the scene.")
            print("Error: scene not found.")

Does the loaded scene not replace all the buttons? It might be changing the screen so quickly you never see the texture change.

Also, make sure the buttons are TextureButton type.


Just make sure connection to pressed event was established by printing out


for example, then just breakpoint inside change_scene and follow line by line.

A bit of a side comment, but in 4.0+ you don’t need to use strings in connecting signals to functions. You can just write:


Shorter, cleaner and helps avoid any accidental misspellings of method.

Good luck!