I can clone and entity using:
var newClone= this.entity.clone();
…but I want to make sure that only the top level one gets cloned without its children.
How would I do that?
Cheers
I can clone and entity using:
var newClone= this.entity.clone();
…but I want to make sure that only the top level one gets cloned without its children.
How would I do that?
Cheers
Oh wait… i can just go through and destroy all of its children after I’ve cloned it. (That sounds terrible)
for ( i=0;i< my_tracked_clone.children.length;i++)
{
my_tracked_clone.children[i].destroy();
}
Hah, you’ve found it
I don’t think there is any other way, at least without using private API, other than what you propose: clone and remove all children.
By the way, destroying children with a regular loop like that (zero to last index) will skip some entities, because each time you remove a children the iterator skips the next element.
You should do that in reverse:
for (let i=my_tracked_clone.children.length - 1; i >= 0; i--) {
my_tracked_clone.children[i].destroy();
}
I don’t understand that at all
It’s the same loop as yours, but instead of going from first to last child and removing it … it goes in reverse: last to first.
Ah, I suppose this is to avoid problems if there children nested within children?
Each time you destroy an entity, the .children
array changes (it’s getting smaller), so the for/loop iterator if it had to iterate e.g. through 10 elements when it started … it now has fewer elements. So iterating from first to last will skip some elements.
If you do it in reverse, no issue.
Okay Thanks. I suppose I could forward though if I did this though right…?
this.my_children_length=my_tracked_clone.children.length;
for(i=0;i<this.my_children_length;i++)
{
my_tracked_clone.children[i].destroy();
}
No, better do it in reverse
If you’d like to see why it will not work, try doing some console logs. You will see that each time you destroy an entity the indices are changing.
But surely if I assign a variable to be the length of the array once, it wont change as I iterate though a loop? The array length will change but my new variable is fixed/constant.
No?
Yes, but the length of the array isn’t constant, it changes each time you remove a child.
Here is a similar issue:
Got it. Thanks. That messed up my brain for the day.
Oh yeah, we all got messed up the first time we got to that