zl程序教程

您现在的位置是:首页 >  其他

当前栏目

pytmx错误: “XML tile elements are no longer supported. Must use base64 or csv map formats.“

错误MapXML No or use csv must
2023-09-11 14:20:50 时间

\pytmx\pytmx.py", line 1311, in parse_xml
    "XML tile elements are no longer supported. Must use base64 or csv map formats."

不再支持XML平铺元素。必须使用base64或csv映射格式。

 

 重新调整一下,变换一个tmx文件中的图块层格式就可以解决了。

出错代码:

class TiledTileLayer(TiledElement):
    """Represents a TileLayer

    To just get the tile images, use TiledTileLayer.tiles()
    """

    def __init__(self, parent, node):
        TiledElement.__init__(self)
        self.parent = parent
        self.data = list()

        # defaults from the specification
        self.name = None
        self.width = 0
        self.height = 0
        self.opacity = 1.0
        self.visible = True
        self.offsetx = 0
        self.offsety = 0

        self.parse_xml(node)

    def __iter__(self):
        return self.iter_data()

    def iter_data(self) -> Iterable[Tuple[int, int, int]]:
        """
        Yields X, Y, GID tuples for each tile in the layer

        Returns:
            Iterator of X, Y, GID tuples for each tile in the layer

        """
        for y, row in enumerate(self.data):
            for x, gid in enumerate(row):
                yield x, y, gid

    def tiles(self):
        """
        Yields X, Y, Image tuples for each tile in the layer

        Returns:
            Iterator of X, Y, Image tuples for each tile in the layer

        """
        images = self.parent.images
        for x, y, gid in [i for i in self.iter_data() if i[2]]:
            yield x, y, images[gid]

    def _set_properties(self, node):
        TiledElement._set_properties(self, node)

        # TODO: make class/layer-specific type casting
        # layer height and width must be int, but TiledElement.set_properties()
        # make a float by default, so recast as int here
        self.height = int(self.height)
        self.width = int(self.width)

    def parse_xml(self, node: ElementTree.Element):
        """
        Parse a Tile Layer from ElementTree xml node

        Args:
            node: node to parse

        """
        self._set_properties(node)
        data_node = node.find("data")
        chunk_nodes = data_node.findall("chunk")
        if chunk_nodes:
            msg = "TMX map size: infinite is not supported."
            logger.error(msg)
            raise Exception

        child = data_node.find("tile")
        if child is not None:
            raise ValueError(
                "XML tile elements are no longer supported. Must use base64 or csv map formats."
            )

        reg = self.parent.register_gid
        temp = list()
        temp_append = temp.append
        for gid in unpack_gids(
            text=data_node.text.strip(),
            encoding=data_node.get("encoding", None),
            compression=data_node.get("compression", None),
        ):
            if gid == 0:
                temp_append(0)
            elif gid < GID_TRANS_ROT:
                gid = reg(gid)
                temp_append(gid)
            else:
                gid, flags = decode_gid(gid)
                gid = reg(gid, flags)
                temp_append(gid)

        self.data = reshape_data(temp, self.width)
        return self