Swapping childs of a hboxcontainer

Godot Version

4.2

Question

func _start_animation_right():
    animation_in_progress = true
    var hbox = $MarginContainer2/HBoxContainer
    var last_child = worlds[worlds.size()-1]
    hbox.move_child(last_child, 0)
    
    selected_level = last_child.name
    print("selected level: ", last_child.name) #Level selection is working

    var last_world = worlds.pop_back()
    worlds.insert(0, last_world)

    animation_in_progress = false

My script right above is modifying the position of control nodes consiting of labels and icons inside an hboxcontainer to swap their positions. However instead of moving correctly they only jiggle (?) a little bit

Illustration:

how world 4 can be behind world 1 if it’s in a hbox

1 Like

I have absolutely no idea, but it’s not even bothering me since he will be hidden.
Here’s whole code if it can help

1 Like


just fyi, this is fresh from download, with the random branch. possibly forgot to push new thing
if i open anyway:
image

1 Like

Just made a new push but i’m not exactly sure why it’s doing this, if it’s not working i’ll try to figure it out

yes, but this is about the main menu:


notice what’s wrong here?

the move child definitely work, but your texturerect wont automatically moved to the right position because it’s a set position from the center of the parent World2 control node

Oh. I get it the labels, they are not positioned on the nodes, or with an offset.

the label of “world 2” also is a set position from inspector dock to -254:

if you dont mind about no animation, then it’s possible to make the hbox with control nodes works as intended

is this what you wanted it to be looked like?

1 Like

Exactly! Thank to you i managed to make it work, i reverted the script to scroll to left and it working fine!

1 Like

i will just drop the scene here in case you wanted to see how it managed to be looking like that, but this will need you to reload the project by replacing it thru notepad or any 3rd party text editor. remember to save/backup your mainmenu scene before replacing this

mainmenu scene
[gd_scene load_steps=8 format=3 uid="uid://cedft3vy5hg68"]

[ext_resource type="Script" path="res://scripts/mainmenu.gd" id="1_qj2ne"]
[ext_resource type="FontFile" uid="uid://dbjl1e6kdxpl6" path="res://assets/fonts/PixelOperator8.ttf" id="2_h05dh"]
[ext_resource type="Texture2D" uid="uid://cyfxuch6qa87f" path="res://icon.svg" id="3_tlb1w"]

[sub_resource type="Theme" id="Theme_45hd1"]

