Плохая производительность при относительно небольшом количестве спрайтов и карте тайлов среднего размера?

Я использую python cocos2D и пытаюсь отобразить карту множества плиток. Около 100x100 32px плитки. Это работает хорошо, когда меня увеличивают, как только я уменьшаю масштаб, чтобы видеть больше, это становится очень изменчивым.

Я также пытался использовать свои собственные спрайты, и это было еще хуже. Я не уверен, почему это так плохо, учитывая, что я видел, как Pygame обрабатывает больше (и гораздо более сложных) спрайтов, чем это не проблема. Имеет ли версия карты мозаики какое-то отношение к тому, как я масштабируюсь?

РЕДАКТИРОВАТЬ: мне удалось значительно увеличить производительность с помощью пакета (который я понятия не имел, вещь, и потребовалось некоторое оглядываясь вокруг, чтобы найти). Это, вероятно, должно быть упомянуто где-то менее неясным (если я не просто глуп и пропустил это). В любом случае мне все еще интересны отзывы о том, как улучшить это (т.е. сколько спрайтов в пакете?) И как улучшить карту тайла?

class Tile(cocos.sprite.Sprite):
    def __init__(self, image, position):
        super().__init__(image, position=position)

class GridLayer(cocos.layer.ScrollableLayer):
    def __init__(self):
        super().__init__()

        for x in range(50):
            for y in range(50):
                self.add(Tile('tile.png', (x*32, y*32)))



class Scroll(cocos.layer.ScrollingManager):
    is_event_handler = True

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        win_size = Vector2(*cocos.director.director.get_window_size())

        self.set_focus(win_size.x / 2, win_size.y / 2)

    def on_mouse_drag(self, x, y, dx, dy, buttons, modifiers):
        if buttons == 1:
            a, b = self.fx - dx, self.fy - dy
            self.force_focus(a, b)

    def on_mouse_scroll(self, x, y, buttons, dir):
        if self.scale < 1: dir *= self.scale
        self.scale += dir * 0.1


def main():
    cocos.director.director.init(1024, 600, resizable=True)

    scroll = Scroll()
    # This is the time map version:
    grid = cocos.tiles.load('tmp.tmx')['Tile Layer 1']
    scroll.add(grid)

    # This is the custom sprite version:
    # scroll.add(GridLayer())


    main_scene = cocos.scene.Scene(scroll)
    cocos.director.director.run(main_scene)

if __name__ == '__main__':
    main()

0 ответов

Другие вопросы по тегам