Рисование спрайтов со смещением в pyglet очень медленно - PullRequest
0 голосов
/ 11 октября 2019

Я делаю простой проект в Python Pyglet, который включает в себя рисование большого количества объектов и плиток на экране, обычно ~ 77K плиток за раз, для этого я использую две партии и у каждой плитки есть спрайт,где его позиция x, y на экране - это позиция x, y в мире.

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

Я пробовал много способов повысить производительность:

  • Перемещение по glViewport (), но пакеты не рисуютобъекты за пределами исходного размера.
  • Обновление всех спрайтов координирует каждый тик, что безумно медленно
  • Рисование всех спрайтов в другой текстуре, но я не нашел ничего в документации оэто, метод blit_into дает мне «Cannot blit to texture.

Класс камеры update () вызывается каждый тик

class Camera:
    def __init__(self):
        self.world_sprites = []
        self.world_x = 0
        self.world_y = 0

    def add_sprite(self, spr: tools.WorldSprite):
        self.world_sprites.append(spr)

    def update(self):
        for spr in self.world_sprites:
            spr.update_camera(self)

UpdaМетод te_camera внутри класса WorldSprite

    def update_camera(self, cam):
        self._x = self.px - cam.world_x
        self._y = self.py - cam.world_y

        self._update_position()

Он работает, просто очень, очень медленно. Извините, если это большой вопрос.

...