Attention | Topic was automatically imported from the old Question2Answer platform. | |
Asked By | Sietrin |
Hello! I’m struggling to understand what I’m doing wrong. I`ve written code that has to create LineEdit for several times but I get:
Can’t add child ‘00’ to ‘Main’, already has a parent ‘Main’.
scene/main/node.cpp:1165 @ add_child()
One LinEdit even is created and I can’t understand why it works in this way.
You should show your code.
kidscancode | 2019-11-09 00:55
extends Control
var a = 0
var x = 20
var cells_array =
func _generate_matrix():
x = ($Dimension.text).to_int();
cells_array.clear()
var c
var pos = Vector2(10, 20)
for i in range(x):
cells_array.append([])
c = LineEdit.new()
for n in range(x):
if a == x:
a = 0
while a < x:
print(n,a)
cells_array[n].append(c)
add_child(cells_array[n][comment1-a], true)
cells_array[n][comment1-a].name = String(n) + String(a)
a +=1
Sietrin | 2019-11-09 05:34
You create x times a Lineedit in the “i” loop but just overwrite the variable c which holds that instance on the next loop iteration thus throwing away the previous instance.
Instead put the line to create a lineedit just before the first time you actually use it. That would be before cells_array[n][comment2-a].append(c)
Why the conditional for setting a=0
? Though it might work this looks dangerous and unnecessary to me. If I understand that correctly then you can just set unconditionally a=0 (without a==x) at that place.
Assign the name directly to c.name (or cells_array[n][comment2-a]) before add_child(...
. It probably also works your way but you avoid that implicitly a preliminary name has to be assigned just to be overwritten anyway in the next line.
wombatstampede | 2019-11-09 11:53
It did work. You saved my reputation, time, mind and etc. I have no words to thank you. And I still don`t understand what exactly went wrong but will try.
Sietrin | 2019-11-09 12:27