Libgdx: Hacer uso de las plantillas de TiledMapObjects

Creado en 21 feb. 2018  ·  4Comentarios  ·  Fuente: libgdx/libgdx

Tiled 1.1 agrega soporte para plantillas de objetos . Una plantilla se guarda como un archivo externo y puede colocar plantillas en su mapa de mosaicos de forma similar a como coloca mosaicos de un conjunto de mosaicos.

En el XML guardado, la ruta al archivo de plantilla se almacena como un atributo del elemento del objeto.

Supongamos que coloqué un objeto de plantilla y lo renombré. El XML correspondiente se vería así:

<object id="6" template="../just/an/example.tx" name="Custom Name" x="168" y="483">

Como puede ver, faltan muchos de los atributos habituales (como ancho, alto y tipo). En Tiled, aún puedo ver estas propiedades porque las lee del archivo de plantilla.

Creo que la implementación de libgdx implicaría que BaseTmxMapLoader.loadObject() obtenga el atributo template , cargue el archivo .tx al que apunta y complete las propiedades faltantes usando esa plantilla.

En cuanto al archivo .tx en sí, su estructura parece bastante simple:

<?xml version="1.0" encoding="UTF-8"?>
<template>
 <object name="Default name" type="Example" height="48">
  <properties>
   <property name="some custom property" value="test"/>
  </properties>
 </object>
</template>

Por lo tanto, se guarda de la misma manera que se guardan los objetos en archivos .tmx .

Puedo solucionar esta limitación separando objetos de sus plantillas en mi mapa de mosaicos, pero sería bueno poder aprovechar al máximo la funcionalidad de Plantilla en Tiled.

enhancement tilemap

Todos 4 comentarios

De acuerdo, pero esto se reduce a mantener la lib actualizada con las nuevas versiones de las herramientas que ya se adoptaron.

¿Alguna actualización sobre esto?

Como solución alternativa, el editor de mapas en mosaico proporciona opciones de exportación para separar objetos de las plantillas.
Esto se puede integrar en el ciclo de vida de construcción del proyecto para generar los mapas compatibles con LibGDX automáticamente usando la CLI.

Comando de ejemplo para exportar el mapa a través de la CLI del editor 'Tiled':
tiled --export-map --detach-templates src/main/tiledmaps/test1.tmx src/main/resources/maps/test1.tmx
El primer archivo de mapa es el origen, el segundo es el destino.
El archivo de destino ya no hace referencia al archivo de plantilla y tiene todas las propiedades de la plantilla.

Ejemplo de tarea de Gradle para exportar todos los mapas a pedido (escrito en Kotlin Gradle DSL):

task("exportMaps") {
    val inputDir = "$projectDir/src/main/tiledmaps"
    val outputDir = "$projectDir/src/main/resources/maps"
    inputs.dir(inputDir)
    outputs.dir(outputDir)
    doLast {
        logger.info("Exporting 'Tiled' maps from directory $inputDir to $outputDir")
        val tmxFiles = file(inputDir).listFiles { dir, name -> name.endsWith(".tmx") }
        @Suppress("RECEIVER_NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS")
        tmxFiles.forEach {
            logger.info("Exporting ${it.name}")
            exec {
                val outputFile = file(outputDir).absolutePath + "/" + it.name
                commandLine = listOf("tiled", "--export-map", "--detach-templates", it.absolutePath, outputFile)
            }
        }
    }
}
tasks.clean {
    delete(fileTree("$projectDir/src/main/resources/maps") {
        exclude(".gitignore")
    })
}
tasks.processResources {
    dependsOn("exportMaps")
}

Como referencia, lea https://www.mapeditor.org/2018/09/18/tiled-1-2-0-released.html para obtener información sobre las preferencias de separación. Buscar:

Por esta razón se agregaron varias Opciones de Exportación a las Preferencias:

Sin embargo... implementar el soporte de plantillas de objetos reales en las clases no debería ser un gran esfuerzo. Simplemente no quería bifurcarlo y usar una versión personalizada de libgdx para mi proyecto mientras espero que se acepte una solicitud de extracción y se lance la próxima versión de libgdx.

Hola, estoy creando un recurso educativo usando LibGDX, tener la funcionalidad de la plantilla funcionando sin exportar con la plantilla separada ayudaría mucho.

¿Fue útil esta página
0 / 5 - 0 calificaciones