#python #tiled #tmx #pytmx
#python #tiled #tmx #pytmx
Вопрос:
Я всегда получаю gid == 1 для первого элемента в картах, даже с тем же набором листов. Сохраненный файл «example.tmx» имеет значение, закодированное с помощью CVS. Я открываю файл с помощью текстового редактора, и он выглядит так:
<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 (yamp;1) * self.tmxdata.tilewidth / 2, y * self.tmxdata.tileheight / TILESIZE[0] * TILESIZE[1]))
self.id = 1
Печатные значения (first == x, second == y, third == gid, last == 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(...)
Ответ №1:
Хорошо, я решил это.
В pytmx «register_gid» у меня не работает должным образом. Мне нужно было составить такой список:
self.listtiles = [z for z in tm.gidmap]
И затем, когда я просматриваю каждый элемент в layer, я могу получить его из этого списка.
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 (yamp;1) * self.tmxdata.tilewidth / 2, y * self.tmxdata.tileheight / TILESIZE[0] * TILESIZE[1]))
self.id = 1
Ответ №2:
Pytmx странный. Довольно сложно получить идентификатор плитки (вероятно, bcz может быть несколько плиток)
Это то, что я нашел.
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