[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_2rwsq"]
bg_color = Color(0.4, 0.627451, 0.796078, 1)
border_width_left = 2
border_width_top = 2
border_width_right = 2
border_width_bottom = 2
border_color = Color(0, 0, 0, 1)
border_blend = true
expand_margin_left = 10.0
expand_margin_top = 10.0
expand_margin_right = 10.0
expand_margin_bottom = 10.0
shadow_color = Color(1, 1, 1, 0.6)
shadow_size = 2
anti_aliasing = false

[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_8c08p"]
bg_color = Color(0.152941, 0.152941, 0.152941, 1)
expand_margin_left = 5.0
expand_margin_top = 5.0
expand_margin_right = 5.0
expand_margin_bottom = 5.0

[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_llkcd"]
bg_color = Color(0.121569, 0.121569, 0.121569, 0.305882)
expand_margin_top = 10.0

[node name="mainmenu" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_qj2ne")

[node name="MarginContainer" type="MarginContainer" parent="."]
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -107.0
offset_top = 76.0
offset_right = 107.0
offset_bottom = 179.0
grow_horizontal = 2
grow_vertical = 2

[node name="Panel" type="Panel" parent="MarginContainer"]
layout_mode = 2
theme = SubResource("Theme_45hd1")
theme_override_styles/panel = SubResource("StyleBoxFlat_2rwsq")

[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer/Panel"]
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -46.0
offset_top = -40.0
offset_right = 46.0
offset_bottom = 40.0
grow_horizontal = 2
grow_vertical = 2

[node name="Play" type="Button" parent="MarginContainer/Panel/VBoxContainer"]
layout_mode = 2
theme_override_fonts/font = ExtResource("2_h05dh")
text = "Play"

[node name="Options" type="Button" parent="MarginContainer/Panel/VBoxContainer"]
layout_mode = 2
theme_override_fonts/font = ExtResource("2_h05dh")
text = "Options"

[node name="Exit" type="Button" parent="MarginContainer/Panel/VBoxContainer"]
layout_mode = 2
theme_override_fonts/font = ExtResource("2_h05dh")
text = "Exit"

[node name="MarginContainer2" type="MarginContainer" parent="."]
layout_mode = 1
anchors_preset = 5
anchor_left = 0.5
anchor_right = 0.5
offset_left = -539.0
offset_top = 30.0
offset_right = -6.0
offset_bottom = 203.0
grow_horizontal = 2
scale = Vector2(2, 2)

[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer2"]
layout_mode = 2
size_flags_horizontal = 4

[node name="World1" type="Control" parent="MarginContainer2/HBoxContainer"]
y_sort_enabled = true
custom_minimum_size = Vector2(150, 0)
layout_mode = 2

[node name="Label2" type="Label" parent="MarginContainer2/HBoxContainer/World1"]
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -69.0
offset_top = -86.5
offset_right = 69.0
offset_bottom = -62.5
grow_horizontal = 2
grow_vertical = 2
theme_override_fonts/font = ExtResource("2_h05dh")
theme_override_font_sizes/font_size = 24
theme_override_styles/normal = SubResource("StyleBoxFlat_8c08p")
text = "World 1"

[node name="Label1" type="TextureRect" parent="MarginContainer2/HBoxContainer/World1"]
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -32.0
offset_top = -32.0
offset_right = 32.0
offset_bottom = 32.0
grow_horizontal = 2
grow_vertical = 2
texture = ExtResource("3_tlb1w")
expand_mode = 1
stretch_mode = 5

[node name="World4" type="Control" parent="MarginContainer2/HBoxContainer"]
custom_minimum_size = Vector2(150, 0)
layout_mode = 2

[node name="Level4" type="Label" parent="MarginContainer2/HBoxContainer/World4"]
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -69.0
offset_top = -86.5
offset_right = 69.0
offset_bottom = -62.5
grow_horizontal = 2
grow_vertical = 2
theme_override_fonts/font = ExtResource("2_h05dh")
theme_override_font_sizes/font_size = 24
text = "World 4"

[node name="Level5" type="TextureRect" parent="MarginContainer2/HBoxContainer/World4"]
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -32.0
offset_top = -32.0
offset_right = 32.0
offset_bottom = 32.0
grow_horizontal = 2
grow_vertical = 2
texture = ExtResource("3_tlb1w")
expand_mode = 1
stretch_mode = 5

[node name="World2" type="Control" parent="MarginContainer2/HBoxContainer"]
custom_minimum_size = Vector2(150, 0)
layout_mode = 2

[node name="Label" type="Label" parent="MarginContainer2/HBoxContainer/World2"]
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -69.0
offset_top = -86.5
offset_right = 69.0
offset_bottom = -62.5
grow_horizontal = 2
grow_vertical = 2
theme_override_fonts/font = ExtResource("2_h05dh")
theme_override_font_sizes/font_size = 24
text = "World 2"

[node name="TextureRect" type="TextureRect" parent="MarginContainer2/HBoxContainer/World2"]
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -32.0
offset_top = -32.0
offset_right = 32.0
offset_bottom = 32.0
grow_horizontal = 2
grow_vertical = 2
texture = ExtResource("3_tlb1w")
expand_mode = 1
stretch_mode = 5

[node name="World3" type="Control" parent="MarginContainer2/HBoxContainer"]
custom_minimum_size = Vector2(150, 0)
layout_mode = 2

[node name="Label" type="Label" parent="MarginContainer2/HBoxContainer/World3"]
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -69.0
offset_top = -86.5
offset_right = 69.0
offset_bottom = -62.5
grow_horizontal = 2
grow_vertical = 2
theme_override_fonts/font = ExtResource("2_h05dh")
theme_override_font_sizes/font_size = 24
text = "World 3"

[node name="TextureRect" type="TextureRect" parent="MarginContainer2/HBoxContainer/World3"]
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -32.0
offset_top = -32.0
offset_right = 32.0
offset_bottom = 32.0
grow_horizontal = 2
grow_vertical = 2
texture = ExtResource("3_tlb1w")
expand_mode = 1
stretch_mode = 5

[node name="Panel" type="Panel" parent="MarginContainer2"]
layout_mode = 2
size_flags_vertical = 0
theme_override_styles/panel = SubResource("StyleBoxFlat_llkcd")

[connection signal="pressed" from="MarginContainer/Panel/VBoxContainer/Play" to="." method="_on_play_pressed"]
[connection signal="pressed" from="MarginContainer/Panel/VBoxContainer/Options" to="." method="_on_options_pressed"]
[connection signal="pressed" from="MarginContainer/Panel/VBoxContainer/Exit" to="." method="_on_exit_pressed"]
1 Like