簡體   English   中英

Tiled / pytmx - 在不同地圖中為相同圖像獲取相同 gid 的問題

[英]Tiled / pytmx - Problem with getting same gid for same image in different maps

我總是為地圖中的第一個元素獲取 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(...)

好的,我解決了。

在 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

Pytmx 很奇怪。 獲取 tile 的 id 非常困難(可能 bcz 可以有多個 tilemaps)

這就是我發現的。

tmx_data = #load tmx data
gid_to_id_map = list(tmx_data.gidmap) # get list of keys

def get_id(gid): #index is supposed to mean id
    if gid != 0: #getting id for 0 is very strange
        index = tmx_data[gid-1]-1
    else: index = -1
    return index
# this is so stupidly complicated

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM