# Return-value and nodeID using gui.clone\_tree() (SOLVED)

**URL:** <https://forum.defold.com/t/return-value-and-nodeid-using-gui-clone-tree-solved/8512>\
**Category:** Questions\
**Created:** [May 20, 2017, 3:31pm UTC](https://forum.defold.com/t/return-value-and-nodeid-using-gui-clone-tree-solved/8512 "2017-05-20T15:31:46Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![stephenkalisch](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/stephenkalisch/32/4131_2.png) [@stephenkalisch](https://forum.defold.com/u/stephenkalisch)\
**Post date:** [May 20, 2017, 3:31pm UTC](https://forum.defold.com/t/return-value-and-nodeid-using-gui-clone-tree-solved/8512/1 "2017-05-20T15:31:46Z")

</div>

Hey there.

I am cloning a node-tree (box with text and another sprite-box).  
I’ll try to dynamiclly clone it to have couple of buttons based on a table/map.

simply works if I print out the returnvalue of the clone\_tree, but where to find the unique-node-id of each element?  
the return-table is like this:

```lua
DEBUG:SCRIPT: 
{
  hash: [buildmenu/text_buildstructure_base_title] = Headquater@(-35, -3, 0),
  hash: [buildmenu/icon_buildstructure_base] = box@(-40, 0, 0),
  hash: [buildmenu/text_buildstructure_base_description] = 100 Iron@(-35, -13, 0),
  hash: [buildmenu/button_buildstructure_base] = box@(550, 360, 0),
}

DEBUG:SCRIPT: 
{
  hash: [buildmenu/text_buildstructure_base_title] = Headquater@(-35, -3, 0),
  hash: [buildmenu/icon_buildstructure_base] = box@(-40, 0, 0),
  hash: [buildmenu/text_buildstructure_base_description] = 100 Iron@(-35, -13, 0),
  hash: [buildmenu/button_buildstructure_base] = box@(550, 360, 0),
}

DEBUG:SCRIPT: 
{
  hash: [buildmenu/text_buildstructure_base_title] = Headquater@(-35, -3, 0),
  hash: [buildmenu/icon_buildstructure_base] = box@(-40, 0, 0),
  hash: [buildmenu/text_buildstructure_base_description] = 100 Iron@(-35, -13, 0),
  hash: [buildmenu/button_buildstructure_base] = box@(550, 360, 0),
}

```

1. looks like all cloned nodes have the same names etc? is that possible ?
2. how to access (where is the unique node-id) for changing text of childs and for positioning?

---

<div class="post-metadata">

**Author:** ![d954mas](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/d954mas/32/5401_2.png) [@d954mas](https://forum.defold.com/u/d954mas)\
**Post date:** [May 20, 2017, 5:48pm UTC](https://forum.defold.com/t/return-value-and-nodeid-using-gui-clone-tree-solved/8512/2 "2017-05-20T17:48:29Z")

</div>

clone return table, with your nodes. table[hash(“buildmenu…”)] will return node

---

<div class="post-metadata">

**Author:** ![stephenkalisch](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/stephenkalisch/32/4131_2.png) [@stephenkalisch](https://forum.defold.com/u/stephenkalisch)\
**Post date:** [May 20, 2017, 5:55pm UTC](https://forum.defold.com/t/return-value-and-nodeid-using-gui-clone-tree-solved/8512/3 "2017-05-20T17:55:15Z")

</div>

Hey.

Not sure if I understand what you mean. how to access the ID?

if I clone 100 of these node-trees, are they enumerated? Or do they all have the same hashs??

---

<div class="post-metadata">

**Author:** ![stephenkalisch](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/stephenkalisch/32/4131_2.png) [@stephenkalisch](https://forum.defold.com/u/stephenkalisch)\
**Post date:** [May 20, 2017, 5:58pm UTC](https://forum.defold.com/t/return-value-and-nodeid-using-gui-clone-tree-solved/8512/4 "2017-05-20T17:58:11Z")

</div>

Thats how the table is filled:

```lua
	for v, i in ipairs(GLOBAL.structureType) do
		local nodeID = gui.clone_tree(gui.get_node("buildmenu/button_buildstructure_base"))
		pprint(nodeID)
		table.insert(buildStructureMenuItems, {nodeID = nodeID})
	end

```

you mean access to the IDs like this?

```lua
		for v,i in ipairs(buildStructureMenuItems) do
			menuY = menuY + space
			gui.set_position(buildStructureMenuItems[v][hash("buildmenu/button_buildstructure_base")], menuX, menuY, 0)			
		end

```

[EDIT] not working 🙂

---

<div class="post-metadata">

**Author:** ![d954mas](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/d954mas/32/5401_2.png) [@d954mas](https://forum.defold.com/u/d954mas)\
**Post date:** [May 20, 2017, 9:40pm UTC](https://forum.defold.com/t/return-value-and-nodeid-using-gui-clone-tree-solved/8512/5 "2017-05-20T21:40:47Z")

</div>

Clone nodes not have id. gui.clone\_tree return table where key is hash of id, and key the new node. If i understand your code you should try buildStructureMenuItems[v][“nodeID”][hash(“…”)

> **[API reference (GUI)](https://defold.com/ref/gui/)**
>
> Defold is a free and open game engine used for development of console, desktop, mobile and web games.

---

<div class="post-metadata">

**Author:** ![sicher](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/sicher/32/8_2.png) [@sicher](https://forum.defold.com/u/sicher)\
**Post date:** [May 21, 2017, 7:06am UTC](https://forum.defold.com/t/return-value-and-nodeid-using-gui-clone-tree-solved/8512/6 "2017-05-21T07:06:33Z")

</div>

If you need to set an id on a node, use `gui.set_id()`: [API reference (GUI)](http://www.defold.com/ref/gui/#gui.set_id:node-id)

---

<div class="post-metadata">

**Author:** ![stephenkalisch](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/stephenkalisch/32/4131_2.png) [@stephenkalisch](https://forum.defold.com/u/stephenkalisch)\
**Post date:** [May 21, 2017, 6:06pm UTC](https://forum.defold.com/t/return-value-and-nodeid-using-gui-clone-tree-solved/8512/7 "2017-05-21T18:06:47Z")

</div>

Thanks @sicher.

have to get access to every gui-element of the node first. I’ll check the tip of @d954mas (thanks to him too).  
I was sure I have to set a new ID and already saw the SET\_ID already, but without access to the new elements its impossible 🙂

---

<div class="post-metadata">

**Author:** ![sicher](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/sicher/32/8_2.png) [@sicher](https://forum.defold.com/u/sicher)\
**Post date:** [May 21, 2017, 6:28pm UTC](https://forum.defold.com/t/return-value-and-nodeid-using-gui-clone-tree-solved/8512/8 "2017-05-21T18:28:07Z")

</div>

Typically all GUI nodes of a scene are referenced only by the scenes gui script. If you create dynamic nodes you can easily store the references you get back from `gui.new_*()` or `gui.clone_*()` in `self` for future use. There is seldom need for a node id if you already have the reference.

---

<div class="post-metadata">

**Author:** ![stephenkalisch](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/stephenkalisch/32/4131_2.png) [@stephenkalisch](https://forum.defold.com/u/stephenkalisch)\
**Post date:** [May 21, 2017, 6:33pm UTC](https://forum.defold.com/t/return-value-and-nodeid-using-gui-clone-tree-solved/8512/9 "2017-05-21T18:33:47Z")

</div>

Ah ok.  
but if I print out the table with the multiple cloned node (same) the Hashs/reference is all the same name?

/EDIT:

Oh. I should change the IDs BEFORE I stupidly store them into a table 😉 … will check that!

---

<div class="post-metadata">

**Author:** ![stephenkalisch](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/stephenkalisch/32/4131_2.png) [@stephenkalisch](https://forum.defold.com/u/stephenkalisch)\
**Post date:** [May 21, 2017, 7:01pm UTC](https://forum.defold.com/t/return-value-and-nodeid-using-gui-clone-tree-solved/8512/10 "2017-05-21T19:01:17Z")

</div>

Hm… I’m stuck a bit (maybe it was alittle bit too much sun today..)

Thats the line with the cloning…

```lua
local nodeID = gui.clone_tree(gui.get_node("buildmenu/button_buildstructure_base"))

```

..with this output / content /table of nodeID:

```lua
DEBUG:SCRIPT: 
{
  hash: [buildmenu/text_buildstructure_base_description] = 100 Iron@(-35, -13, 0),
  hash: [buildmenu/button_buildstructure_base] = box@(-346.30075073242, 682.10809326172, 0),
  hash: [buildmenu/text_buildstructure_base_title] = Headquater@(-35, -3, 0),
  hash: [buildmenu/icon_buildstructure_base] = box@(-40, 0, 0),
}

```

Thats the line (right after the cloning) where I try to change the IDs of the 3 GUI Elements:

```lua
		gui.set_id(nodeID["buildmenu/icon_buildstructure_base"], "icon_buildstructure_" .. GLOBAL.structureType[v].name)
		gui.set_id(nodeID["buildmenu/text_buildstructure_base_description"], "buildmenu/text_buildstructure_" .. GLOBAL.structureType[v].name .."_description" )
		gui.set_id(nodeID["button_buildstructure_base"], "button_buildstructure_" .. GLOBAL.structureType[v].name)
		gui.set_id(nodeID["text_buildstructure_base_title"], "text_buildstructure_" .. GLOBAL.structureType[v].name .."_title" )

```

running will return the following error:

```lua
ERROR:SCRIPT: main/ingameGUI/ingame.gui_script:12: bad argument #1 to 'set_id' (userdata expected, got nil)

```

May someone has a tip / hint or a solution?

@sicher An example in the manuals would be very helpful 🙂

---

<div class="post-metadata">

**Author:** ![sicher](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/sicher/32/8_2.png) [@sicher](https://forum.defold.com/u/sicher)\
**Post date:** [May 22, 2017, 4:59am UTC](https://forum.defold.com/t/return-value-and-nodeid-using-gui-clone-tree-solved/8512/11 "2017-05-22T04:59:59Z")

</div>

The debug print of the references look the same but they are unique references to each specific node.

---

<div class="post-metadata">

**Author:** ![sicher](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/sicher/32/8_2.png) [@sicher](https://forum.defold.com/u/sicher)\
**Post date:** [May 22, 2017, 5:01am UTC](https://forum.defold.com/t/return-value-and-nodeid-using-gui-clone-tree-solved/8512/12 "2017-05-22T05:01:00Z")

</div>

I’ll see how to clarify this.

---

<div class="post-metadata">

**Author:** ![sicher](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/sicher/32/8_2.png) [@sicher](https://forum.defold.com/u/sicher)\
**Post date:** [May 22, 2017, 6:07am UTC](https://forum.defold.com/t/return-value-and-nodeid-using-gui-clone-tree-solved/8512/13 "2017-05-22T06:07:54Z")

</div>

> [@stephenkalisch](#):
>
> gui.set\_id(nodeID[“buildmenu/icon\_buildstructure\_base”], “icon\_buildstructure\_” .. GLOBAL.structureType[v].name)

should be

```lua
gui.set_id(nodeID[hash("buildmenu/icon_buildstructure_base")], ...)

```

---

<div class="post-metadata">

**Author:** ![sicher](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/sicher/32/8_2.png) [@sicher](https://forum.defold.com/u/sicher)\
**Post date:** [May 22, 2017, 6:12am UTC](https://forum.defold.com/t/return-value-and-nodeid-using-gui-clone-tree-solved/8512/14 "2017-05-22T06:12:31Z")

</div>

But again, there is no need to set an id. You have them in a table that you can store in self for later use:

```lua
self.nodes = nodeID

```

and then you can access the nodes easily:

```lua
gui.set_color(self.nodes[hash("buildmenu/text_buildstructure_base_title")], ...)

```

---

<div class="post-metadata">

**Author:** ![stephenkalisch](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/stephenkalisch/32/4131_2.png) [@stephenkalisch](https://forum.defold.com/u/stephenkalisch)\
**Post date:** [May 22, 2017, 1:43pm UTC](https://forum.defold.com/t/return-value-and-nodeid-using-gui-clone-tree-solved/8512/15 "2017-05-22T13:43:43Z")

</div>

Thanks, the “knot in my brain” is now open 😃 Got it. Sure without IDs (after my brain connected the right synapsis again).  
Sometimes I feed stuck in a black hole waiting for sunlight 😃

Maybe a create a short example so we can mark this topic as solved or as example for the docs

---

<div class="post-metadata">

**Author:** ![stephenkalisch](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/stephenkalisch/32/4131_2.png) [@stephenkalisch](https://forum.defold.com/u/stephenkalisch)\
**Post date:** [May 22, 2017, 2:06pm UTC](https://forum.defold.com/t/return-value-and-nodeid-using-gui-clone-tree-solved/8512/16 "2017-05-22T14:06:31Z")

</div>

I try to change a sprite in my node-tree.  
I tried the gui.set\_texture() already and gui.play\_flipbook() without success.

```lua
gui.play_flipbook(nodeID["buildmenu/icon_buildstructure_base"], "units/Structure_Base")

```

The value I try to set is the same like in the editor, returns error

```lua
ERROR:SCRIPT: main/ingameGUI/ingame.gui_script:13: Texture units/Structure_Base is not specified in scene

```

The texture “units” is already set in the editor of cause.

 ![](https://forum-defold-uploads.b-cdn.net/original/2X/8/8394db82f0e77d1b8a2dc11af709340614bd87d0.jpg)

---

<div class="post-metadata">

**Author:** ![britzl](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/britzl/32/23_2.png) [@britzl](https://forum.defold.com/u/britzl)\
**Post date:** [May 22, 2017, 2:14pm UTC](https://forum.defold.com/t/return-value-and-nodeid-using-gui-clone-tree-solved/8512/17 "2017-05-22T14:14:08Z")

</div>

> [@stephenkalisch](#):
>
> units/Structure\_Base

And `Structure_Base` is an image in the `units` atlas? Is the atlas saved?

---

<div class="post-metadata">

**Author:** ![stephenkalisch](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/stephenkalisch/32/4131_2.png) [@stephenkalisch](https://forum.defold.com/u/stephenkalisch)\
**Post date:** [May 22, 2017, 2:17pm UTC](https://forum.defold.com/t/return-value-and-nodeid-using-gui-clone-tree-solved/8512/18 "2017-05-22T14:17:51Z")

</div>

Hey @britzl.

Sure.

 ![](https://forum-defold-uploads.b-cdn.net/original/2X/2/22d797e3ca2ea7a9dd19aea8c3662708e8a13ca6.jpg)

I’ve tried lots of different ways now:

with and without the “units/” …

I’ve tried the gui.set\_texture() function also as the gui.play\_flipbook() - returns “ERROR:SCRIPT: main/ingameGUI/ingame.gui\_script:13: Animation units/animation\_collector\_collecting invalid for node (no animation set)” as I tried a defined animation.

Need more screens or code?

Thats the actual code:

```lua
	for v, i in ipairs(GLOBAL.structureType) do
		local nodeID = gui.clone_tree(gui.get_node("buildmenu/button_buildstructure_base"))
		-- CHANGE TEXT
		gui.set_text(nodeID["buildmenu/text_buildstructure_base_title"], GLOBAL.structureType[v].name)
		gui.set_text(nodeID["buildmenu/text_buildstructure_base_description"], GLOBAL.structureType[v].buildresource .. " ".. GLOBAL.structureType[v].buildcost)
		
		-- CHANGE SPRITE
		gui.set_texture(nodeID["buildmenu/icon_buildstructure_base"], "Unit_Collector") -- .. GLOBAL.structureType[v].sprite)
		--gui.play_flipbook(nodeID["buildmenu/icon_buildstructure_base"], "units/animation_collector_collecting")-- .. GLOBAL.structureType[v].sprite)
		
		
		--[[	
						DEBUG:SCRIPT: 
						{
						  hash: [buildmenu/button_buildstructure_base] = box@(-346.30075073242, 682.10809326172, 0),
						  hash: [buildmenu/text_buildstructure_base_title] = Headquater@(-35, -3, 0),
						  hash: [buildmenu/icon_buildstructure_base] = box@(-40, 0, 0),
						  hash: [buildmenu/text_buildstructure_base_description] = 100 Iron@(-35, -13, 0),
						}				
		]]
		table.insert(buildStructureMenuItems, nodeID)
	end

```

---

<div class="post-metadata">

**Author:** ![britzl](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/britzl/32/23_2.png) [@britzl](https://forum.defold.com/u/britzl)\
**Post date:** [May 22, 2017, 8:13pm UTC](https://forum.defold.com/t/return-value-and-nodeid-using-gui-clone-tree-solved/8512/19 "2017-05-22T20:13:57Z")

</div>

> [@stephenkalisch](#):
>
> gui.set\_texture() function also as the gui.play\_flipbook()

gui.set\_texture() is only used if you have multiple textures added to your gui and you need to assign an image from a texture other than the one currently assigned to the node. If the image is in the same texture then it’s gui.play\_flipbook() that you’re supposed to use. And as per the API example you should only use the image/animation name from the atlas, ie “Structure\_Base” and not “units/Structure\_Base”.

---

<div class="post-metadata">

**Author:** ![stephenkalisch](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/stephenkalisch/32/4131_2.png) [@stephenkalisch](https://forum.defold.com/u/stephenkalisch)\
**Post date:** [May 22, 2017, 8:20pm UTC](https://forum.defold.com/t/return-value-and-nodeid-using-gui-clone-tree-solved/8512/20 "2017-05-22T20:20:02Z")

</div>

I did / tried. Did not work ☹

```lua
The animation 'Unit_Collector' could not be found.

```

But the “Unit\_Collector” is in that atlas like you can see screen below.

Unit\_Collector or Structure\_Base… all are in that atlas…

// EDIT:

Works!  
Dont know why it didnt work before. Saved everything etc. and ran. hm…  
Doesnt matter. works now perfect.

 ![](https://forum-defold-uploads.b-cdn.net/original/2X/f/f75819f22e5b8c1d8014539bba202caf4687f009.jpg)

Thanks (again and again) for you help @britzl

[Next page](https://forum.defold.com/t/return-value-and-nodeid-using-gui-clone-tree-solved/8512.md?page=2)
