Предоставляет ли pytmx способ узнать, было ли изображение повернуто, перевернуто горизонтально / diag работает с Tiled? - PullRequest
2 голосов
/ 20 января 2020

Я создаю игру, используя Pygame и Tiled для разработки карты. Я могу загружать плитки и перетаскивать их на экран. Когда я переворачиваю плитку горизонтально / вращаюсь внутри Tiled и запускаю игру, плитки не вращаются внутри игры.

Поэтому я хотел бы проверить, вращается ли плитка / перевернутая перед тем, как бросить плитку на на экране, и я не уверен, как именно это сделать, или если это вообще возможно, и продолжать использовать плитки без каких-либо поворотов или переворачивания внутри Tiled?

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

import pytmx

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

    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 = ti(gid)
                    if tile:
                        # check for flags first.. ie rotating, flips
                        # do the neccessary transformations... this part i know
                        # blit the transformed tile

                        # if no flags just blit the image
                        surface.blit(tile, (x * self.tmxdata.tilewidth,
                                                    y * self.tmxdata.tileheight))

, как та же самая мозаика, перевернутая горизонтально, появляется внутри Tiled

, как изображение загружается при запуске игра


Хорошо, так что после прочтения Переворачивание плитки , вот что я понял из нее.

  • Получить gid

Уже есть это из этого бита кода for x, y, gid, in layer:

  • Проверьте наличие флагов

Высшая тройка биты gid хранят перевернутые состояния.

Говорит, что 32-й бит предназначен для горизонтального переворота. Таким образом, чтобы проверить это, мы делаем h_flipped = gid & (1<<31) # correct? Но проблема здесь в том, что когда я делаю это, он оценивается в 0. Распечатка gids дает 1 для непроверенной плитки и 2 для перевернутой плитки, поэтому 2 & (1<<31) # false

Псевдокод был немного запутанным, и, возможно, я неправильно его понял. Таким образом, либо ошибки, которые я получаю, неверны, либо проверка на бит неверна? или оба? Дополнительная помощь приветствуется

...