<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://wiki.cifprodolfoucha.es/index.php?action=history&amp;feed=atom&amp;title=LIBGDX_Scene_UI</id>
	<title>LIBGDX Scene UI - Historial de revisiones</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.cifprodolfoucha.es/index.php?action=history&amp;feed=atom&amp;title=LIBGDX_Scene_UI"/>
	<link rel="alternate" type="text/html" href="https://wiki.cifprodolfoucha.es/index.php?title=LIBGDX_Scene_UI&amp;action=history"/>
	<updated>2026-10-18T02:23:37Z</updated>
	<subtitle>Historial de revisiones de esta página en el wiki</subtitle>
	<generator>MediaWiki 1.34.2</generator>
	<entry>
		<id>https://wiki.cifprodolfoucha.es/index.php?title=LIBGDX_Scene_UI&amp;diff=688&amp;oldid=prev</id>
		<title>Wiki: /* Elementos necesarios */</title>
		<link rel="alternate" type="text/html" href="https://wiki.cifprodolfoucha.es/index.php?title=LIBGDX_Scene_UI&amp;diff=688&amp;oldid=prev"/>
		<updated>2016-02-07T15:42:25Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Elementos necesarios&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;es&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Revisión anterior&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revisión del 15:42 7 feb 2016&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l39&quot; &gt;Línea 39:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Línea 39:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Descomprimide os arquivos e copialos ó cartafol Assets do proxecto Android.&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Descomprimide os arquivos e copialos ó cartafol Assets do proxecto Android.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;u&amp;gt;Nota:&amp;lt;/u&amp;gt; &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Tamén podedes &lt;/del&gt;crear o voso propio skin. Un exemplo o tedes [http://pimentoso.blogspot.com.es/2013/04/libgdx-scene2d-skin-quick-tutorial.html neste enlace].&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;br/&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;u&amp;gt;Nota:&amp;lt;/u&amp;gt;  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;* Podedes &lt;/ins&gt;crear o voso propio skin. Un exemplo o tedes [http://pimentoso.blogspot.com.es/2013/04/libgdx-scene2d-skin-quick-tutorial.html neste enlace]&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;* Podedes utilizar [https://github.com/cobolfoo/gdx-skineditor esta ferramenta] para crear un skin&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;O que imos facer con estes arquivos é crear un estilo (parecido o CSS de HTML ou os arquivos skin de ASP.NET).&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;O que imos facer con estes arquivos é crear un estilo (parecido o CSS de HTML ou os arquivos skin de ASP.NET).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Wiki</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.cifprodolfoucha.es/index.php?title=LIBGDX_Scene_UI&amp;diff=490&amp;oldid=prev</id>
		<title>Wiki: Página creada con «&lt;span style=&quot;font-size:150%;&quot;&gt;UNIDADE 3: Scene2D UI&lt;/span&gt;  ===Introdución===   Información na wiki: https://github.com/libgdx/libgdx/wiki/Scene2d.ui   Neste punto imos e...»</title>
		<link rel="alternate" type="text/html" href="https://wiki.cifprodolfoucha.es/index.php?title=LIBGDX_Scene_UI&amp;diff=490&amp;oldid=prev"/>
		<updated>2015-12-11T17:19:03Z</updated>

		<summary type="html">&lt;p&gt;Página creada con «&amp;lt;span style=&amp;quot;font-size:150%;&amp;quot;&amp;gt;UNIDADE 3: Scene2D UI&amp;lt;/span&amp;gt;  ===Introdución===   Información na wiki: https://github.com/libgdx/libgdx/wiki/Scene2d.ui   Neste punto imos e...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nueva&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;span style=&amp;quot;font-size:150%;&amp;quot;&amp;gt;UNIDADE 3: Scene2D UI&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Introdución===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Información na wiki: https://github.com/libgdx/libgdx/wiki/Scene2d.ui&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Neste punto imos explicar outro recurso do framework que é o Scene2d-ui (scene 2d user interface).&lt;br /&gt;
&lt;br /&gt;
Ven ser como o [https://github.com/libgdx/libgdx/wiki/Scene2d Scene] pero aplicado os recursos gráficos que imos necesitar para construír unha interface de usuario.&lt;br /&gt;
Este paquete incorpora moitas clases típicas dunha interface (botóns, cadros de texto, checkbox....). &lt;br /&gt;
&lt;br /&gt;
O Scene é outra forma de xestionar os elementos gráficos nun xogo.&lt;br /&gt;
Basease no uso de Actor´s. Cada Actor ven ser un elemento gráfico do xogo sobre o cal queremos ter algún control.&lt;br /&gt;
Permite debuxar e xestionar o control do elemento dentro da propia clase Actor (mestura Modelo-Vista-Controlador). Fai que o seu control sexa moi sinxelo e como característica que a min máis me gosta, ten a posibilidade de asociar a cada Actor unha serie de accións. As accións poden afectar ó seu aspecto (deformalo, cambiarlle a cor,....) como a súa posición,... Ditas accións pódense programar para que vaian unha detrás doutra, en paralelo, que se executen despois dun tempo, que se repitan....&lt;br /&gt;
&lt;br /&gt;
Centrándonos no Scene2D UI, teremos esas mesmas opcións pero aplicados a elementos gráficos propios dun deseño da interface dun usuario.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Elementos necesarios===&lt;br /&gt;
&lt;br /&gt;
Necesitamos:&lt;br /&gt;
* Un [http://http://mediawiki.cifprodolfoucha.es/index.php?title=LIBGDX_TextureAtlas Atlas] con todos os gráficos necesarios: Os gráficos das fontes, dos botóns,....&lt;br /&gt;
* Un arquivo json no que están definidos a cor, fonte, gráficos...para cada elemento gráfico. É o que se coñece como un &amp;#039;&amp;#039;&amp;#039;estilo&amp;#039;&amp;#039;&amp;#039; e ven ser un obxecto da [http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/scenes/scene2d/ui/Skin.html clase Skin]. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
O estilo o podemos xerar por programación, pero o máis normal é telo nun arquivo externo coa extensión json.&lt;br /&gt;
&lt;br /&gt;
Como punto de partido imos a utilizar o arquivo json xunto cos bmp, atlas e fonte necesarios que veñen nos exemplos do motor de xogos:&lt;br /&gt;
https://github.com/libgdx/libgdx/tree/master/tests/gdx-tests-android/assets/data =&amp;gt; Arquivo uiskin.atlas, uiskin.png,uiskin.json e default.fnt.&lt;br /&gt;
&lt;br /&gt;
Podedes descargar estes arquivos dende este enlace: [[Media:LIBGDX_stage2dui.zip]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Nota:&amp;lt;/u&amp;gt; Se descargades os arquivos do sitio web, o estilo definido para a lista variou, polo que vos dará un erro. &lt;br /&gt;
Podedes ver a diferenza no arquivo adxunto.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Descomprimide os arquivos e copialos ó cartafol Assets do proxecto Android.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Nota:&amp;lt;/u&amp;gt; Tamén podedes crear o voso propio skin. Un exemplo o tedes [http://pimentoso.blogspot.com.es/2013/04/libgdx-scene2d-skin-quick-tutorial.html neste enlace].&lt;br /&gt;
&lt;br /&gt;
O que imos facer con estes arquivos é crear un estilo (parecido o CSS de HTML ou os arquivos skin de ASP.NET).&lt;br /&gt;
&lt;br /&gt;
Se editamos o arquivo json podemos ver entre outras cousas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
com.badlogic.gdx.graphics.g2d.BitmapFont: { default-font: { file: default.fnt } },&lt;br /&gt;
com.badlogic.gdx.graphics.Color: {&lt;br /&gt;
green: { a: 1, b: 0, g: 1, r: 0 },&lt;br /&gt;
white: { a: 1, b: 1, g: 1, r: 1 },&lt;br /&gt;
red: { a: 1, b: 0, g: 0, r: 1 },&lt;br /&gt;
black: { a: 1, b: 0, g: 0, r: 0 }&lt;br /&gt;
},&lt;br /&gt;
com.badlogic.gdx.scenes.scene2d.ui.Skin$TintedDrawable: {&lt;br /&gt;
dialogDim: { name: white, color: { r: 0, g: 0, b: 0, a: 0.45 } }&lt;br /&gt;
},&lt;br /&gt;
com.badlogic.gdx.scenes.scene2d.ui.Button$ButtonStyle: {&lt;br /&gt;
default: { down: default-round-down, up: default-round },&lt;br /&gt;
toggle: { down: default-round-down, checked: default-round-down, up: default-round }&lt;br /&gt;
},&lt;br /&gt;
.......................&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analicemos o código:&lt;br /&gt;
&lt;br /&gt;
Nesta liña:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
com.badlogic.gdx.graphics.g2d.BitmapFont: { default-font: { file: default.fnt } },&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Indicamos o tipo de fonte de texto que imos a usar (arquivo default.fnt) nos elementos gráficos (label´s, botóns con texto,...)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Aquí definimos constantes de cores:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
com.badlogic.gdx.graphics.Color: {&lt;br /&gt;
green: { a: 1, b: 0, g: 1, r: 0 },&lt;br /&gt;
white: { a: 1, b: 1, g: 1, r: 1 },&lt;br /&gt;
red: { a: 1, b: 0, g: 0, r: 1 },&lt;br /&gt;
black: { a: 1, b: 0, g: 0, r: 0 }&lt;br /&gt;
},&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Aquí definimos o estilo dos botóns:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
com.badlogic.gdx.scenes.scene2d.ui.Button$ButtonStyle: {&lt;br /&gt;
default: { down: default-round-down, up: default-round },&lt;br /&gt;
toggle: { down: default-round-down, checked: default-round-down, up: default-round }&lt;br /&gt;
},&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Por defecto cando prememos sobre un, poñerá o gráfico &amp;#039;default-round-down&amp;#039; e o soltalo &amp;#039;default-round&amp;#039;. &lt;br /&gt;
Ditos gráficos os podedes atopar no atlas.&lt;br /&gt;
&lt;br /&gt;
===Proceso de uso===&lt;br /&gt;
&lt;br /&gt;
====Cargar o atlas e o estilo asociado====&lt;br /&gt;
Para cargar os estilos necesitamos utilizar a [http://mediawiki.cifprodolfoucha.es/index.php?title=LIBGDX_AssetManager clase AssetManager]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
	private AssetManager assetManager;&lt;br /&gt;
	private Skin skin;&lt;br /&gt;
        ............&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	public void create () {&lt;br /&gt;
                ............&lt;br /&gt;
&lt;br /&gt;
		assetManager = new AssetManager();&lt;br /&gt;
		assetManager.load(&amp;quot;uiskin.atlas&amp;quot;,TextureAtlas.class);&lt;br /&gt;
		assetManager.finishLoading();&lt;br /&gt;
		TextureAtlas atlas = assetManager.get(&amp;quot;uiskin.atlas&amp;quot;, TextureAtlas.class);&lt;br /&gt;
		skin = new Skin(Gdx.files.internal(&amp;quot;uiskin.json&amp;quot;), atlas); // Cargamos os estilos&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	public void dispose() {&lt;br /&gt;
&lt;br /&gt;
		assetManager.dispose();&lt;br /&gt;
		skin.dispose();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Elementos gráficos do scene2d UI====&lt;br /&gt;
&lt;br /&gt;
Máis información en: https://github.com/libgdx/libgdx/wiki/Scene2d.ui#layout-widgets&lt;br /&gt;
&lt;br /&gt;
Unha vez cargados os elementos gráficos entramos no Scene2D.&lt;br /&gt;
&lt;br /&gt;
Este manual é unha pequena introdución do que se pode facer, polo que explicaremos con exemplos, algunhas das posibilidades.&lt;br /&gt;
&lt;br /&gt;
Ó igual que sucede en Android, imos ter diferentes formas de colocar os elementos gráficos na pantalla. O modo en como se colocan é o que se coñece como layout.&lt;br /&gt;
&lt;br /&gt;
A nivel de layout dispoñemos das seguintes opcións:&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/libgdx/libgdx/wiki/Scene2d.ui#table Table]&lt;br /&gt;
* [https://github.com/libgdx/libgdx/wiki/Scene2d.ui#container Container]&lt;br /&gt;
* [https://github.com/libgdx/libgdx/wiki/Scene2d.ui#stack Stack]&lt;br /&gt;
* [https://github.com/libgdx/libgdx/wiki/Scene2d.ui#scrollpane ScrollPane]&lt;br /&gt;
* [https://github.com/libgdx/libgdx/wiki/Scene2d.ui#splitpane SplitPane]&lt;br /&gt;
* [https://github.com/libgdx/libgdx/wiki/Scene2d.ui#tree Tree]&lt;br /&gt;
* [https://github.com/libgdx/libgdx/wiki/Scene2d.ui#verticalgroup VerticalGroup]&lt;br /&gt;
* [https://github.com/libgdx/libgdx/wiki/Scene2d.ui#horizontalgroup HorizontalGroup]&lt;br /&gt;
&lt;br /&gt;
Un dos máis habituais a utilizar é o Table. &lt;br /&gt;
&lt;br /&gt;
Tedes [https://github.com/EsotericSoftware/tablelayout neste enlace] unha explicación bastante completa sobre este layout e o que se pode facer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Unha vez decidido o layout (como se van colocar os elementos) pasaríamos a engadir os elementos gráficos (Widgets) que conformarán a nosa pantalla.&lt;br /&gt;
&lt;br /&gt;
Entre eles temos:&lt;br /&gt;
* [https://github.com/libgdx/libgdx/wiki/Scene2d.ui#label Label]&lt;br /&gt;
* [https://github.com/libgdx/libgdx/wiki/Scene2d.ui#image Image]&lt;br /&gt;
* [https://github.com/libgdx/libgdx/wiki/Scene2d.ui#button Button]&lt;br /&gt;
* [https://github.com/libgdx/libgdx/wiki/Scene2d.ui#textbutton TextButton]&lt;br /&gt;
* [https://github.com/libgdx/libgdx/wiki/Scene2d.ui#imagebutton ImageButton]&lt;br /&gt;
* [https://github.com/libgdx/libgdx/wiki/Scene2d.ui#checkbox CheckBox]&lt;br /&gt;
* [https://github.com/libgdx/libgdx/wiki/Scene2d.ui#textfield TextField]&lt;br /&gt;
* [https://github.com/libgdx/libgdx/wiki/Scene2d.ui#list List]&lt;br /&gt;
&lt;br /&gt;
E moitos outros.&lt;br /&gt;
&lt;br /&gt;
Para poder debuxar todos estes elementos (layout e widgets) imos facer uso da [http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/scenes/scene2d/Stage.html clase Stage]. &lt;br /&gt;
&lt;br /&gt;
Dentro do Stage existen &amp;#039;Actors&amp;#039; que son os elementos que se debuxan (widgets). &lt;br /&gt;
Cada actor ten unha textura, posición, tamaño....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
O Stage vai ter dous métodos moi importantes: act e draw.&lt;br /&gt;
&lt;br /&gt;
    O método act vai &amp;#039;actualizar&amp;#039; todos os actores que se atopen engadidos ó Stage: Neste punto actualizaríamos posicións (se ten accións asociadas, por exemplo)&lt;br /&gt;
    O método draw vai debuxar todos os actores que se atopen no Stage. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Por exemplo, imos facer que o Stage estea composto por un label cun texto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;1,12-13,16-24&amp;quot; &amp;gt;&lt;br /&gt;
	private Stage stage;&lt;br /&gt;
        ...........&lt;br /&gt;
	@Override&lt;br /&gt;
	public void create () {&lt;br /&gt;
&lt;br /&gt;
		assetManager = new AssetManager();&lt;br /&gt;
		assetManager.load(&amp;quot;uiskin.atlas&amp;quot;,TextureAtlas.class);&lt;br /&gt;
		assetManager.finishLoading();&lt;br /&gt;
		TextureAtlas atlas = assetManager.get(&amp;quot;uiskin.atlas&amp;quot;, TextureAtlas.class);&lt;br /&gt;
		skin = new Skin(Gdx.files.internal(&amp;quot;uiskin.json&amp;quot;), atlas); // Cargamos os estilos&lt;br /&gt;
	&lt;br /&gt;
		stage = new Stage();&lt;br /&gt;
		cargarElementosGraficos();&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
	private void cargarElementosGraficos(){&lt;br /&gt;
		Label titulo = new Label(&amp;quot;Texto de exemplo&amp;quot;,skin);&lt;br /&gt;
		titulo.setColor(Color.RED);&lt;br /&gt;
		titulo.setFontScale(2);&lt;br /&gt;
		titulo.setBounds(0, 100, Gdx.graphics.getWidth(), 10);&lt;br /&gt;
		titulo.setAlignment(Align.center);&lt;br /&gt;
&lt;br /&gt;
		stage.addActor(titulo);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	public void resize(int width, int height) {&lt;br /&gt;
	// TODO Auto-generated method stub&lt;br /&gt;
		stage.getViewport().update(width, height, true);&lt;br /&gt;
	}&lt;br /&gt;
	@Override&lt;br /&gt;
	public void dispose() {&lt;br /&gt;
&lt;br /&gt;
		assetManager.dispose();&lt;br /&gt;
		skin.dispose();&lt;br /&gt;
		&lt;br /&gt;
		stage.dispose();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Liñas 16-24: Creamos un elemento gráfico de tipo Label, cun texto e o estilo cargado previamente. &lt;br /&gt;
:Indicamos:&lt;br /&gt;
:: Liña 18: Unha cor.&lt;br /&gt;
:: Liña 19: Un tamaño.&lt;br /&gt;
:: Liña 20: Unha posición e tamaño que vai ocupar o contenedor que ten o label (ven ser como un bloque que rodea ó label). &lt;br /&gt;
:: Liña 21: Aliñación do texto dentro do bloque. Neste caso centrado xa que o bloque ocupa todo o ancho da pantalla.&lt;br /&gt;
&lt;br /&gt;
:: Liña 23: Engadimos o Actor (a etiqueta) ó Stage.&lt;br /&gt;
&lt;br /&gt;
O Stage vai ter a súa propia cámara co que vai debuxar todos os actores.&lt;br /&gt;
&lt;br /&gt;
Para facelo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;6,7&amp;quot; &amp;gt;&lt;br /&gt;
	@Override&lt;br /&gt;
	public void render() {&lt;br /&gt;
		Gdx.gl.glClearColor(0, 0, 0, 1);&lt;br /&gt;
		Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);&lt;br /&gt;
		&lt;br /&gt;
		stage.act(Gdx.graphics.getDeltaTime());&lt;br /&gt;
		stage.draw();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Liña 6: Se os actores tiveran algunha acción ou o programador modificar a súa posición, chamando o método act se actualizarían.&lt;br /&gt;
: Liña 7: Debuxa todos os actores do Stage.&lt;br /&gt;
&lt;br /&gt;
Agora amosaremos un exemplo de uso dunha táboa, engadindo un TextButton e o Label anterior a unha táboa, e engadindo a táboa o Stage:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Nota:&amp;lt;/u&amp;gt; Lembrar que tedes [https://github.com/EsotericSoftware/tablelayout neste enlace] unha explicación bastante completa sobre este layout e o que se pode facer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
	private void cargarElementosGraficos(){&lt;br /&gt;
		&lt;br /&gt;
		Table tabla = new Table(skin);&lt;br /&gt;
		tabla.setFillParent(true);&lt;br /&gt;
		tabla.defaults().space(5); // Espazo por defecto arredor dos compoñenetes&lt;br /&gt;
		tabla.defaults().fillX(); // o elemento (label,botón,..) ocupa todo o ancho =&amp;gt; centrar&lt;br /&gt;
		tabla.align(Align.top|Align.center);&lt;br /&gt;
		&lt;br /&gt;
		Label titulo = new Label(&amp;quot;Texto de exemplo&amp;quot;,skin);&lt;br /&gt;
		titulo.setColor(Color.RED);&lt;br /&gt;
		titulo.setFontScale(2);&lt;br /&gt;
		titulo.setBounds(0, 100, Gdx.graphics.getWidth(), 10);&lt;br /&gt;
		titulo.setAlignment(Align.center);&lt;br /&gt;
		titulo.setPosition(20, 50);&lt;br /&gt;
		&lt;br /&gt;
		tabla.add(titulo);&lt;br /&gt;
		tabla.row();&lt;br /&gt;
		tabla.row();&lt;br /&gt;
		&lt;br /&gt;
		TextButton boton = new TextButton(&amp;quot;Premer aquí&amp;quot;, skin);&lt;br /&gt;
		&lt;br /&gt;
		tabla.add(boton).height(100).width(100);&lt;br /&gt;
		&lt;br /&gt;
		stage.addActor(tabla);&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Nota:&amp;lt;/u&amp;gt; Notaredes que cando prememos o botón no pasa nada e non cambia de aspecto. &lt;br /&gt;
&lt;br /&gt;
Veremos como cando engadamos o evento todo aparece correctamente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Eventos e Accións====&lt;br /&gt;
&lt;br /&gt;
=====Eventos=====&lt;br /&gt;
&lt;br /&gt;
Para xestionar os eventos dos botóns (ou de calquera outro elemento gráfico) temos que utilizar a interface asociada á xestión de dito evento.&lt;br /&gt;
&lt;br /&gt;
* Pero primeiro temos que indicarlle que os eventos os vai xestionar o Stage.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Nota:&amp;lt;/u&amp;gt; Se o voso xogo xa ten unha xestión de eventos (usando o InputProcessor) necesitaredes incorporar esta outra forma e polo tanto teredes que ler este enlace: http://mediawiki.cifprodolfoucha.es/index.php?title=LIBGDX_Xestion_Eventos_GestureListener#Xestionando_m.C3.BAltiples_interfaces_de_eventos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
	@Override&lt;br /&gt;
	public void create () {&lt;br /&gt;
            ..............&lt;br /&gt;
  	    Gdx.input.setInputProcessor(stage);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
	@Override&lt;br /&gt;
	public void dispose() {&lt;br /&gt;
&lt;br /&gt;
		Gdx.input.setInputProcessor(null);&lt;br /&gt;
                ............&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Despois temos que engadir a interface ó botón. No exemplo anterior:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
		boton.addListener(new ClickListener(){&lt;br /&gt;
			public void clicked (InputEvent event, float x, float y) {&lt;br /&gt;
				Gdx.app.exit();&lt;br /&gt;
				}&lt;br /&gt;
		});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Neste exemplo sairemos da aplicación ó premer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
======Diálogos======&lt;br /&gt;
&lt;br /&gt;
Pode ser interesante que apareza unha caixa de diálogo preguntando se estamos seguros de querer saír.&lt;br /&gt;
&lt;br /&gt;
Para facelo temos que utilizar a [http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/scenes/scene2d/ui/Dialog.html clase Dialog]&lt;br /&gt;
&lt;br /&gt;
Un exemplo de uso, sobre o botón anterior:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
new Dialog(&amp;quot;Sair do xogo&amp;quot;, skin, &amp;quot;dialog&amp;quot;) { // Os acentos non aparecen xa que non están no png das letras&lt;br /&gt;
       protected void result (Object object) {&lt;br /&gt;
                    if ((Boolean) object)&lt;br /&gt;
                         Gdx.app.exit();&lt;br /&gt;
       } &lt;br /&gt;
}.text(&amp;quot;Estás seguro de querer sair ?&amp;quot;)&lt;br /&gt;
.button(&amp;quot;Yes&amp;quot;, true)&lt;br /&gt;
.button(&amp;quot;No&amp;quot;,false)&lt;br /&gt;
.key(Keys.ENTER, true)&lt;br /&gt;
.key(Keys.ESCAPE, false)&lt;br /&gt;
.show(stage);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analicemos o código:&lt;br /&gt;
&lt;br /&gt;
* Liña 1: Creamos un obxecto da clase Dialog, indicando o título, o estilo e o tipo de diálogo.&lt;br /&gt;
O tipo de diálogo está definido no arquivo uiskin.json:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
com.badlogic.gdx.scenes.scene2d.ui.Window$WindowStyle: {&lt;br /&gt;
	default: { titleFont: default-font, background: default-window, titleFontColor: white },&lt;br /&gt;
	dialog: { titleFont: default-font, background: default-window, titleFontColor: white, stageBackground: dialogDim }&lt;br /&gt;
},&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Liña 2-5: A este método se chamará automaticamente cando escollamos unha das opcións do Dialog. O parámetro vai servir para saber que se escolleu (true / false = aceptar/cancelar).&lt;br /&gt;
* Liña 5: Texto que aparece no diálogo.&lt;br /&gt;
* Liña 6-7: Texto e valores asociados ás opción de Aceptar-Cancelar. Neste caso valores true/false que son os usados como valores recibidos no método result analizado na liña anterior.&lt;br /&gt;
* Liñas 8-9: Que teclas teñen os mesmos efectos que premer sobre as opcións do diálogo. No exemplo, premer a tecla ENTER ten o mesmo efecto que premer o botón Yes.&lt;br /&gt;
* Liña 10: Amosar o diálogo no Stage.&lt;br /&gt;
&lt;br /&gt;
Este código tería que ser chamado dende o click do botón.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
======Botón BACK de Android======&lt;br /&gt;
&lt;br /&gt;
Como sabedes, cando prememos o botón BACK dun dispositivo Android estamos a pechar a aplicación.&lt;br /&gt;
&lt;br /&gt;
Libgdx permite capturar dito evento e preguntar (como fixemos antes) se realmente queremos saír do xogo.&lt;br /&gt;
&lt;br /&gt;
Para facelo:&lt;br /&gt;
&lt;br /&gt;
* Temos que chamar ó método setCatchBackKey do paquete Gdx.input, indicando true como parámetro.&lt;br /&gt;
* Sobreescribimos ó método keyDown do Stage.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
	@Override&lt;br /&gt;
	public void create () {&lt;br /&gt;
            ...........&lt;br /&gt;
            Gdx.input.setCatchBackKey(true);&lt;br /&gt;
 	    stage = new Stage(){&lt;br /&gt;
			@Override&lt;br /&gt;
			public boolean keyDown(int keyCode) {&lt;br /&gt;
			   if (keyCode == Keys.BACK) {&lt;br /&gt;
				// CHAMAMOS O DIALOGO PARA PECHAR OU NON&lt;br /&gt;
			   }&lt;br /&gt;
			   return super.keyDown(keyCode);&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Accións=====&lt;br /&gt;
&lt;br /&gt;
Información na wiki: https://github.com/libgdx/libgdx/wiki/Scene2d#actions&lt;br /&gt;
&lt;br /&gt;
É un dos elementos máis espectaculares que ten este tipo de programación.&lt;br /&gt;
&lt;br /&gt;
O uso da clase Stage vainos permitir facer diferentes accións sobre os actors que o compoñen.&lt;br /&gt;
&lt;br /&gt;
Dispoñemos de 3 tipos de accións:&lt;br /&gt;
:1. Accións animadas.&lt;br /&gt;
:2. Accións compostas.&lt;br /&gt;
:3. Outras accións.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As &amp;#039;&amp;#039;&amp;#039;accións animadas&amp;#039;&amp;#039;&amp;#039; modifican varias propiedades dos actor´s, coma a posición, rotación, escala e factor alfa. &lt;br /&gt;
Son as seguintes.&lt;br /&gt;
* FadeIn – modifica o factor alfa do actor do valor que teña ó valor 1.&lt;br /&gt;
* FadeOut - modifica o factor alfa do actor do valor que teña ó valor 0.&lt;br /&gt;
* FadeTo - modifica o factor alfa do actor do valor que teña ó valor especificado.&lt;br /&gt;
* MoveBy – move o actor unha distancia especificada.&lt;br /&gt;
* MoveTo – move o actor a unha posición específica.&lt;br /&gt;
* RotateBy – rota o actor engadindo ó ángulo especificado.&lt;br /&gt;
* RotateTo – rota o actor ata un ángulo especificado.&lt;br /&gt;
* ScaleTo – escala o actor ó valor indicado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Accións compostas combinan múltiple accións en unha:&lt;br /&gt;
* Parallel – executa todas as accións en paralelo. Todas á vez.&lt;br /&gt;
* Sequence – executa todas as accións en secuencia. Unha detrás de outra.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Outras accións:&lt;br /&gt;
* Repeat – repite a acción n-veces.&lt;br /&gt;
* Forever – repite a acción indefinidamente.&lt;br /&gt;
* Delay – retrasa a execución dunha acción o tempo especificado.&lt;br /&gt;
* Remove – elimina o Actor especificado do Stage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As accións poden aplicarse sobre cada Actor ou sobre o Stage completo.&lt;br /&gt;
&lt;br /&gt;
Por exemplo, imos facer que a pantalla apareza toda negra e vaian aparecendo os compoñentes do Stage.&lt;br /&gt;
&lt;br /&gt;
Para iso temos que utilizar as Accións: [http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/scenes/scene2d/actions/Actions.html#fadeOut-float- Actions.fadeOut] e [http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/scenes/scene2d/actions/Actions.html#fadeIn-float- Actions.fadeIn].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
  stage.addAction(Actions.fadeOut(0));&lt;br /&gt;
  stage.addAction(Actions.fadeIn(4));&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pero podemos facelo doutra forma máis elegante, xa que a acción pode estar composta por moitas accións as cales se poden executar en paralelo, secuencial, .... como vimos antes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
stage.addAction(Actions.sequence(Actions.fadeOut(0),Actions.fadeIn(4)));&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Nota:&amp;lt;/u&amp;gt; Ós propios actores poden ter accións asociadas, chamando o método addAction de cada un deles.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Nota:&amp;lt;/u&amp;gt; Para non ter que estar escribindo continuamente Actions.acción podemos facer este import:&lt;br /&gt;
::import static com.badlogic.gdx.scenes.scene2d.actions.Actions.*;&lt;br /&gt;
&lt;br /&gt;
Outro exemplo de accións, no que movemos continuamente e de forma indefinida un botón de esquerda a dereita:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
    boton.addAction(Actions.forever(Actions.sequence(Actions.moveTo(0, 0, 5),Actions.moveTo(Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), 5))));&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como vemos temos:&lt;br /&gt;
&lt;br /&gt;
* Actions.forever: Repite de forma indefinida a acción que ven a continuación.&lt;br /&gt;
* Actions.sequence: Executa na orde indicada o conxunto de accións que veñen a continuación.&lt;br /&gt;
* Actions.moveTo(0, 0, 5),Actions.moveTo(Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), 5): Move cara a coordenada (0,0) o botón cunha duración de 5 segundos e move cara a esquina superior dereita o botón cunha duración de 5 segundos.&lt;br /&gt;
&lt;br /&gt;
====Exemplo de código====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Preparación:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* Descargade o seguinte arquivo e descomprimídeo no cartafol assets da versión Android.[[Media:LIBGDX_stage2dui.zip]].&lt;br /&gt;
* Crear unha nova clase e cambiar os diferentes proxectos para que carguen dita clase.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;C¢digo da clase Stage2DUI &amp;#039;&amp;#039;&amp;#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Obxectivo:&amp;#039;&amp;#039;&amp;#039; Exemplo de uso do Stage2D ui, eventos e accións.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
import com.badlogic.gdx.ApplicationAdapter;&lt;br /&gt;
import com.badlogic.gdx.Gdx;&lt;br /&gt;
import com.badlogic.gdx.Input.Keys;&lt;br /&gt;
import com.badlogic.gdx.assets.AssetManager;&lt;br /&gt;
import com.badlogic.gdx.graphics.Color;&lt;br /&gt;
import com.badlogic.gdx.graphics.GL20;&lt;br /&gt;
import com.badlogic.gdx.graphics.g2d.TextureAtlas;&lt;br /&gt;
import com.badlogic.gdx.scenes.scene2d.InputEvent;&lt;br /&gt;
import com.badlogic.gdx.scenes.scene2d.Stage;&lt;br /&gt;
import com.badlogic.gdx.scenes.scene2d.actions.Actions;&lt;br /&gt;
import com.badlogic.gdx.scenes.scene2d.ui.Dialog;&lt;br /&gt;
import com.badlogic.gdx.scenes.scene2d.ui.Label;&lt;br /&gt;
import com.badlogic.gdx.scenes.scene2d.ui.Skin;&lt;br /&gt;
import com.badlogic.gdx.scenes.scene2d.ui.Table;&lt;br /&gt;
import com.badlogic.gdx.scenes.scene2d.ui.TextButton;&lt;br /&gt;
import com.badlogic.gdx.scenes.scene2d.ui.TextField;&lt;br /&gt;
import com.badlogic.gdx.scenes.scene2d.utils.Align;&lt;br /&gt;
import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;&lt;br /&gt;
&lt;br /&gt;
public class Stage2DUI extends ApplicationAdapter {&lt;br /&gt;
   &lt;br /&gt;
	private AssetManager assetManager;&lt;br /&gt;
	private Skin skin;&lt;br /&gt;
	private Stage stage;&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	@Override&lt;br /&gt;
	public void create () {&lt;br /&gt;
&lt;br /&gt;
		assetManager = new AssetManager();&lt;br /&gt;
		assetManager.load(&amp;quot;uiskin.atlas&amp;quot;,TextureAtlas.class);&lt;br /&gt;
		assetManager.finishLoading();&lt;br /&gt;
		TextureAtlas atlas = assetManager.get(&amp;quot;uiskin.atlas&amp;quot;, TextureAtlas.class);&lt;br /&gt;
		skin = new Skin(Gdx.files.internal(&amp;quot;uiskin.json&amp;quot;), atlas); // Cargamos os estilos&lt;br /&gt;
	&lt;br /&gt;
 	    Gdx.input.setCatchBackKey(true);&lt;br /&gt;
		stage = new Stage(){&lt;br /&gt;
			@Override&lt;br /&gt;
			public boolean keyDown(int keyCode) {&lt;br /&gt;
			if (keyCode == Keys.BACK) {&lt;br /&gt;
				avisarSair();&lt;br /&gt;
			}&lt;br /&gt;
			return super.keyDown(keyCode);&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
		Gdx.input.setInputProcessor(stage);&lt;br /&gt;
		&lt;br /&gt;
		cargarElementosGraficos();&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	private void cargarElementosGraficos(){&lt;br /&gt;
		&lt;br /&gt;
		Table tabla = new Table(skin);&lt;br /&gt;
		tabla.setFillParent(true);&lt;br /&gt;
		tabla.defaults().space(5); // Espazo por defecto arredor dos compoñenetes&lt;br /&gt;
		tabla.defaults().fillX(); // o elemento (label,botón,..) ocupa todo o ancho =&amp;gt; centrar&lt;br /&gt;
		tabla.align(Align.top|Align.center);&lt;br /&gt;
		&lt;br /&gt;
		Label titulo = new Label(&amp;quot;Texto de exemplo&amp;quot;,skin);&lt;br /&gt;
		titulo.setColor(Color.RED);&lt;br /&gt;
		titulo.setFontScale(2);&lt;br /&gt;
		titulo.setBounds(0, 100, Gdx.graphics.getWidth(), 10);&lt;br /&gt;
		titulo.setAlignment(Align.center);&lt;br /&gt;
		titulo.setPosition(20, 50);&lt;br /&gt;
		&lt;br /&gt;
		tabla.add(titulo);&lt;br /&gt;
		tabla.row();&lt;br /&gt;
		tabla.row();&lt;br /&gt;
		&lt;br /&gt;
		TextField texto = new TextField(&amp;quot;&amp;quot;, skin);&lt;br /&gt;
		texto.setBounds(0, 50, Gdx.graphics.getWidth(), 10);&lt;br /&gt;
	&lt;br /&gt;
		tabla.add(texto);&lt;br /&gt;
		&lt;br /&gt;
		&lt;br /&gt;
		TextButton boton = new TextButton(&amp;quot;Premer aquí&amp;quot;, skin);&lt;br /&gt;
		boton.addListener(new ClickListener(){&lt;br /&gt;
			public void clicked (InputEvent event, float x, float y) {&lt;br /&gt;
				avisarSair();&lt;br /&gt;
			}&lt;br /&gt;
		});&lt;br /&gt;
		boton.setPosition(0, 0);&lt;br /&gt;
		boton.addAction(Actions.forever(Actions.sequence(Actions.moveTo(0, 0, 5),Actions.moveTo(Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), 5))));&lt;br /&gt;
		stage.addActor(tabla);&lt;br /&gt;
		stage.addActor(boton);&lt;br /&gt;
		&lt;br /&gt;
		stage.setKeyboardFocus(texto);	// Poñemos o foco na caixa de texto&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	private void avisarSair(){&lt;br /&gt;
		new Dialog(&amp;quot;Sair do xogo&amp;quot;, skin, &amp;quot;dialog&amp;quot;) { // Os acentos non aparecen xa que non están no png das letras&lt;br /&gt;
		       protected void result (Object object) {&lt;br /&gt;
		                    if ((Boolean) object)&lt;br /&gt;
		                         Gdx.app.exit();&lt;br /&gt;
		       } &lt;br /&gt;
		}.text(&amp;quot;Estás seguro de querer sair ?&amp;quot;)&lt;br /&gt;
		.button(&amp;quot;Yes&amp;quot;, true)&lt;br /&gt;
		.button(&amp;quot;No&amp;quot;,false)&lt;br /&gt;
		.key(Keys.ENTER, true)&lt;br /&gt;
		.key(Keys.ESCAPE, false)&lt;br /&gt;
		.show(stage);&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	public void render() {&lt;br /&gt;
		Gdx.gl.glClearColor(0, 0, 0, 1);&lt;br /&gt;
		Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);&lt;br /&gt;
		&lt;br /&gt;
		stage.act(Gdx.graphics.getDeltaTime());&lt;br /&gt;
		stage.draw();&lt;br /&gt;
	}&lt;br /&gt;
	@Override&lt;br /&gt;
	public void resize(int width, int height) {&lt;br /&gt;
	// TODO Auto-generated method stub&lt;br /&gt;
		stage.getViewport().update(width, height, true);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	@Override&lt;br /&gt;
	public void dispose() {&lt;br /&gt;
&lt;br /&gt;
		Gdx.input.setInputProcessor(null);&lt;br /&gt;
		assetManager.dispose();&lt;br /&gt;
		skin.dispose();&lt;br /&gt;
		&lt;br /&gt;
		stage.dispose();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ó executar dará como resultado un botón movéndose de forma indefinida e unha caixa de texto para introducir un texto co foco nel.&lt;br /&gt;
&lt;br /&gt;
[[Imagen:LIBGDX_UD3_StageUI_1.jpg|400px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==TAREFA OPTATIVA A FACER==&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Modifica a pantalla principal do xogo:&lt;br /&gt;
&lt;br /&gt;
[[Imagen:LIBGDX_itin1_pantallapresentacion.png|400px|center]]&lt;br /&gt;
&lt;br /&gt;
E utiliza o Stage2d UI para desenvolvela.&lt;br /&gt;
&lt;br /&gt;
Podes engadir efectos de fadein / fadeout ou calquera outro efecto que queiras.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; -- [[Usuario:angelfg|Ángel D. Fernández González]] -- (2015).&lt;/div&gt;</summary>
		<author><name>Wiki</name></author>
		
	</entry>
</feed>