<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Bloque 5 on Documentación</title>
    <link>https://documentation.javiercarrasco.es/pmdm/B5/</link>
    <description>Recent content in Bloque 5 on Documentación</description>
    <generator>Hugo</generator>
    <language>es-es</language>
    <atom:link href="https://documentation.javiercarrasco.es/pmdm/B5/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Tema 9. Introducción a LibGDX</title>
      <link>https://documentation.javiercarrasco.es/pmdm/B5/B5_T9_Intro_LibGDX_AST/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://documentation.javiercarrasco.es/pmdm/B5/B5_T9_Intro_LibGDX_AST/</guid>
      <description>&lt;!-- Versión Asteriodes --&gt;&#xA;&lt;h1 id=&#34;tema-9-introducción-a-libgdx&#34;&gt;Tema 9. Introducción a LibGDX&lt;/h1&gt;&#xA;&lt;div class=&#34;book-tabs&#34;&gt;&#xA;&#xA;&lt;input type=&#34;radio&#34; class=&#34;toggle&#34; name=&#34;tabs-0&#34; id=&#34;tabs-0-0&#34; checked=&#34;checked&#34; /&gt;&lt;label for=&#34;tabs-0-0&#34;&gt;Información del tema&lt;/label&gt;&lt;div class=&#34;book-tabs-content markdown-inner&#34;&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Bloque:&lt;/strong&gt; B5 — Motores de juego: análisis e introducción a LibGDX&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Duración aproximada:&lt;/strong&gt; 3 horas&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;input type=&#34;radio&#34; class=&#34;toggle&#34; name=&#34;tabs-0&#34; id=&#34;tabs-0-1&#34;  /&gt;&lt;label for=&#34;tabs-0-1&#34;&gt;Resultados de Aprendizaje&lt;/label&gt;&lt;div class=&#34;book-tabs-content markdown-inner&#34;&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;RA4 — Selecciona y prueba motores de juegos analizando la arquitectura de juegos 2D y 3D.&lt;/li&gt;&#xA;&lt;li&gt;RA5 — Desarrolla juegos 2D y 3D sencillos utilizando motores de juegos.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/div&gt;&#xA;&lt;input type=&#34;radio&#34; class=&#34;toggle&#34; name=&#34;tabs-0&#34; id=&#34;tabs-0-2&#34;  /&gt;&lt;label for=&#34;tabs-0-2&#34;&gt;Criterios de Evaluación&lt;/label&gt;&lt;div class=&#34;book-tabs-content markdown-inner&#34;&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th style=&#34;text-align: center&#34;&gt;Código&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;Criterio&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;RA4-a&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Se han identificado los elementos que componen la arquitectura de un juego 2D y 3D.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;RA4-b&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Se han analizado los componentes de un motor de juegos.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;RA4-c&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Se han analizado entornos de desarrollo de juegos.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;RA4-d&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Se han analizado diferentes motores de juegos, sus características y funcionalidades.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;RA4-e&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Se han identificado los bloques funcionales de un juego existente.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;RA4-f&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Se ha reconocido la representación lógica y espacial de una escena gráfica sobre un juego existente.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;RA5-a&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Se ha establecido la lógica de un nuevo juego.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;RA5-b&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Se han creado los objetos necesarios para el juego y definido sus características.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;RA5-c&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Se han creado las escenas del juego y distribuido los objetos en las mismas.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;RA5-e&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Se han establecido las propiedades físicas de los objetos.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;RA5-g&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Se han utilizado cámaras y configurado la iluminación.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;1-introducción-motores-de-juego-y-libgdx&#34;&gt;1. Introducción: motores de juego y LibGDX&lt;a class=&#34;anchor&#34; href=&#34;#1-introducci%c3%b3n-motores-de-juego-y-libgdx&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;11-por-qué-un-motor-de-juego&#34;&gt;1.1. ¿Por qué un motor de juego?&lt;a class=&#34;anchor&#34; href=&#34;#11-por-qu%c3%a9-un-motor-de-juego&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Cuando desarrollamos una aplicación Android convencional con Jetpack Compose, delegamos en el sistema operativo la gestión del ciclo de renderizado: el sistema decide cuándo redibujar la interfaz en respuesta a cambios de estado. Este modelo, eficiente para formularios, listas o navegación, resulta inadecuado para videojuegos, donde la pantalla debe actualizarse de forma continua —típicamente entre 30 y 60 veces por segundo— independientemente de si ha cambiado algún dato.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Tema 9. Introducción a LibGDX</title>
      <link>https://documentation.javiercarrasco.es/pmdm/B5/B5_T9_Intro_LibGDX_PLT/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://documentation.javiercarrasco.es/pmdm/B5/B5_T9_Intro_LibGDX_PLT/</guid>
      <description>&lt;!-- Versión Plataformas --&gt;&#xA;&lt;h1 id=&#34;tema-9-introducción-a-libgdx&#34;&gt;Tema 9. Introducción a LibGDX&lt;/h1&gt;&#xA;&lt;div class=&#34;book-tabs&#34;&gt;&#xA;&#xA;&lt;input type=&#34;radio&#34; class=&#34;toggle&#34; name=&#34;tabs-0&#34; id=&#34;tabs-0-0&#34; checked=&#34;checked&#34; /&gt;&lt;label for=&#34;tabs-0-0&#34;&gt;Información del tema&lt;/label&gt;&lt;div class=&#34;book-tabs-content markdown-inner&#34;&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Bloque:&lt;/strong&gt; B5 — Motores de juego: análisis e introducción a LibGDX&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Duración aproximada:&lt;/strong&gt; 3 horas&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;input type=&#34;radio&#34; class=&#34;toggle&#34; name=&#34;tabs-0&#34; id=&#34;tabs-0-1&#34;  /&gt;&lt;label for=&#34;tabs-0-1&#34;&gt;Resultados de Aprendizaje&lt;/label&gt;&lt;div class=&#34;book-tabs-content markdown-inner&#34;&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;RA4 — Selecciona y prueba motores de juegos analizando la arquitectura de juegos 2D y 3D.&lt;/li&gt;&#xA;&lt;li&gt;RA5 — Desarrolla juegos 2D y 3D sencillos utilizando motores de juegos.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/div&gt;&#xA;&lt;input type=&#34;radio&#34; class=&#34;toggle&#34; name=&#34;tabs-0&#34; id=&#34;tabs-0-2&#34;  /&gt;&lt;label for=&#34;tabs-0-2&#34;&gt;Criterios de Evaluación&lt;/label&gt;&lt;div class=&#34;book-tabs-content markdown-inner&#34;&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th style=&#34;text-align: center&#34;&gt;Código&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;Criterio&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;RA4-a&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Se han identificado los elementos que componen la arquitectura de un juego 2D y 3D.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;RA4-b&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Se han analizado los componentes de un motor de juegos.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;RA4-c&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Se han analizado entornos de desarrollo de juegos.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;RA4-d&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Se han analizado diferentes motores de juegos, sus características y funcionalidades.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;RA4-e&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Se han identificado los bloques funcionales de un juego existente.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;RA4-f&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Se ha reconocido la representación lógica y espacial de una escena gráfica sobre un juego existente.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;RA5-a&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Se ha establecido la lógica de un nuevo juego.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;RA5-b&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Se han creado los objetos necesarios para el juego y definido sus características.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;RA5-c&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Se han creado las escenas del juego y distribuido los objetos en las mismas.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;RA5-e&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Se han establecido las propiedades físicas de los objetos.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;RA5-g&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Se han utilizado cámaras y configurado la iluminación.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;1-introducción-motores-de-juego-y-libgdx&#34;&gt;1. Introducción: motores de juego y LibGDX&lt;a class=&#34;anchor&#34; href=&#34;#1-introducci%c3%b3n-motores-de-juego-y-libgdx&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;11-por-qué-un-motor-de-juego&#34;&gt;1.1. ¿Por qué un motor de juego?&lt;a class=&#34;anchor&#34; href=&#34;#11-por-qu%c3%a9-un-motor-de-juego&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Cuando desarrollamos una aplicación Android convencional con Jetpack Compose, el sistema operativo decide cuándo redibujar la interfaz en respuesta a cambios de estado. Este modelo, eficiente para formularios y listas, resulta inadecuado para videojuegos, donde la pantalla debe actualizarse de forma continua —típicamente entre 30 y 60 veces por segundo— independientemente de si ha cambiado algún dato.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Tema 10. KotlinAsteroids — Juego de asteroides 2D completo</title>
      <link>https://documentation.javiercarrasco.es/pmdm/B5/B5_T10_Juego_Completo_AST/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://documentation.javiercarrasco.es/pmdm/B5/B5_T10_Juego_Completo_AST/</guid>
      <description>&lt;!-- Versión Asteroides --&gt;&#xA;&lt;h1 id=&#34;tema-10-kotlinasteroids--juego-de-asteroides-2d-completo&#34;&gt;Tema 10: KotlinAsteroids — Juego de asteroides 2D completo&lt;/h1&gt;&#xA;&lt;div class=&#34;book-tabs&#34;&gt;&#xA;&#xA;&lt;input type=&#34;radio&#34; class=&#34;toggle&#34; name=&#34;tabs-0&#34; id=&#34;tabs-0-0&#34; checked=&#34;checked&#34; /&gt;&lt;label for=&#34;tabs-0-0&#34;&gt;Información del tema&lt;/label&gt;&lt;div class=&#34;book-tabs-content markdown-inner&#34;&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Bloque:&lt;/strong&gt; B5 — Motores de juego: análisis e introducción a LibGDX&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Duración aproximada:&lt;/strong&gt; 4 horas&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote class=&#39;book-hint info&#39;&gt;&#xA;&lt;p&gt;Este tema desarrolla un proyecto guiado completo que integra todos los conceptos del Tema 9 aplicados a un juego top-down sin gravedad: Box2D con cuerpo libre, partículas, audio y múltiples pantallas. El juego sirve como referencia de arquitectura para el proyecto propio de evaluación.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Tema 10. KotlinPlatformer — Juego 2D completo</title>
      <link>https://documentation.javiercarrasco.es/pmdm/B5/B5_T10_Juego_Completo_PLT/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://documentation.javiercarrasco.es/pmdm/B5/B5_T10_Juego_Completo_PLT/</guid>
      <description>&lt;!-- Versión Plataformas --&gt;&#xA;&lt;h1 id=&#34;tema-10-kotlinplatformer--juego-2d-completo&#34;&gt;Tema 10. KotlinPlatformer — Juego 2D completo&lt;/h1&gt;&#xA;&lt;div class=&#34;book-tabs&#34;&gt;&#xA;&#xA;&lt;input type=&#34;radio&#34; class=&#34;toggle&#34; name=&#34;tabs-0&#34; id=&#34;tabs-0-0&#34; checked=&#34;checked&#34; /&gt;&lt;label for=&#34;tabs-0-0&#34;&gt;Información del tema&lt;/label&gt;&lt;div class=&#34;book-tabs-content markdown-inner&#34;&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Bloque:&lt;/strong&gt; B5 — Motores de juego: análisis e introducción a LibGDX&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Duración aproximada:&lt;/strong&gt; 4 horas&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote class=&#39;book-hint info&#39;&gt;&#xA;&lt;p&gt;Este tema desarrolla un proyecto guiado completo que integra todos los conceptos del Tema 9: Box2D, TiledMap, partículas, animaciones, audio y múltiples pantallas. El juego sirve como referencia de arquitectura para el proyecto propio de evaluación.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;&#xA;&#xA;&lt;input type=&#34;radio&#34; class=&#34;toggle&#34; name=&#34;tabs-0&#34; id=&#34;tabs-0-1&#34;  /&gt;&lt;label for=&#34;tabs-0-1&#34;&gt;Resultados de Aprendizaje&lt;/label&gt;&lt;div class=&#34;book-tabs-content markdown-inner&#34;&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;RA4 — Selecciona y prueba motores de juegos analizando la arquitectura de juegos 2D y 3D.&lt;/li&gt;&#xA;&lt;li&gt;RA5 — Desarrolla juegos 2D y 3D sencillos utilizando motores de juegos.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/div&gt;&#xA;&lt;input type=&#34;radio&#34; class=&#34;toggle&#34; name=&#34;tabs-0&#34; id=&#34;tabs-0-2&#34;  /&gt;&lt;label for=&#34;tabs-0-2&#34;&gt;Criterios de Evaluación&lt;/label&gt;&lt;div class=&#34;book-tabs-content markdown-inner&#34;&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th style=&#34;text-align: center&#34;&gt;Código&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;Criterio&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;RA4-e&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Se han identificado los bloques funcionales de un juego existente.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;RA4-f&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Se ha reconocido la representación lógica y espacial de una escena gráfica sobre un juego existente.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;RA5-a&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Se ha establecido la lógica de un nuevo juego.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;RA5-b&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Se han creado los objetos necesarios para el juego y definido sus características.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;RA5-c&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Se han creado las escenas del juego y distribuido los objetos en las mismas.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;RA5-d&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Se han creado materiales para determinar las propiedades finales de la superficie de un objeto.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;RA5-e&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Se han establecido las propiedades físicas de los objetos.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;RA5-f&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Se ha incorporado sonido a los diferentes eventos del juego.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;RA5-g&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Se han utilizado cámaras y configurado la iluminación.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;RA5-h&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Se han desarrollado e implantado juegos para dispositivos móviles.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;RA5-i&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Se han realizado pruebas de funcionamiento y optimización de los juegos desarrollados.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;RA5-j&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Se han documentado las fases de diseño y desarrollo de los juegos creados.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;1-diseño-del-juego-kotlinplatformer&#34;&gt;1. Diseño del juego: KotlinPlatformer&lt;a class=&#34;anchor&#34; href=&#34;#1-dise%c3%b1o-del-juego-kotlinplatformer&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;KotlinPlatformer&lt;/strong&gt; es un juego de plataformas lateral 2D en el que el jugador controla un personaje que corre y salta sobre plataformas, recoge monedas y evita trampas. El objetivo es alcanzar el final del nivel con el mayor número de monedas posible.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Anexo 6. Referencia rápida de LibGDX</title>
      <link>https://documentation.javiercarrasco.es/pmdm/B5/B5_A6_LibGDX_AST/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://documentation.javiercarrasco.es/pmdm/B5/B5_A6_LibGDX_AST/</guid>
      <description>&lt;!-- Versión Asteroides --&gt;&#xA;&lt;h1 id=&#34;anexo-6-referencia-rápida-de-libgdx&#34;&gt;Anexo 6: Referencia rápida de LibGDX&lt;a class=&#34;anchor&#34; href=&#34;#anexo-6-referencia-r%c3%a1pida-de-libgdx&#34;&gt;#&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;div class=&#34;book-tabs&#34;&gt;&#xA;&#xA;&lt;input type=&#34;radio&#34; class=&#34;toggle&#34; name=&#34;tabs-0&#34; id=&#34;tabs-0-0&#34; checked=&#34;checked&#34; /&gt;&lt;label for=&#34;tabs-0-0&#34;&gt;Información del anexo&lt;/label&gt;&lt;div class=&#34;book-tabs-content markdown-inner&#34;&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Tipo:&lt;/strong&gt; Anexo de apoyo — material de consulta y profundización&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Bloque:&lt;/strong&gt; B5 — Motores de juego: análisis e introducción a LibGDX&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote class=&#39;book-hint info&#39;&gt;&#xA;&lt;p&gt;Este anexo actúa como hoja de consulta rápida durante el desarrollo del proyecto. Recoge las clases, métodos y patrones más usados del Tema 9 y el Tema 10 (KotlinAsteroids), organizados por área temática. Las secciones de física están adaptadas a juegos top-down sin gravedad.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Anexo 6. Referencia rápida de LibGDX</title>
      <link>https://documentation.javiercarrasco.es/pmdm/B5/B5_A6_LibGDX_PLT/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://documentation.javiercarrasco.es/pmdm/B5/B5_A6_LibGDX_PLT/</guid>
      <description>&lt;!-- Versión Plataformas --&gt;&#xA;&lt;h1 id=&#34;anexo-6-referencia-rápida-de-libgdx&#34;&gt;Anexo 6: Referencia rápida de LibGDX&lt;a class=&#34;anchor&#34; href=&#34;#anexo-6-referencia-r%c3%a1pida-de-libgdx&#34;&gt;#&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;div class=&#34;book-tabs&#34;&gt;&#xA;&#xA;&lt;input type=&#34;radio&#34; class=&#34;toggle&#34; name=&#34;tabs-0&#34; id=&#34;tabs-0-0&#34; checked=&#34;checked&#34; /&gt;&lt;label for=&#34;tabs-0-0&#34;&gt;Información del anexo&lt;/label&gt;&lt;div class=&#34;book-tabs-content markdown-inner&#34;&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Tipo:&lt;/strong&gt; Anexo de apoyo — material de consulta y profundización&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Bloque:&lt;/strong&gt; B5 — Motores de juego: análisis e introducción a LibGDX&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote class=&#39;book-hint info&#39;&gt;&#xA;&lt;p&gt;Este anexo actúa como hoja de consulta rápida durante el desarrollo del proyecto. Recoge las clases, métodos y patrones más usados del Tema 9 y el Tema 10 (KotlinPlatformer), organizados por área temática.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;&#xA;&#xA;&lt;input type=&#34;radio&#34; class=&#34;toggle&#34; name=&#34;tabs-0&#34; id=&#34;tabs-0-1&#34;  /&gt;&lt;label for=&#34;tabs-0-1&#34;&gt;Resultados de Aprendizaje&lt;/label&gt;&lt;div class=&#34;book-tabs-content markdown-inner&#34;&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;RA4 — Selecciona y prueba motores de juegos analizando la arquitectura de juegos 2D y 3D.&lt;/li&gt;&#xA;&lt;li&gt;RA5 — Desarrolla juegos 2D y 3D sencillos utilizando motores de juegos.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;1-versiones-y-dependencias-de-referencia&#34;&gt;1. Versiones y dependencias de referencia&lt;a class=&#34;anchor&#34; href=&#34;#1-versiones-y-dependencias-de-referencia&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;gradleproperties&#34;&gt;gradle.properties&lt;a class=&#34;anchor&#34; href=&#34;#gradleproperties&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#4c4f69;background-color:#eff1f5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-properties&#34; data-lang=&#34;properties&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#1e66f5&#34;&gt;gdxVersion&lt;/span&gt;&lt;span style=&#34;color:#04a5e5;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#40a02b&#34;&gt;1.13.1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#1e66f5&#34;&gt;ktxVersion&lt;/span&gt;&lt;span style=&#34;color:#04a5e5;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#40a02b&#34;&gt;1.13.1-rc1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#1e66f5&#34;&gt;kotlinVersion&lt;/span&gt;&lt;span style=&#34;color:#04a5e5;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#40a02b&#34;&gt;2.2.20&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;corebuildgradlekts--dependencias-completas&#34;&gt;core/build.gradle.kts — dependencias completas&lt;a class=&#34;anchor&#34; href=&#34;#corebuildgradlekts--dependencias-completas&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34; title=&#34;Kotlin&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#4c4f69;background-color:#eff1f5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-kotlin&#34; data-lang=&#34;kotlin&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 1&lt;/span&gt;&lt;span&gt;dependencies {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 2&lt;/span&gt;&lt;span&gt;    api(&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;com.badlogicgames.gdx:gdx:&lt;/span&gt;&lt;span style=&#34;color:#40a02b&#34;&gt;$gdxVersion&lt;/span&gt;&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 3&lt;/span&gt;&lt;span&gt;    api(&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;com.badlogicgames.gdx:gdx-box2d:&lt;/span&gt;&lt;span style=&#34;color:#40a02b&#34;&gt;$gdxVersion&lt;/span&gt;&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 4&lt;/span&gt;&lt;span&gt;    api(&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;com.badlogicgames.gdx:gdx-freetype:&lt;/span&gt;&lt;span style=&#34;color:#40a02b&#34;&gt;$gdxVersion&lt;/span&gt;&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;&lt;/span&gt;)   &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// fuentes TTF (opcional)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 5&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 6&lt;/span&gt;&lt;span&gt;    api(&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;io.github.libktx:ktx-app:&lt;/span&gt;&lt;span style=&#34;color:#40a02b&#34;&gt;$ktxVersion&lt;/span&gt;&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 7&lt;/span&gt;&lt;span&gt;    api(&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;io.github.libktx:ktx-graphics:&lt;/span&gt;&lt;span style=&#34;color:#40a02b&#34;&gt;$ktxVersion&lt;/span&gt;&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 8&lt;/span&gt;&lt;span&gt;    api(&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;io.github.libktx:ktx-assets:&lt;/span&gt;&lt;span style=&#34;color:#40a02b&#34;&gt;$ktxVersion&lt;/span&gt;&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 9&lt;/span&gt;&lt;span&gt;    api(&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;io.github.libktx:ktx-math:&lt;/span&gt;&lt;span style=&#34;color:#40a02b&#34;&gt;$ktxVersion&lt;/span&gt;&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;10&lt;/span&gt;&lt;span&gt;    api(&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;io.github.libktx:ktx-box2d:&lt;/span&gt;&lt;span style=&#34;color:#40a02b&#34;&gt;$ktxVersion&lt;/span&gt;&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;11&lt;/span&gt;&lt;span&gt;    api(&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;io.github.libktx:ktx-tiled:&lt;/span&gt;&lt;span style=&#34;color:#40a02b&#34;&gt;$ktxVersion&lt;/span&gt;&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;12&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;androidbuildgradlekts--nativas-box2d-y-freetype&#34;&gt;android/build.gradle.kts — nativas Box2D y FreeType&lt;a class=&#34;anchor&#34; href=&#34;#androidbuildgradlekts--nativas-box2d-y-freetype&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34; title=&#34;Kotlin&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#4c4f69;background-color:#eff1f5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-kotlin&#34; data-lang=&#34;kotlin&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 1&lt;/span&gt;&lt;span&gt;dependencies {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 2&lt;/span&gt;&lt;span&gt;    implementation(project(&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;:core&amp;#34;&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 3&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 4&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// Box2D nativas&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 5&lt;/span&gt;&lt;span&gt;    natives(&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;com.badlogicgames.gdx:gdx-box2d-platform:&lt;/span&gt;&lt;span style=&#34;color:#40a02b&#34;&gt;$gdxVersion&lt;/span&gt;&lt;span style=&#34;color:#40a02b&#34;&gt;:natives-arm64-v8a&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 6&lt;/span&gt;&lt;span&gt;    natives(&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;com.badlogicgames.gdx:gdx-box2d-platform:&lt;/span&gt;&lt;span style=&#34;color:#40a02b&#34;&gt;$gdxVersion&lt;/span&gt;&lt;span style=&#34;color:#40a02b&#34;&gt;:natives-armeabi-v7a&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 7&lt;/span&gt;&lt;span&gt;    natives(&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;com.badlogicgames.gdx:gdx-box2d-platform:&lt;/span&gt;&lt;span style=&#34;color:#40a02b&#34;&gt;$gdxVersion&lt;/span&gt;&lt;span style=&#34;color:#40a02b&#34;&gt;:natives-x86&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 8&lt;/span&gt;&lt;span&gt;    natives(&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;com.badlogicgames.gdx:gdx-box2d-platform:&lt;/span&gt;&lt;span style=&#34;color:#40a02b&#34;&gt;$gdxVersion&lt;/span&gt;&lt;span style=&#34;color:#40a02b&#34;&gt;:natives-x86_64&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 9&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;10&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// FreeType nativas (si se usa gdx-freetype)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;11&lt;/span&gt;&lt;span&gt;    natives(&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;com.badlogicgames.gdx:gdx-freetype-platform:&lt;/span&gt;&lt;span style=&#34;color:#40a02b&#34;&gt;$gdxVersion&lt;/span&gt;&lt;span style=&#34;color:#40a02b&#34;&gt;:natives-arm64-v8a&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;12&lt;/span&gt;&lt;span&gt;    natives(&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;com.badlogicgames.gdx:gdx-freetype-platform:&lt;/span&gt;&lt;span style=&#34;color:#40a02b&#34;&gt;$gdxVersion&lt;/span&gt;&lt;span style=&#34;color:#40a02b&#34;&gt;:natives-armeabi-v7a&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;13&lt;/span&gt;&lt;span&gt;    natives(&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;com.badlogicgames.gdx:gdx-freetype-platform:&lt;/span&gt;&lt;span style=&#34;color:#40a02b&#34;&gt;$gdxVersion&lt;/span&gt;&lt;span style=&#34;color:#40a02b&#34;&gt;:natives-x86&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;14&lt;/span&gt;&lt;span&gt;    natives(&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;com.badlogicgames.gdx:gdx-freetype-platform:&lt;/span&gt;&lt;span style=&#34;color:#40a02b&#34;&gt;$gdxVersion&lt;/span&gt;&lt;span style=&#34;color:#40a02b&#34;&gt;:natives-x86_64&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;15&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#xA;&lt;h2 id=&#34;2-ciclo-de-vida--resumen-visual&#34;&gt;2. Ciclo de vida — resumen visual&lt;a class=&#34;anchor&#34; href=&#34;#2-ciclo-de-vida--resumen-visual&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#4c4f69;background-color:#eff1f5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-plaintext&#34; data-lang=&#34;plaintext&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;AndroidLauncher.onCreate()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        └─► initialize(MiJuego(), config)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                ▼&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        KtxGame.create()           ← inicializar batch, viewport, assets, primera pantalla&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                ├─► resize(w, h)   ← justo después de create() y en cada cambio de tamaño&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                │   ┌─────────────────────────────────────────┐&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                │   │  BUCLE PRINCIPAL (~60 fps)              │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                │   │  render(delta)                          │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                │   │    ├── world.step(...)   [Box2D]        │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                │   │    ├── update entidades                 │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                │   │    └── draw()                           │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                │   └─────────────────────────────────────────┘&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                ├─► pause()        ← Home / llamada / bloqueo de pantalla&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                ├─► resume()       ← volver a la app&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                └─► dispose()      ← cerrar app (puede no ejecutarse si el SO mata el proceso)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                       └── liberar: batch, assets, world, debugRenderer, particles, stage...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;métodos-del-ciclo-de-vida-de-ktxscreen&#34;&gt;Métodos del ciclo de vida de KtxScreen&lt;a class=&#34;anchor&#34; href=&#34;#m%c3%a9todos-del-ciclo-de-vida-de-ktxscreen&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Método&lt;/th&gt;&#xA;          &lt;th&gt;Se llama cuando&lt;/th&gt;&#xA;          &lt;th&gt;Acción típica&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;show()&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;La pantalla se activa&lt;/td&gt;&#xA;          &lt;td&gt;Configurar InputProcessor, iniciar música&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;render(delta)&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Cada fotograma&lt;/td&gt;&#xA;          &lt;td&gt;update + draw&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;resize(w, h)&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Cambio de tamaño&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;viewport.update(w, h, true)&lt;/code&gt;, &lt;code&gt;hud.resize(w, h)&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;pause()&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Pérdida de foco&lt;/td&gt;&#xA;          &lt;td&gt;Pausar música&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;resume()&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Recuperar foco&lt;/td&gt;&#xA;          &lt;td&gt;Reanudar música&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;hide()&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;La pantalla se desactiva&lt;/td&gt;&#xA;          &lt;td&gt;(vacío en la mayoría de casos)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;dispose()&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Liberación explícita&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;dispose()&lt;/code&gt; en todos los recursos propios de esta pantalla&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;3-renderizado--patrones-de-uso&#34;&gt;3. Renderizado — patrones de uso&lt;a class=&#34;anchor&#34; href=&#34;#3-renderizado--patrones-de-uso&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;spritebatch-con-ktx&#34;&gt;SpriteBatch con KTX&lt;a class=&#34;anchor&#34; href=&#34;#spritebatch-con-ktx&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34; title=&#34;Kotlin&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#4c4f69;background-color:#eff1f5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-kotlin&#34; data-lang=&#34;kotlin&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 1&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// Patrón recomendado: use {} garantiza que end() siempre se llama&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 2&lt;/span&gt;&lt;span&gt;batch.use { b &lt;span style=&#34;color:#04a5e5;font-weight:bold&#34;&gt;-&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 3&lt;/span&gt;&lt;span&gt;    b.draw(textura, x, y, ancho, alto)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 4&lt;/span&gt;&lt;span&gt;    b.draw(region, x, y, ancho, alto)   &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// TextureRegion&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 5&lt;/span&gt;&lt;span&gt;    fuente.draw(b, &lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;Texto&amp;#34;&lt;/span&gt;, x, y)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 6&lt;/span&gt;&lt;span&gt;    particula.draw(b, delta)            &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// ParticleEffect&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 7&lt;/span&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 8&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 9&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// Sin KTX&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;10&lt;/span&gt;&lt;span&gt;batch.begin()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;11&lt;/span&gt;&lt;span&gt;batch.draw(textura, x, y)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;12&lt;/span&gt;&lt;span&gt;batch.end()&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;shaperenderer&#34;&gt;ShapeRenderer&lt;a class=&#34;anchor&#34; href=&#34;#shaperenderer&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34; title=&#34;Kotlin&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#4c4f69;background-color:#eff1f5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-kotlin&#34; data-lang=&#34;kotlin&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 1&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// IMPORTANTE: batch debe estar cerrado (end()) antes de abrir ShapeRenderer&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 2&lt;/span&gt;&lt;span&gt;shapeRenderer.projectionMatrix = camera.combined&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 3&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 4&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// Líneas (contornos, debug)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 5&lt;/span&gt;&lt;span&gt;shapeRenderer.begin(&lt;span style=&#34;color:#df8e1d&#34;&gt;ShapeRenderer&lt;/span&gt;.&lt;span style=&#34;color:#df8e1d&#34;&gt;ShapeType&lt;/span&gt;.Line)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 6&lt;/span&gt;&lt;span&gt;shapeRenderer.color = &lt;span style=&#34;color:#df8e1d&#34;&gt;Color&lt;/span&gt;.RED&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 7&lt;/span&gt;&lt;span&gt;shapeRenderer.rect(x, y, w, h)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 8&lt;/span&gt;&lt;span&gt;shapeRenderer.circle(cx, cy, radio, &lt;span style=&#34;color:#fe640b&#34;&gt;32&lt;/span&gt;)   &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// 32 = segmentos&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 9&lt;/span&gt;&lt;span&gt;shapeRenderer.line(x1, y1, x2, y2)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;10&lt;/span&gt;&lt;span&gt;shapeRenderer.end()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;11&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;12&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// Relleno&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;13&lt;/span&gt;&lt;span&gt;shapeRenderer.begin(&lt;span style=&#34;color:#df8e1d&#34;&gt;ShapeRenderer&lt;/span&gt;.&lt;span style=&#34;color:#df8e1d&#34;&gt;ShapeType&lt;/span&gt;.Filled)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;14&lt;/span&gt;&lt;span&gt;shapeRenderer.setColor(r, g, b, a)    &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// RGBA entre 0.0 y 1.0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;15&lt;/span&gt;&lt;span&gt;shapeRenderer.rect(x, y, w, h)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;16&lt;/span&gt;&lt;span&gt;shapeRenderer.end()&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;orthogonaltiledmaprenderer&#34;&gt;OrthogonalTiledMapRenderer&lt;a class=&#34;anchor&#34; href=&#34;#orthogonaltiledmaprenderer&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34; title=&#34;Kotlin&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#4c4f69;background-color:#eff1f5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-kotlin&#34; data-lang=&#34;kotlin&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;1&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// Crear con el mismo unitScale que el viewport&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;2&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;renderer&lt;/span&gt; = OrthogonalTiledMapRenderer(tiledMap, unitScale, batch)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;3&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;4&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// En render() — siempre DENTRO del mismo batch que el juego&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;5&lt;/span&gt;&lt;span&gt;renderer.setView(camera)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;6&lt;/span&gt;&lt;span&gt;renderer.render()                      &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// todas las capas&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;7&lt;/span&gt;&lt;span&gt;renderer.render(intArrayOf(&lt;span style=&#34;color:#fe640b&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#fe640b&#34;&gt;1&lt;/span&gt;))      &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// solo capas 0 y 1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;8&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;9&lt;/span&gt;&lt;span&gt;renderer.dispose()   &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// dispose() al cerrar la pantalla&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#xA;&lt;h2 id=&#34;4-cámara-y-viewport--referencia-rápida&#34;&gt;4. Cámara y Viewport — referencia rápida&lt;a class=&#34;anchor&#34; href=&#34;#4-c%c3%a1mara-y-viewport--referencia-r%c3%a1pida&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34; title=&#34;Kotlin&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#4c4f69;background-color:#eff1f5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-kotlin&#34; data-lang=&#34;kotlin&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 1&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// Crear viewport (elegir uno)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 2&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;viewport&lt;/span&gt; = FitViewport(WORLD_W, WORLD_H)       &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// barras negras, misma área siempre&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 3&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;viewport&lt;/span&gt; = ExtendViewport(WORLD_W, WORLD_H)    &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// extiende el mundo, sin barras&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 4&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;viewport&lt;/span&gt; = ScreenViewport()                    &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// 1:1 píxeles de pantalla&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 5&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 6&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// La cámara del viewport&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 7&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;camera&lt;/span&gt; = viewport.camera &lt;span style=&#34;color:#8839ef&#34;&gt;as&lt;/span&gt; OrthographicCamera&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 8&lt;/span&gt;&lt;span&gt;camera.setToOrtho(&lt;span style=&#34;color:#8839ef&#34;&gt;false&lt;/span&gt;, WORLD_W, WORLD_H)  &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// false = Y crece hacia arriba&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 9&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;10&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// En cada render()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;11&lt;/span&gt;&lt;span&gt;viewport.apply()           &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// aplica las bandas negras si procede&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;12&lt;/span&gt;&lt;span&gt;camera.update()            &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// recalcula la matriz de proyección&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;13&lt;/span&gt;&lt;span&gt;batch.projectionMatrix = camera.combined&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;14&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;15&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// En resize()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;16&lt;/span&gt;&lt;span&gt;viewport.update(width, height, &lt;span style=&#34;color:#8839ef&#34;&gt;true&lt;/span&gt;)  &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// true = centrar cámara&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;17&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;18&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// Seguir al jugador (con suavizado lerp)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;19&lt;/span&gt;&lt;span&gt;camera.position.x = &lt;span style=&#34;color:#df8e1d&#34;&gt;MathUtils&lt;/span&gt;.lerp(camera.position.x, target.x, &lt;span style=&#34;color:#fe640b&#34;&gt;5f&lt;/span&gt; * delta)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;20&lt;/span&gt;&lt;span&gt;camera.position.y = &lt;span style=&#34;color:#df8e1d&#34;&gt;MathUtils&lt;/span&gt;.lerp(camera.position.y, target.y, &lt;span style=&#34;color:#fe640b&#34;&gt;5f&lt;/span&gt; * delta)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;21&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;22&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// Convertir toque de pantalla a coordenadas del mundo&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;23&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;touchVec&lt;/span&gt; = Vector3(&lt;span style=&#34;color:#df8e1d&#34;&gt;Gdx&lt;/span&gt;.input.x.toFloat(), &lt;span style=&#34;color:#df8e1d&#34;&gt;Gdx&lt;/span&gt;.input.y.toFloat(), &lt;span style=&#34;color:#fe640b&#34;&gt;0f&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;24&lt;/span&gt;&lt;span&gt;viewport.unproject(touchVec)   &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// modifica touchVec in-place&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;25&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// Ahora: touchVec.x, touchVec.y = coordenadas del mundo&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#xA;&lt;h2 id=&#34;5-assetmanager--carga-y-acceso&#34;&gt;5. AssetManager — carga y acceso&lt;a class=&#34;anchor&#34; href=&#34;#5-assetmanager--carga-y-acceso&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34; title=&#34;Kotlin&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#4c4f69;background-color:#eff1f5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-kotlin&#34; data-lang=&#34;kotlin&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 1&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;assets&lt;/span&gt; = AssetManager()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 2&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 3&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// Registrar loader de TiledMap (ANTES de encolar .tmx)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 4&lt;/span&gt;&lt;span&gt;assets.setLoader(TiledMap&lt;span style=&#34;color:#04a5e5;font-weight:bold&#34;&gt;::&lt;/span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;class&lt;/span&gt;.java, TmxMapLoader(InternalFileHandleResolver()))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 5&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 6&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// Encolar assets para carga asíncrona&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 7&lt;/span&gt;&lt;span&gt;assets.load(&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;atlas/juego.atlas&amp;#34;&lt;/span&gt;,      TextureAtlas&lt;span style=&#34;color:#04a5e5;font-weight:bold&#34;&gt;::&lt;/span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;class&lt;/span&gt;.java)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 8&lt;/span&gt;&lt;span&gt;assets.load(&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;mapas/nivel1.tmx&amp;#34;&lt;/span&gt;,       TiledMap&lt;span style=&#34;color:#04a5e5;font-weight:bold&#34;&gt;::&lt;/span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;class&lt;/span&gt;.java)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 9&lt;/span&gt;&lt;span&gt;assets.load(&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;audio/musica.ogg&amp;#34;&lt;/span&gt;,       Music&lt;span style=&#34;color:#04a5e5;font-weight:bold&#34;&gt;::&lt;/span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;class&lt;/span&gt;.java)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;10&lt;/span&gt;&lt;span&gt;assets.load(&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;audio/salto.wav&amp;#34;&lt;/span&gt;,        Sound&lt;span style=&#34;color:#04a5e5;font-weight:bold&#34;&gt;::&lt;/span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;class&lt;/span&gt;.java)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;11&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;12&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// Carga asíncrona (en LoadingScreen.render())&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;13&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;if&lt;/span&gt; (assets.update()) { &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;/* carga completa */&lt;/span&gt; }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;14&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;progreso&lt;/span&gt;: Float = assets.progress   &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// 0.0 a 1.0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;15&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;16&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// Carga síncrona (bloquea)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;17&lt;/span&gt;&lt;span&gt;assets.finishLoading()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;18&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;19&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// Acceso a assets ya cargados&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;20&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;atlas&lt;/span&gt;: TextureAtlas = assets.&lt;span style=&#34;color:#8839ef&#34;&gt;get&lt;/span&gt;(&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;atlas/juego.atlas&amp;#34;&lt;/span&gt;, TextureAtlas&lt;span style=&#34;color:#04a5e5;font-weight:bold&#34;&gt;::&lt;/span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;class&lt;/span&gt;.java)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;21&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;mapa&lt;/span&gt;:  TiledMap     = assets.&lt;span style=&#34;color:#8839ef&#34;&gt;get&lt;/span&gt;(&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;mapas/nivel1.tmx&amp;#34;&lt;/span&gt;,  TiledMap&lt;span style=&#34;color:#04a5e5;font-weight:bold&#34;&gt;::&lt;/span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;class&lt;/span&gt;.java)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;22&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;23&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// Liberación (libera TODOS los assets cargados)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;24&lt;/span&gt;&lt;span&gt;assets.dispose()&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#xA;&lt;h2 id=&#34;6-textureatlas-y-animation&#34;&gt;6. TextureAtlas y Animation&lt;a class=&#34;anchor&#34; href=&#34;#6-textureatlas-y-animation&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34; title=&#34;Kotlin&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#4c4f69;background-color:#eff1f5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-kotlin&#34; data-lang=&#34;kotlin&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 1&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// Cargar atlas&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 2&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;atlas&lt;/span&gt; = TextureAtlas(&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;atlas/juego.atlas&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 3&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 4&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// Acceso por nombre&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 5&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;region&lt;/span&gt;:  TextureRegion              = atlas.findRegion(&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;moneda&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 6&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;regiones&lt;/span&gt;: Array&amp;lt;&lt;span style=&#34;color:#df8e1d&#34;&gt;TextureAtlas&lt;/span&gt;.AtlasRegion&amp;gt; = atlas.findRegions(&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;jugador_correr&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 7&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 8&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// Crear animación&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 9&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;frames&lt;/span&gt; = atlas.findRegions(&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;jugador_correr&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;10&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;animacion&lt;/span&gt; = Animation(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;11&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#fe640b&#34;&gt;0.1f&lt;/span&gt;,              &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// duración de cada fotograma en segundos&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;12&lt;/span&gt;&lt;span&gt;    *frames.toArray(), &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// spread operator para vararg&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;13&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#df8e1d&#34;&gt;Animation&lt;/span&gt;.&lt;span style=&#34;color:#df8e1d&#34;&gt;PlayMode&lt;/span&gt;.LOOP&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;14&lt;/span&gt;&lt;span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;15&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;16&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// Obtener fotograma actual en render()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;17&lt;/span&gt;&lt;span&gt;tiempoAnim &lt;span style=&#34;color:#04a5e5;font-weight:bold&#34;&gt;+=&lt;/span&gt; delta&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;18&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;fotograma&lt;/span&gt;: TextureRegion = animacion.getKeyFrame(tiempoAnim)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;19&lt;/span&gt;&lt;span&gt;batch.draw(fotograma, x, y, w, h)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;20&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;21&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// Voltear sprite horizontalmente (sin crear nueva región)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;22&lt;/span&gt;&lt;span&gt;batch.draw(region, x + w, y, -w, h)  &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// x desplazado + ancho negativo&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#xA;&lt;h2 id=&#34;7-entrada-del-usuario&#34;&gt;7. Entrada del usuario&lt;a class=&#34;anchor&#34; href=&#34;#7-entrada-del-usuario&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34; title=&#34;Kotlin&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#4c4f69;background-color:#eff1f5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-kotlin&#34; data-lang=&#34;kotlin&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 1&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// ── Polling (consultar cada frame) ────────────────────────────────────────&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 2&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 3&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#df8e1d&#34;&gt;Gdx&lt;/span&gt;.input.isTouched                    &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// true mientras el dedo esté presionado&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 4&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#df8e1d&#34;&gt;Gdx&lt;/span&gt;.input.justTouched()                &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// true solo el PRIMER fotograma del toque&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 5&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#df8e1d&#34;&gt;Gdx&lt;/span&gt;.input.x / &lt;span style=&#34;color:#df8e1d&#34;&gt;Gdx&lt;/span&gt;.input.y             &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// posición del toque en píxeles de pantalla&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 6&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 7&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#df8e1d&#34;&gt;Gdx&lt;/span&gt;.input.isKeyPressed(&lt;span style=&#34;color:#df8e1d&#34;&gt;Input&lt;/span&gt;.&lt;span style=&#34;color:#df8e1d&#34;&gt;Keys&lt;/span&gt;.A)       &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// tecla mantenida&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 8&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#df8e1d&#34;&gt;Gdx&lt;/span&gt;.input.isKeyJustPressed(&lt;span style=&#34;color:#df8e1d&#34;&gt;Input&lt;/span&gt;.&lt;span style=&#34;color:#df8e1d&#34;&gt;Keys&lt;/span&gt;.SPACE)  &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// tecla pulsada este fotograma&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 9&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;10&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#df8e1d&#34;&gt;Gdx&lt;/span&gt;.input.accelerometerX              &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// inclinación izquierda-derecha (-10..10)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;11&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#df8e1d&#34;&gt;Gdx&lt;/span&gt;.input.accelerometerY              &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// inclinación adelante-atrás&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;12&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;13&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// ── InputAdapter (eventos discretos) ─────────────────────────────────────&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;14&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;15&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#df8e1d&#34;&gt;Gdx&lt;/span&gt;.input.inputProcessor = &lt;span style=&#34;color:#8839ef&#34;&gt;object&lt;/span&gt; &lt;span style=&#34;color:#d20f39&#34;&gt;: &lt;/span&gt;&lt;span style=&#34;color:#df8e1d&#34;&gt;InputAdapter&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;16&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#8839ef&#34;&gt;override&lt;/span&gt; &lt;span style=&#34;color:#8839ef&#34;&gt;fun&lt;/span&gt; &lt;span style=&#34;color:#1e66f5&#34;&gt;touchDown&lt;/span&gt;(screenX: Int, screenY: Int, pointer: Int, button: Int): Boolean {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;17&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#8839ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#8839ef&#34;&gt;true&lt;/span&gt;   &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// true = evento consumido&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;18&lt;/span&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;19&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#8839ef&#34;&gt;override&lt;/span&gt; &lt;span style=&#34;color:#8839ef&#34;&gt;fun&lt;/span&gt; &lt;span style=&#34;color:#1e66f5&#34;&gt;keyDown&lt;/span&gt;(keycode: Int): Boolean {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;20&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#8839ef&#34;&gt;if&lt;/span&gt; (keycode &lt;span style=&#34;color:#04a5e5;font-weight:bold&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#df8e1d&#34;&gt;Input&lt;/span&gt;.&lt;span style=&#34;color:#df8e1d&#34;&gt;Keys&lt;/span&gt;.BACK) { &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;/* botón atrás Android */&lt;/span&gt; }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;21&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#8839ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#8839ef&#34;&gt;false&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;22&lt;/span&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;23&lt;/span&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;24&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;25&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// ── InputMultiplexer (varios receptores) ─────────────────────────────────&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;26&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;27&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;multiplexer&lt;/span&gt; = InputMultiplexer(stage, gameInput)  &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// stage tiene prioridad&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;28&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#df8e1d&#34;&gt;Gdx&lt;/span&gt;.input.inputProcessor = multiplexer&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#xA;&lt;h2 id=&#34;8-audio&#34;&gt;8. Audio&lt;a class=&#34;anchor&#34; href=&#34;#8-audio&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34; title=&#34;Kotlin&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#4c4f69;background-color:#eff1f5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-kotlin&#34; data-lang=&#34;kotlin&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 1&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// ── Sound: efectos cortos (&amp;lt; 5 s, cargados en memoria) ──────────────────&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 2&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 3&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;sfx&lt;/span&gt;: Sound = &lt;span style=&#34;color:#df8e1d&#34;&gt;Gdx&lt;/span&gt;.audio.newSound(&lt;span style=&#34;color:#df8e1d&#34;&gt;Gdx&lt;/span&gt;.files.&lt;span style=&#34;color:#8839ef&#34;&gt;internal&lt;/span&gt;(&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;audio/salto.wav&amp;#34;&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 4&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// o via AssetManager:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 5&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;sfx&lt;/span&gt;: Sound = assets.&lt;span style=&#34;color:#8839ef&#34;&gt;get&lt;/span&gt;(&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;audio/salto.wav&amp;#34;&lt;/span&gt;, Sound&lt;span style=&#34;color:#04a5e5;font-weight:bold&#34;&gt;::&lt;/span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;class&lt;/span&gt;.java)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 6&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 7&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;id&lt;/span&gt;: Long = sfx.play(volume = &lt;span style=&#34;color:#fe640b&#34;&gt;1.0f&lt;/span&gt;)             &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// devuelve ID de instancia&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 8&lt;/span&gt;&lt;span&gt;sfx.play(volume = &lt;span style=&#34;color:#fe640b&#34;&gt;0.8f&lt;/span&gt;, pitch = &lt;span style=&#34;color:#fe640b&#34;&gt;1.2f&lt;/span&gt;, pan = &lt;span style=&#34;color:#fe640b&#34;&gt;0f&lt;/span&gt;)   &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// pitch: 0.5 (lento) a 2.0 (rápido)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 9&lt;/span&gt;&lt;span&gt;sfx.stop(id)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;10&lt;/span&gt;&lt;span&gt;sfx.setLooping(id, &lt;span style=&#34;color:#8839ef&#34;&gt;true&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;11&lt;/span&gt;&lt;span&gt;sfx.dispose()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;12&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;13&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// ── Music: pistas largas (streaming desde disco) ─────────────────────────&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;14&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;15&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;musica&lt;/span&gt;: Music = assets.&lt;span style=&#34;color:#8839ef&#34;&gt;get&lt;/span&gt;(&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;audio/musica.ogg&amp;#34;&lt;/span&gt;, Music&lt;span style=&#34;color:#04a5e5;font-weight:bold&#34;&gt;::&lt;/span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;class&lt;/span&gt;.java)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;16&lt;/span&gt;&lt;span&gt;musica.isLooping = &lt;span style=&#34;color:#8839ef&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;17&lt;/span&gt;&lt;span&gt;musica.volume    = &lt;span style=&#34;color:#fe640b&#34;&gt;0.6f&lt;/span&gt;      &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// 0.0 a 1.0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;18&lt;/span&gt;&lt;span&gt;musica.play()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;19&lt;/span&gt;&lt;span&gt;musica.pause()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;20&lt;/span&gt;&lt;span&gt;musica.stop()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;21&lt;/span&gt;&lt;span&gt;musica.isPlaying              &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// Boolean&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;22&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// NO llamar dispose() si es gestionada por AssetManager&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#xA;&lt;h2 id=&#34;9-box2d--referencia-completa&#34;&gt;9. Box2D — referencia completa&lt;a class=&#34;anchor&#34; href=&#34;#9-box2d--referencia-completa&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;crear-el-world&#34;&gt;Crear el World&lt;a class=&#34;anchor&#34; href=&#34;#crear-el-world&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34; title=&#34;Kotlin&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#4c4f69;background-color:#eff1f5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-kotlin&#34; data-lang=&#34;kotlin&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 1&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;world&lt;/span&gt; = World(Vector2(&lt;span style=&#34;color:#fe640b&#34;&gt;0f&lt;/span&gt;, -&lt;span style=&#34;color:#fe640b&#34;&gt;20f&lt;/span&gt;), &lt;span style=&#34;color:#8839ef&#34;&gt;true&lt;/span&gt;)  &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// gravedad, dormir inactivos&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 2&lt;/span&gt;&lt;span&gt;world.setContactListener(miListener)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 3&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 4&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// Paso de simulación con tiempo fijo&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 5&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;private&lt;/span&gt; &lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;TIME&lt;/span&gt;_STEP = &lt;span style=&#34;color:#fe640b&#34;&gt;1f&lt;/span&gt; / &lt;span style=&#34;color:#fe640b&#34;&gt;60f&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 6&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;private&lt;/span&gt; &lt;span style=&#34;color:#8839ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;accumulator&lt;/span&gt; = &lt;span style=&#34;color:#fe640b&#34;&gt;0f&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 7&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 8&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;fun&lt;/span&gt; &lt;span style=&#34;color:#1e66f5&#34;&gt;step&lt;/span&gt;(delta: Float) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 9&lt;/span&gt;&lt;span&gt;    accumulator &lt;span style=&#34;color:#04a5e5;font-weight:bold&#34;&gt;+=&lt;/span&gt; delta.coerceAtMost(&lt;span style=&#34;color:#fe640b&#34;&gt;0.25f&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;10&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#8839ef&#34;&gt;while&lt;/span&gt; (accumulator &lt;span style=&#34;color:#04a5e5;font-weight:bold&#34;&gt;&amp;gt;=&lt;/span&gt; TIME_STEP) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;11&lt;/span&gt;&lt;span&gt;        world.step(TIME_STEP, &lt;span style=&#34;color:#fe640b&#34;&gt;8&lt;/span&gt;, &lt;span style=&#34;color:#fe640b&#34;&gt;3&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;12&lt;/span&gt;&lt;span&gt;        accumulator &lt;span style=&#34;color:#04a5e5;font-weight:bold&#34;&gt;-=&lt;/span&gt; TIME_STEP&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;13&lt;/span&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;14&lt;/span&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;15&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;16&lt;/span&gt;&lt;span&gt;world.dispose()  &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// siempre en dispose()&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;crear-cuerpos-con-ktx-box2d&#34;&gt;Crear cuerpos con KTX-Box2D&lt;a class=&#34;anchor&#34; href=&#34;#crear-cuerpos-con-ktx-box2d&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34; title=&#34;Kotlin&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#4c4f69;background-color:#eff1f5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-kotlin&#34; data-lang=&#34;kotlin&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 1&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// Cuerpo estático (plataforma)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 2&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;plataforma&lt;/span&gt;: Body = world.body {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 3&lt;/span&gt;&lt;span&gt;    position.&lt;span style=&#34;color:#8839ef&#34;&gt;set&lt;/span&gt;(cx, cy)               &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// CENTRO del body&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 4&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// type = StaticBody por defecto en ktx-box2d&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 5&lt;/span&gt;&lt;span&gt;    box(halfWidth = w/&lt;span style=&#34;color:#fe640b&#34;&gt;2f&lt;/span&gt;, halfHeight = h/&lt;span style=&#34;color:#fe640b&#34;&gt;2f&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 6&lt;/span&gt;&lt;span&gt;        friction    = &lt;span style=&#34;color:#fe640b&#34;&gt;0.6f&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 7&lt;/span&gt;&lt;span&gt;        restitution = &lt;span style=&#34;color:#fe640b&#34;&gt;0f&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 8&lt;/span&gt;&lt;span&gt;        userData    = &lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;suelo&amp;#34;&lt;/span&gt;          &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// identificador en ContactListener&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 9&lt;/span&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;10&lt;/span&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;11&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;12&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// Cuerpo dinámico (jugador)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;13&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;jugador&lt;/span&gt;: Body = world.body(&lt;span style=&#34;color:#df8e1d&#34;&gt;BodyDef&lt;/span&gt;.&lt;span style=&#34;color:#df8e1d&#34;&gt;BodyType&lt;/span&gt;.DynamicBody) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;14&lt;/span&gt;&lt;span&gt;    position.&lt;span style=&#34;color:#8839ef&#34;&gt;set&lt;/span&gt;(spawnX, spawnY)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;15&lt;/span&gt;&lt;span&gt;    fixedRotation = &lt;span style=&#34;color:#8839ef&#34;&gt;true&lt;/span&gt;               &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// evitar rotación al chocar con esquinas&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;16&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;17&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// Fixture principal del cuerpo&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;18&lt;/span&gt;&lt;span&gt;    box(halfWidth = &lt;span style=&#34;color:#fe640b&#34;&gt;0.4f&lt;/span&gt;, halfHeight = &lt;span style=&#34;color:#fe640b&#34;&gt;0.55f&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;19&lt;/span&gt;&lt;span&gt;        density     = &lt;span style=&#34;color:#fe640b&#34;&gt;1f&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;20&lt;/span&gt;&lt;span&gt;        friction    = &lt;span style=&#34;color:#fe640b&#34;&gt;0.1f&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;21&lt;/span&gt;&lt;span&gt;        restitution = &lt;span style=&#34;color:#fe640b&#34;&gt;0f&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;22&lt;/span&gt;&lt;span&gt;        userData    = &lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;jugador&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;23&lt;/span&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;24&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;25&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// Sensor de pies (detecta suelo sin respuesta física)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;26&lt;/span&gt;&lt;span&gt;    box(halfWidth = &lt;span style=&#34;color:#fe640b&#34;&gt;0.35f&lt;/span&gt;, halfHeight = &lt;span style=&#34;color:#fe640b&#34;&gt;0.1f&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;27&lt;/span&gt;&lt;span&gt;        position   = Vector2(&lt;span style=&#34;color:#fe640b&#34;&gt;0f&lt;/span&gt;, -&lt;span style=&#34;color:#fe640b&#34;&gt;0.65f&lt;/span&gt;)) {  &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// justo debajo del cuerpo&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;28&lt;/span&gt;&lt;span&gt;        isSensor = &lt;span style=&#34;color:#8839ef&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;29&lt;/span&gt;&lt;span&gt;        userData = &lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;pies_jugador&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;30&lt;/span&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;31&lt;/span&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;32&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;33&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// Sensor circular (moneda)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;34&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;moneda&lt;/span&gt;: Body = world.body {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;35&lt;/span&gt;&lt;span&gt;    position.&lt;span style=&#34;color:#8839ef&#34;&gt;set&lt;/span&gt;(x, y)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;36&lt;/span&gt;&lt;span&gt;    circle(radius = &lt;span style=&#34;color:#fe640b&#34;&gt;0.3f&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;37&lt;/span&gt;&lt;span&gt;        isSensor = &lt;span style=&#34;color:#8839ef&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;38&lt;/span&gt;&lt;span&gt;        userData = &lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;moneda&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;39&lt;/span&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;40&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;aplicar-movimiento-al-jugador-patrón-plataformas&#34;&gt;Aplicar movimiento al jugador (patrón plataformas)&lt;a class=&#34;anchor&#34; href=&#34;#aplicar-movimiento-al-jugador-patr%c3%b3n-plataformas&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34; title=&#34;Kotlin&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#4c4f69;background-color:#eff1f5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-kotlin&#34; data-lang=&#34;kotlin&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 1&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// Movimiento horizontal: impulso para respuesta inmediata&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 2&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;fun&lt;/span&gt; &lt;span style=&#34;color:#1e66f5&#34;&gt;moverHorizontal&lt;/span&gt;(body: Body, direccion: Float, velocidadMax: Float) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 3&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;velActual&lt;/span&gt;  = body.linearVelocity.x&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 4&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;velDeseada&lt;/span&gt; = direccion * velocidadMax&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 5&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;impulso&lt;/span&gt;    = body.mass * (velDeseada - velActual)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 6&lt;/span&gt;&lt;span&gt;    body.applyLinearImpulse(impulso, &lt;span style=&#34;color:#fe640b&#34;&gt;0f&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 7&lt;/span&gt;&lt;span&gt;        body.worldCenter.x, body.worldCenter.y, wake = &lt;span style=&#34;color:#8839ef&#34;&gt;true&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 8&lt;/span&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 9&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;10&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// Salto: impulso vertical instantáneo&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;11&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;fun&lt;/span&gt; &lt;span style=&#34;color:#1e66f5&#34;&gt;saltar&lt;/span&gt;(body: Body, fuerzaSalto: Float) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;12&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;impulso&lt;/span&gt; = body.mass * fuerzaSalto&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;13&lt;/span&gt;&lt;span&gt;    body.applyLinearImpulse(&lt;span style=&#34;color:#fe640b&#34;&gt;0f&lt;/span&gt;, impulso,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;14&lt;/span&gt;&lt;span&gt;        body.worldCenter.x, body.worldCenter.y, wake = &lt;span style=&#34;color:#8839ef&#34;&gt;true&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;15&lt;/span&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;16&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;17&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// Limitar velocidad vertical máxima (evitar velocidades infinitas en caída)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;18&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;maxCaida&lt;/span&gt; = -&lt;span style=&#34;color:#fe640b&#34;&gt;20f&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;19&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;if&lt;/span&gt; (body.linearVelocity.y &amp;lt; maxCaida) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;20&lt;/span&gt;&lt;span&gt;    body.setLinearVelocity(body.linearVelocity.x, maxCaida)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;21&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;contactlistener&#34;&gt;ContactListener&lt;a class=&#34;anchor&#34; href=&#34;#contactlistener&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34; title=&#34;Kotlin&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#4c4f69;background-color:#eff1f5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-kotlin&#34; data-lang=&#34;kotlin&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 1&lt;/span&gt;&lt;span&gt;world.setContactListener(&lt;span style=&#34;color:#8839ef&#34;&gt;object&lt;/span&gt; &lt;span style=&#34;color:#d20f39&#34;&gt;: &lt;/span&gt;&lt;span style=&#34;color:#df8e1d&#34;&gt;ContactListener&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 2&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#8839ef&#34;&gt;override&lt;/span&gt; &lt;span style=&#34;color:#8839ef&#34;&gt;fun&lt;/span&gt; &lt;span style=&#34;color:#1e66f5&#34;&gt;beginContact&lt;/span&gt;(contact: Contact) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 3&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;datA&lt;/span&gt; = contact.fixtureA.userData &lt;span style=&#34;color:#8839ef&#34;&gt;as&lt;/span&gt;? String&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 4&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;datB&lt;/span&gt; = contact.fixtureB.userData &lt;span style=&#34;color:#8839ef&#34;&gt;as&lt;/span&gt;? String&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 5&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 6&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// ¿Pies del jugador tocan suelo?&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 7&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;piesEnSuelo&lt;/span&gt; = (datA &lt;span style=&#34;color:#04a5e5;font-weight:bold&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;pies_jugador&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#04a5e5;font-weight:bold&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; datB &lt;span style=&#34;color:#04a5e5;font-weight:bold&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;suelo&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#04a5e5;font-weight:bold&#34;&gt;||&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 8&lt;/span&gt;&lt;span&gt;                          (datB &lt;span style=&#34;color:#04a5e5;font-weight:bold&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;pies_jugador&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#04a5e5;font-weight:bold&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; datA &lt;span style=&#34;color:#04a5e5;font-weight:bold&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;suelo&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 9&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#8839ef&#34;&gt;if&lt;/span&gt; (piesEnSuelo) jugadorEnSuelo = &lt;span style=&#34;color:#8839ef&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;10&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;11&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// ¿Jugador recoge moneda?&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;12&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#8839ef&#34;&gt;if&lt;/span&gt; (datA &lt;span style=&#34;color:#04a5e5;font-weight:bold&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;jugador&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#04a5e5;font-weight:bold&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; datB &lt;span style=&#34;color:#04a5e5;font-weight:bold&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;moneda&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;13&lt;/span&gt;&lt;span&gt;            accionesPendientes &lt;span style=&#34;color:#04a5e5;font-weight:bold&#34;&gt;+=&lt;/span&gt; { world.destroyBody(contact.fixtureB.body) }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;14&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#8839ef&#34;&gt;if&lt;/span&gt; (datB &lt;span style=&#34;color:#04a5e5;font-weight:bold&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;jugador&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#04a5e5;font-weight:bold&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; datA &lt;span style=&#34;color:#04a5e5;font-weight:bold&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;moneda&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;15&lt;/span&gt;&lt;span&gt;            accionesPendientes &lt;span style=&#34;color:#04a5e5;font-weight:bold&#34;&gt;+=&lt;/span&gt; { world.destroyBody(contact.fixtureA.body) }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;16&lt;/span&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;17&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;18&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#8839ef&#34;&gt;override&lt;/span&gt; &lt;span style=&#34;color:#8839ef&#34;&gt;fun&lt;/span&gt; &lt;span style=&#34;color:#1e66f5&#34;&gt;endContact&lt;/span&gt;(contact: Contact) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;19&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;datA&lt;/span&gt; = contact.fixtureA.userData &lt;span style=&#34;color:#8839ef&#34;&gt;as&lt;/span&gt;? String&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;20&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;datB&lt;/span&gt; = contact.fixtureB.userData &lt;span style=&#34;color:#8839ef&#34;&gt;as&lt;/span&gt;? String&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;21&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#8839ef&#34;&gt;if&lt;/span&gt; ((datA &lt;span style=&#34;color:#04a5e5;font-weight:bold&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;pies_jugador&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#04a5e5;font-weight:bold&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; datB &lt;span style=&#34;color:#04a5e5;font-weight:bold&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;suelo&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#04a5e5;font-weight:bold&#34;&gt;||&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;22&lt;/span&gt;&lt;span&gt;            (datB &lt;span style=&#34;color:#04a5e5;font-weight:bold&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;pies_jugador&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#04a5e5;font-weight:bold&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; datA &lt;span style=&#34;color:#04a5e5;font-weight:bold&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;suelo&amp;#34;&lt;/span&gt;)) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;23&lt;/span&gt;&lt;span&gt;            jugadorEnSuelo = &lt;span style=&#34;color:#8839ef&#34;&gt;false&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;24&lt;/span&gt;&lt;span&gt;        }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;25&lt;/span&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;26&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;27&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// OBLIGATORIOS aunque estén vacíos:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;28&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#8839ef&#34;&gt;override&lt;/span&gt; &lt;span style=&#34;color:#8839ef&#34;&gt;fun&lt;/span&gt; &lt;span style=&#34;color:#1e66f5&#34;&gt;preSolve&lt;/span&gt;(contact: Contact, oldManifold: Manifold) {}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;29&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#8839ef&#34;&gt;override&lt;/span&gt; &lt;span style=&#34;color:#8839ef&#34;&gt;fun&lt;/span&gt; &lt;span style=&#34;color:#1e66f5&#34;&gt;postSolve&lt;/span&gt;(contact: Contact, impulse: ContactImpulse) {}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;30&lt;/span&gt;&lt;span&gt;})&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;31&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;32&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// Ejecutar acciones diferidas DESPUÉS de world.step()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;33&lt;/span&gt;&lt;span&gt;accionesPendientes.forEach { &lt;span style=&#34;color:#8839ef&#34;&gt;it&lt;/span&gt;() }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;34&lt;/span&gt;&lt;span&gt;accionesPendientes.clear()&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;box2ddebugrenderer&#34;&gt;Box2DDebugRenderer&lt;a class=&#34;anchor&#34; href=&#34;#box2ddebugrenderer&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34; title=&#34;Kotlin&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#4c4f69;background-color:#eff1f5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-kotlin&#34; data-lang=&#34;kotlin&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;1&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;debugRenderer&lt;/span&gt; = Box2DDebugRenderer()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;2&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;3&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// En render(), después de dibujar el juego&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;4&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;if&lt;/span&gt; (modoDebug) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;5&lt;/span&gt;&lt;span&gt;    debugRenderer.render(world, camera.combined)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;6&lt;/span&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;7&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;8&lt;/span&gt;&lt;span&gt;debugRenderer.dispose()   &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// en dispose()&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#xA;&lt;h2 id=&#34;10-tiledmap--referencia-rápida&#34;&gt;10. TiledMap — referencia rápida&lt;a class=&#34;anchor&#34; href=&#34;#10-tiledmap--referencia-r%c3%a1pida&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;cargar-mapa&#34;&gt;Cargar mapa&lt;a class=&#34;anchor&#34; href=&#34;#cargar-mapa&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34; title=&#34;Kotlin&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#4c4f69;background-color:#eff1f5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-kotlin&#34; data-lang=&#34;kotlin&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;1&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// Con AssetManager (recomendado)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;2&lt;/span&gt;&lt;span&gt;assets.setLoader(TiledMap&lt;span style=&#34;color:#04a5e5;font-weight:bold&#34;&gt;::&lt;/span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;class&lt;/span&gt;.java, TmxMapLoader(InternalFileHandleResolver()))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;3&lt;/span&gt;&lt;span&gt;assets.load(&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;mapas/nivel1.tmx&amp;#34;&lt;/span&gt;, TiledMap&lt;span style=&#34;color:#04a5e5;font-weight:bold&#34;&gt;::&lt;/span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;class&lt;/span&gt;.java)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;4&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;5&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;map&lt;/span&gt;: TiledMap = assets.&lt;span style=&#34;color:#8839ef&#34;&gt;get&lt;/span&gt;(&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;mapas/nivel1.tmx&amp;#34;&lt;/span&gt;, TiledMap&lt;span style=&#34;color:#04a5e5;font-weight:bold&#34;&gt;::&lt;/span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;class&lt;/span&gt;.java)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;6&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;7&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// Sin AssetManager&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;8&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;map&lt;/span&gt;: TiledMap = TmxMapLoader().load(&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;mapas/nivel1.tmx&amp;#34;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;renderizar-mapa&#34;&gt;Renderizar mapa&lt;a class=&#34;anchor&#34; href=&#34;#renderizar-mapa&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34; title=&#34;Kotlin&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#4c4f69;background-color:#eff1f5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-kotlin&#34; data-lang=&#34;kotlin&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;1&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// El unitScale debe ser 1f / tamañoTileEnPíxeles&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;2&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;renderer&lt;/span&gt; = OrthogonalTiledMapRenderer(map, &lt;span style=&#34;color:#fe640b&#34;&gt;1f&lt;/span&gt; / &lt;span style=&#34;color:#fe640b&#34;&gt;32f&lt;/span&gt;, batch)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;3&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;4&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// En render()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;5&lt;/span&gt;&lt;span&gt;renderer.setView(camera)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;6&lt;/span&gt;&lt;span&gt;renderer.render()                      &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// todas las capas visibles&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;7&lt;/span&gt;&lt;span&gt;renderer.render(intArrayOf(&lt;span style=&#34;color:#fe640b&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#fe640b&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#fe640b&#34;&gt;3&lt;/span&gt;))   &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// capas específicas por índice&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;8&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;9&lt;/span&gt;&lt;span&gt;renderer.dispose()   &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// dispose() en la pantalla, NO en el mapa (el mapa lo gestiona AssetManager)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;extraer-objetos-y-crear-bodies-box2d&#34;&gt;Extraer objetos y crear bodies Box2D&lt;a class=&#34;anchor&#34; href=&#34;#extraer-objetos-y-crear-bodies-box2d&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34; title=&#34;Kotlin&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#4c4f69;background-color:#eff1f5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-kotlin&#34; data-lang=&#34;kotlin&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 1&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;unitScale&lt;/span&gt; = &lt;span style=&#34;color:#fe640b&#34;&gt;1f&lt;/span&gt; / &lt;span style=&#34;color:#fe640b&#34;&gt;32f&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 2&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 3&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// Capa de rectángulos → bodies estáticos de suelo&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 4&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;capaColisiones&lt;/span&gt; = map.layers.&lt;span style=&#34;color:#8839ef&#34;&gt;get&lt;/span&gt;(&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;colisiones&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 5&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;for&lt;/span&gt; (obj &lt;span style=&#34;color:#8839ef&#34;&gt;in&lt;/span&gt; capaColisiones.objects.getByType(RectangleMapObject&lt;span style=&#34;color:#04a5e5;font-weight:bold&#34;&gt;::&lt;/span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;class&lt;/span&gt;.java)) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 6&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;r&lt;/span&gt; = obj.rectangle&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 7&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;x&lt;/span&gt; = r.x * unitScale;  &lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;y&lt;/span&gt; = r.y * unitScale&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 8&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;w&lt;/span&gt; = r.width * unitScale;  &lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;h&lt;/span&gt; = r.height * unitScale&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 9&lt;/span&gt;&lt;span&gt;    world.body {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;10&lt;/span&gt;&lt;span&gt;        position.&lt;span style=&#34;color:#8839ef&#34;&gt;set&lt;/span&gt;(x + w/&lt;span style=&#34;color:#fe640b&#34;&gt;2f&lt;/span&gt;, y + h/&lt;span style=&#34;color:#fe640b&#34;&gt;2f&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;11&lt;/span&gt;&lt;span&gt;        box(halfWidth = w/&lt;span style=&#34;color:#fe640b&#34;&gt;2f&lt;/span&gt;, halfHeight = h/&lt;span style=&#34;color:#fe640b&#34;&gt;2f&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;12&lt;/span&gt;&lt;span&gt;            friction = &lt;span style=&#34;color:#fe640b&#34;&gt;0.6f&lt;/span&gt;; userData = &lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;suelo&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;13&lt;/span&gt;&lt;span&gt;        }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;14&lt;/span&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;15&lt;/span&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;16&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;17&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// Extraer posiciones de entidades por nombre&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;18&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;capaEntidades&lt;/span&gt; = map.layers.&lt;span style=&#34;color:#8839ef&#34;&gt;get&lt;/span&gt;(&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;entidades&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;19&lt;/span&gt;&lt;span&gt;capaEntidades.objects.getByType(RectangleMapObject&lt;span style=&#34;color:#04a5e5;font-weight:bold&#34;&gt;::&lt;/span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;class&lt;/span&gt;.java)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;20&lt;/span&gt;&lt;span&gt;    .filter { &lt;span style=&#34;color:#8839ef&#34;&gt;it&lt;/span&gt;.name &lt;span style=&#34;color:#04a5e5;font-weight:bold&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;moneda&amp;#34;&lt;/span&gt; }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;21&lt;/span&gt;&lt;span&gt;    .map    { Vector2(&lt;span style=&#34;color:#8839ef&#34;&gt;it&lt;/span&gt;.rectangle.x * unitScale, &lt;span style=&#34;color:#8839ef&#34;&gt;it&lt;/span&gt;.rectangle.y * unitScale) }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;22&lt;/span&gt;&lt;span&gt;    .forEach { pos &lt;span style=&#34;color:#04a5e5;font-weight:bold&#34;&gt;-&amp;gt;&lt;/span&gt; crearMoneda(pos) }&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;propiedades-personalizadas-con-ktx-tiled&#34;&gt;Propiedades personalizadas (con ktx-tiled)&lt;a class=&#34;anchor&#34; href=&#34;#propiedades-personalizadas-con-ktx-tiled&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34; title=&#34;Kotlin&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#4c4f69;background-color:#eff1f5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-kotlin&#34; data-lang=&#34;kotlin&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;1&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// En un objeto de la capa&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;2&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;velocidad&lt;/span&gt;: Float  = objeto.&lt;span style=&#34;color:#8839ef&#34;&gt;property&lt;/span&gt;(&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;velocidad&amp;#34;&lt;/span&gt;, defaultValue = &lt;span style=&#34;color:#fe640b&#34;&gt;2f&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;3&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;esDanino&lt;/span&gt;: Boolean = objeto.&lt;span style=&#34;color:#8839ef&#34;&gt;property&lt;/span&gt;(&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;danino&amp;#34;&lt;/span&gt;,    defaultValue = &lt;span style=&#34;color:#8839ef&#34;&gt;false&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;4&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;tipo&lt;/span&gt;: String      = objeto.&lt;span style=&#34;color:#8839ef&#34;&gt;property&lt;/span&gt;(&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;tipo&amp;#34;&lt;/span&gt;,      defaultValue = &lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;normal&amp;#34;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#xA;&lt;h2 id=&#34;11-partículas--referencia-rápida&#34;&gt;11. Partículas — referencia rápida&lt;a class=&#34;anchor&#34; href=&#34;#11-part%c3%adculas--referencia-r%c3%a1pida&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34; title=&#34;Kotlin&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#4c4f69;background-color:#eff1f5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-kotlin&#34; data-lang=&#34;kotlin&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 1&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// Cargar efecto (en create() o show(), no en render())&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 2&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;efecto&lt;/span&gt; = ParticleEffect()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 3&lt;/span&gt;&lt;span&gt;efecto.load(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 4&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#df8e1d&#34;&gt;Gdx&lt;/span&gt;.files.&lt;span style=&#34;color:#8839ef&#34;&gt;internal&lt;/span&gt;(&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;particles/polvo_salto.p&amp;#34;&lt;/span&gt;),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 5&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#df8e1d&#34;&gt;Gdx&lt;/span&gt;.files.&lt;span style=&#34;color:#8839ef&#34;&gt;internal&lt;/span&gt;(&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;particles&amp;#34;&lt;/span&gt;)   &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// carpeta de la imagen de partícula&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 6&lt;/span&gt;&lt;span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 7&lt;/span&gt;&lt;span&gt;efecto.scaleEffect(&lt;span style=&#34;color:#fe640b&#34;&gt;1f&lt;/span&gt; / &lt;span style=&#34;color:#fe640b&#34;&gt;32f&lt;/span&gt;)   &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// ajustar escala al mundo del juego&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 8&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 9&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// Posicionar y activar&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;10&lt;/span&gt;&lt;span&gt;efecto.setPosition(x, y)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;11&lt;/span&gt;&lt;span&gt;efecto.start()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;12&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;13&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// En render(), DENTRO de batch.use {}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;14&lt;/span&gt;&lt;span&gt;efecto.draw(batch, delta)   &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// actualiza Y dibuja en un solo paso&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;15&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;16&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// Estado&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;17&lt;/span&gt;&lt;span&gt;efecto.isComplete    &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// true cuando todas las partículas han muerto&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;18&lt;/span&gt;&lt;span&gt;efecto.isStarted     &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// true si está activo&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;19&lt;/span&gt;&lt;span&gt;efecto.reset()       &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// reiniciar para reutilizar&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;20&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;21&lt;/span&gt;&lt;span&gt;efecto.dispose()     &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// en dispose() de la pantalla&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#xA;&lt;h2 id=&#34;12-fuentes--bitmapfont-y-freetype&#34;&gt;12. Fuentes — BitmapFont y FreeType&lt;a class=&#34;anchor&#34; href=&#34;#12-fuentes--bitmapfont-y-freetype&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34; title=&#34;Kotlin&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#4c4f69;background-color:#eff1f5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-kotlin&#34; data-lang=&#34;kotlin&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 1&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// ── BitmapFont (fuente por defecto incluida en LibGDX) ───────────────────&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 2&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 3&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;fuente&lt;/span&gt; = BitmapFont()           &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// Arial 15px&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 4&lt;/span&gt;&lt;span&gt;fuente.color = &lt;span style=&#34;color:#df8e1d&#34;&gt;Color&lt;/span&gt;.WHITE&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 5&lt;/span&gt;&lt;span&gt;fuente.&lt;span style=&#34;color:#8839ef&#34;&gt;data&lt;/span&gt;.setScale(&lt;span style=&#34;color:#fe640b&#34;&gt;1.5f&lt;/span&gt;)         &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// escala (permanente; resetear después si es necesario)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 6&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 7&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// Dentro de batch.use {}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 8&lt;/span&gt;&lt;span&gt;fuente.draw(batch, &lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;Texto&amp;#34;&lt;/span&gt;, x, y)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 9&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;10&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// GlyphLayout: para medir dimensiones antes de dibujar (centrar texto)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;11&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;layout&lt;/span&gt; = GlyphLayout(fuente, &lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;¡GAME OVER!&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;12&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;textX&lt;/span&gt;  = (WORLD_W - layout.width) / &lt;span style=&#34;color:#fe640b&#34;&gt;2f&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;13&lt;/span&gt;&lt;span&gt;fuente.draw(batch, layout, textX, y)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;14&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;15&lt;/span&gt;&lt;span&gt;fuente.dispose()   &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// en dispose()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;16&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;17&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// ── FreeType (fuentes TTF personalizadas) ────────────────────────────────&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;18&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;19&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;generator&lt;/span&gt; = FreeTypeFontGenerator(&lt;span style=&#34;color:#df8e1d&#34;&gt;Gdx&lt;/span&gt;.files.&lt;span style=&#34;color:#8839ef&#34;&gt;internal&lt;/span&gt;(&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;fuentes/roboto.ttf&amp;#34;&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;20&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;params&lt;/span&gt; = &lt;span style=&#34;color:#df8e1d&#34;&gt;FreeTypeFontGenerator&lt;/span&gt;.FreeTypeFontParameter().apply {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;21&lt;/span&gt;&lt;span&gt;    size        = &lt;span style=&#34;color:#fe640b&#34;&gt;32&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;22&lt;/span&gt;&lt;span&gt;    color       = &lt;span style=&#34;color:#df8e1d&#34;&gt;Color&lt;/span&gt;.WHITE&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;23&lt;/span&gt;&lt;span&gt;    borderWidth = &lt;span style=&#34;color:#fe640b&#34;&gt;1f&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;24&lt;/span&gt;&lt;span&gt;    borderColor = &lt;span style=&#34;color:#df8e1d&#34;&gt;Color&lt;/span&gt;.BLACK&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;25&lt;/span&gt;&lt;span&gt;    characters  = &lt;span style=&#34;color:#df8e1d&#34;&gt;FreeTypeFontGenerator&lt;/span&gt;.DEFAULT_CHARS + &lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;áéíóúÁÉÍÓÚñÑ¡¿&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;26&lt;/span&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;27&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;fuenteTTF&lt;/span&gt;: BitmapFont = generator.generateFont(params)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;28&lt;/span&gt;&lt;span&gt;generator.dispose()     &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// liberar el generador (la fuente resultante sigue siendo válida)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;29&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// fuenteTTF.dispose() en dispose() de la pantalla&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#xA;&lt;h2 id=&#34;13-scene2d--stage-y-table-para-hud&#34;&gt;13. Scene2D — Stage y Table para HUD&lt;a class=&#34;anchor&#34; href=&#34;#13-scene2d--stage-y-table-para-hud&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34; title=&#34;Kotlin&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#4c4f69;background-color:#eff1f5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-kotlin&#34; data-lang=&#34;kotlin&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 1&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// Stage con viewport propio (independiente de la cámara del juego)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 2&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;stage&lt;/span&gt; = Stage(ScreenViewport(), batch)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 3&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 4&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// Conectar al InputMultiplexer si se necesita entrada en el HUD&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 5&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#df8e1d&#34;&gt;Gdx&lt;/span&gt;.input.inputProcessor = InputMultiplexer(stage, gameInput)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 6&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 7&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// Table: layout declarativo&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 8&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;tabla&lt;/span&gt; = Table()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 9&lt;/span&gt;&lt;span&gt;tabla.top().setFillParent(&lt;span style=&#34;color:#8839ef&#34;&gt;true&lt;/span&gt;)     &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// anclar al borde superior, tamaño de pantalla&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;10&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;11&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;estilo&lt;/span&gt; = &lt;span style=&#34;color:#df8e1d&#34;&gt;Label&lt;/span&gt;.LabelStyle(fuente, &lt;span style=&#34;color:#df8e1d&#34;&gt;Color&lt;/span&gt;.WHITE)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;12&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;labelMonedas&lt;/span&gt; = Label(&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;Monedas: 0&amp;#34;&lt;/span&gt;, estilo)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;13&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;labelVidas&lt;/span&gt;   = Label(&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;Vidas: 3&amp;#34;&lt;/span&gt;,   estilo)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;14&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;15&lt;/span&gt;&lt;span&gt;tabla.add(labelMonedas).expandX().left().pad(&lt;span style=&#34;color:#fe640b&#34;&gt;10f&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;16&lt;/span&gt;&lt;span&gt;tabla.add(labelVidas).expandX().right().pad(&lt;span style=&#34;color:#fe640b&#34;&gt;10f&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;17&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;18&lt;/span&gt;&lt;span&gt;stage.addActor(tabla)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;19&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;20&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// Actualizar texto de las etiquetas&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;21&lt;/span&gt;&lt;span&gt;labelMonedas.setText(&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;Monedas: &lt;/span&gt;&lt;span style=&#34;color:#40a02b&#34;&gt;${game.monedasRecogidas}&lt;/span&gt;&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;22&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;23&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// En render() — DESPUÉS de dibujar el juego&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;24&lt;/span&gt;&lt;span&gt;stage.act(delta)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;25&lt;/span&gt;&lt;span&gt;stage.draw()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;26&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;27&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// En resize()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;28&lt;/span&gt;&lt;span&gt;stage.viewport.update(width, height, &lt;span style=&#34;color:#8839ef&#34;&gt;true&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;29&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;30&lt;/span&gt;&lt;span&gt;stage.dispose()   &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// en dispose()&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#xA;&lt;h2 id=&#34;14-launcher-android--androidmanifestxml&#34;&gt;14. Launcher Android — AndroidManifest.xml&lt;a class=&#34;anchor&#34; href=&#34;#14-launcher-android--androidmanifestxml&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34; title=&#34;XML&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#4c4f69;background-color:#eff1f5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-xml&#34; data-lang=&#34;xml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 1&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;&amp;lt;!-- AndroidManifest.xml --&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 2&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;&amp;lt;manifest&lt;/span&gt; &lt;span style=&#34;color:#1e66f5&#34;&gt;xmlns:android=&lt;/span&gt;&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;http://schemas.android.com/apk/res/android&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 3&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 4&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#8839ef&#34;&gt;&amp;lt;application&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 5&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#1e66f5&#34;&gt;android:icon=&lt;/span&gt;&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;@drawable/ic_launcher&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 6&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#1e66f5&#34;&gt;android:label=&lt;/span&gt;&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;@string/app_name&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 7&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 8&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#8839ef&#34;&gt;&amp;lt;activity&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 9&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#1e66f5&#34;&gt;android:name=&lt;/span&gt;&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;.android.AndroidLauncher&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;10&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#1e66f5&#34;&gt;android:label=&lt;/span&gt;&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;@string/app_name&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;11&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#1e66f5&#34;&gt;android:screenOrientation=&lt;/span&gt;&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;landscape&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;12&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#1e66f5&#34;&gt;android:configChanges=&lt;/span&gt;&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;keyboard|keyboardHidden|navigation|orientation|screenSize|screenLayout&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;13&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#1e66f5&#34;&gt;android:exported=&lt;/span&gt;&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;true&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;14&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#8839ef&#34;&gt;&amp;lt;intent-filter&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;15&lt;/span&gt;&lt;span&gt;                &lt;span style=&#34;color:#8839ef&#34;&gt;&amp;lt;action&lt;/span&gt; &lt;span style=&#34;color:#1e66f5&#34;&gt;android:name=&lt;/span&gt;&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;android.intent.action.MAIN&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#8839ef&#34;&gt;/&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;16&lt;/span&gt;&lt;span&gt;                &lt;span style=&#34;color:#8839ef&#34;&gt;&amp;lt;category&lt;/span&gt; &lt;span style=&#34;color:#1e66f5&#34;&gt;android:name=&lt;/span&gt;&lt;span style=&#34;color:#40a02b&#34;&gt;&amp;#34;android.intent.category.LAUNCHER&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#8839ef&#34;&gt;/&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;17&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#8839ef&#34;&gt;&amp;lt;/intent-filter&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;18&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#8839ef&#34;&gt;&amp;lt;/activity&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;19&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;20&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#8839ef&#34;&gt;&amp;lt;/application&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;21&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;&amp;lt;/manifest&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34; title=&#34;Kotlin&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#4c4f69;background-color:#eff1f5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-kotlin&#34; data-lang=&#34;kotlin&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 1&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// AndroidLauncher.kt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 2&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#8839ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#df8e1d&#34;&gt;AndroidLauncher&lt;/span&gt; : AndroidApplication() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 3&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#8839ef&#34;&gt;override&lt;/span&gt; &lt;span style=&#34;color:#8839ef&#34;&gt;fun&lt;/span&gt; &lt;span style=&#34;color:#1e66f5&#34;&gt;onCreate&lt;/span&gt;(savedInstanceState: Bundle?) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 4&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#8839ef&#34;&gt;super&lt;/span&gt;.onCreate(savedInstanceState)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 5&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#8839ef&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#fe640b&#34;&gt;config&lt;/span&gt; = AndroidApplicationConfiguration().apply {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 6&lt;/span&gt;&lt;span&gt;            useAccelerometer = &lt;span style=&#34;color:#8839ef&#34;&gt;false&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 7&lt;/span&gt;&lt;span&gt;            useCompass       = &lt;span style=&#34;color:#8839ef&#34;&gt;false&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 8&lt;/span&gt;&lt;span&gt;            useGyroscope     = &lt;span style=&#34;color:#8839ef&#34;&gt;false&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt; 9&lt;/span&gt;&lt;span&gt;            useWakelock      = &lt;span style=&#34;color:#8839ef&#34;&gt;true&lt;/span&gt;          &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// evitar apagado de pantalla&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;10&lt;/span&gt;&lt;span&gt;            useImmersiveMode = &lt;span style=&#34;color:#8839ef&#34;&gt;true&lt;/span&gt;          &lt;span style=&#34;color:#9ca0b0;font-style:italic&#34;&gt;// pantalla completa&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;11&lt;/span&gt;&lt;span&gt;        }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;12&lt;/span&gt;&lt;span&gt;        initialize(KotlinPlatformGame(), config)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;13&lt;/span&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1&#34;&gt;14&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#xA;&lt;h2 id=&#34;15-tabla-de-errores-comunes-y-soluciones&#34;&gt;15. Tabla de errores comunes y soluciones&lt;a class=&#34;anchor&#34; href=&#34;#15-tabla-de-errores-comunes-y-soluciones&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;Error&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;Causa&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;Solución&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;OpenGLException&lt;/code&gt; al arrancar&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;Texture&lt;/code&gt; / &lt;code&gt;SpriteBatch&lt;/code&gt; creados antes de &lt;code&gt;create()&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Moverlos al cuerpo de &lt;code&gt;create()&lt;/code&gt; o usar &lt;code&gt;lateinit&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;IllegalStateException: called begin()&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;begin()&lt;/code&gt; sin &lt;code&gt;end()&lt;/code&gt; anterior, o SpriteBatch + ShapeRenderer activos a la vez&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Asegurarse de que cada &lt;code&gt;begin()&lt;/code&gt; tiene su &lt;code&gt;end()&lt;/code&gt; antes del siguiente&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Jugador rota al golpear esquinas&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;fixedRotation = false&lt;/code&gt; (valor por defecto)&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Poner &lt;code&gt;fixedRotation = true&lt;/code&gt; en el BodyDef del jugador&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Sensor de pies nunca detecta suelo&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;La fixture sensor tiene el mismo &lt;code&gt;userData&lt;/code&gt; que la principal&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Asignar &lt;code&gt;userData = &amp;quot;pies_jugador&amp;quot;&lt;/code&gt; solo al sensor, &lt;code&gt;&amp;quot;jugador&amp;quot;&lt;/code&gt; al cuerpo&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Crash &lt;code&gt;Box2D: assertion&lt;/code&gt; al destruir body&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;destroyBody()&lt;/code&gt; llamado dentro de &lt;code&gt;ContactListener&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Encolar la destrucción en una lista; ejecutar después de &lt;code&gt;world.step()&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Mapa y bodies Box2D con escala diferente&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;unitScale&lt;/code&gt; distinto en &lt;code&gt;MapLoader&lt;/code&gt; y &lt;code&gt;OrthogonalTiledMapRenderer&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Usar la misma constante &lt;code&gt;UNIT_SCALE = 1f / 32f&lt;/code&gt; en ambos&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Mapa no se ve / pantalla negra&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;mapRenderer.setView(camera)&lt;/code&gt; no llamado antes de &lt;code&gt;render()&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Llamar a &lt;code&gt;setView()&lt;/code&gt; en cada fotograma&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;El atlas no carga&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;El archivo &lt;code&gt;.atlas&lt;/code&gt; o &lt;code&gt;.png&lt;/code&gt; no está en &lt;code&gt;android/assets/&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Verificar ruta y copiar ambos archivos al directorio correcto&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Fugas de memoria en GPU&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Assets no liberados con &lt;code&gt;dispose()&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Revisar que todos los &lt;code&gt;Texture&lt;/code&gt;, &lt;code&gt;SpriteBatch&lt;/code&gt;, &lt;code&gt;ShapeRenderer&lt;/code&gt;, &lt;code&gt;Sound&lt;/code&gt;, &lt;code&gt;TiledMap&lt;/code&gt; y &lt;code&gt;ParticleEffect&lt;/code&gt; tienen su &lt;code&gt;dispose()&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Movimiento dependiente de framerate&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Velocidades fijas sin multiplicar por &lt;code&gt;delta&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Siempre: &lt;code&gt;posicion += velocidad * delta&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Coordenadas de toque incorrectas&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Usar &lt;code&gt;Gdx.input.x/y&lt;/code&gt; directamente sin &lt;code&gt;unproject&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;viewport.unproject(Vector3(x.toFloat(), y.toFloat(), 0f))&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Partículas demasiado grandes&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;ParticleEffect&lt;/code&gt; creado en píxeles; mundo en unidades&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;efecto.scaleEffect(1f / 32f)&lt;/code&gt; después de cargar&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Música no se pausa al minimizar&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pause()&lt;/code&gt; de Screen no gestiona la música&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Sobreescribir &lt;code&gt;pause()&lt;/code&gt; y llamar a &lt;code&gt;musica.pause()&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;16-checklist-de-entrega-del-proyecto&#34;&gt;16. Checklist de entrega del proyecto&lt;a class=&#34;anchor&#34; href=&#34;#16-checklist-de-entrega-del-proyecto&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Antes de presentar el proyecto, verificar que:&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
