0

我总是为地图中的第一个元素获取 gid == 1,即使使用相同的图块集也是如此。保存的文件“example.tmx”具有使用 CVS 编码的值。我用 txt 编辑器打开文件,它看起来像这样:

<data encoding="csv">
24,24,19,24,24,22,19,23,18,23,2
...

这很棒。第一个元素是第 24 个图块。但是当我用 pytmx 加载地图时,我尝试获取 x, y, gid 它是不同的。

ti = self.tmxdata.get_tile_image_by_gid
for layer in self.tmxdata.visible_layers:
            #print(layer.name)
            if layer.name == "layer1": 
                for x, y, gid in layer:
                    print(x, y, gid, self.id)
                    tile = ti(gid)
                    #print(self.tmxdata.get_tileset_from_gid(gid))
                    #print(tile)
                    if tile:
                        surface.blit(tile, (x * self.tmxdata.tilewidth + (y&1) * self.tmxdata.tilewidth / 2, y * self.tmxdata.tileheight / TILESIZE[0] * TILESIZE[1]))
                    self.id += 1

打印值为(第一个 == x,第二个 == y,第三个 == gid,最后一个 == id):

0 0 1 0
1 0 1 1
2 0 1 2 ...

它适用于所有地图,第一个 gid 始终为“1”,但它描述了不同地图中的不同图块。

使用 ti(gid) / get_tile_image_by_gid 可以获得正确的图像。但我想将 gid 号码用于其他想法,例如:

if gid == 1:
    self.grass_group.append(...)
else:
    self.other_group.append(...)
4

1 回答 1

0

好的,我解决了。

在 pytmx 中,“register_gid”对我来说不能正常工作。我需要制作这样的列表:

self.listtiles = [z for z in tm.gidmap]

然后当我遍历层中的每个元素时,我可以从这个列表中得到它。

if layer.name == "layer1": 
    for x, y, gid in layer:
        # old wrong
        print(x, y, gid, self.id)   
        # new correct
        print(x, y, self.listtiles[int(gid - 1)], self.id)    
        tile = ti(gid)
        if tile:
            surface.blit(tile, (x * self.tmxdata.tilewidth + (y&1) * self.tmxdata.tilewidth / 2, y * self.tmxdata.tileheight / TILESIZE[0] * TILESIZE[1]))
        self.id += 1
于 2020-09-22T10:39:31.397 回答