Обработка тайловых объектов с помощью Pytmx - PullRequest
3 голосов
/ 12 июля 2020

, поэтому я пытаюсь создать платформер с боковой прокруткой и создал карту с помощью Tiled Map Editor. Я успешно загрузил объекты и плитки без плитки в свою игру, используя следующий класс, который я написал:

 class TiledMap:
    def __init__(self, filename):
        tm = pytmx.load_pygame(filename, pixelalpha=True)
        self.tmxdata = tm
        self.width = tm.width * tm.tilewidth
        self.height = tm.height * tm.tilewidth

    def render(self, surface):
        # ti = self.tmxdata.get_tile_image_by_gid
        for layer in self.tmxdata.visible_layers:
            if isinstance(layer, pytmx.TiledTileLayer):
                for x, y, gid, in layer:
                    tile_bitmap = self.tmxdata.get_tile_image_by_gid(gid)
                    if tile_bitmap:
                        surface.blit(   
                            tile_bitmap,
                            (x * self.tmxdata.tilewidth, y * self.tmxdata.tileheight),
                        )

            # This doesn't work but I tried to do this

            elif isinstance(layer, pytmx.TiledObject):
                for x, y, gid in layer:
                    for objects in self.tmxdata.objects:
                        if objects.name == "Background":
                            img_bitmap = self.tmxdata.get_tile_image_by_gid(gid)

                            surface.blit(img_bitmap, (objects.x, objects.y))

    def make_map(self):
        temp_surface = pg.Surface((self.width, self.height))
        self.render(temp_surface)
        return temp_surface

И теперь я пытаюсь загрузить фоновое изображение, которое, согласно документации редактора карты плиток, я превратили в большой объект плитки и поместили на фоновый слой. Но я не знаю, как загрузить плиточный объект с помощью Pytmx, я попытался посмотреть исходный код, и, похоже, он поддерживает плиточные объекты. Я знаю, что у этих плиточных объектов было свойство gid, но я не уверен, как с его помощью загрузить изображение объекта тайла.

И я новичок в pygame и pytmx, но не обязательно новичок в python. Спасибо!

1 Ответ

0 голосов
/ 13 июля 2020

Я нашел решение, прочитав исходный код Pytmx и попробовав его. Итак, это код, который я использую для чтения объектов плитки.

    for tile_object in self.map.tmxdata.objects:
            if tile_object.name == "Player":
                self.player = Player(self, tile_object.x, tile_object.y)
            if tile_object.name == "Platform":
                TiledPlatform(
                    self,
                    tile_object.x,
                    tile_object.y,
                    tile_object.width,
                    tile_object.height,
                )
            if tile_object.name == "Background":
                self.img_bitmap = self.map.tmxdata.get_tile_image_by_gid(
                    tile_object.gid
                )

                self.temp_rect = pg.Rect(
                    tile_object.x, tile_object.y, tile_object.width, tile_object.height
                )

По сути, это цикл по вашим объектам, и поскольку это объект плитки, он имеет свойство gid. Получите изображение с помощью gid, и я создал прямоугольник, чтобы я мог применить свою камеру к фону (для эффекта параллакса). Затем вы копируете изображение и прямоугольник, и вот вы go.

Кроме того, мне пришлось включить флаг pg.SRCALPHA при рендеринге моей карты тайлов, чтобы она выглядела правильно.

...