在pyglet中的偏移处绘制精灵非常慢

时间:2019-10-11 18:06:19

标签: python pyglet

我正在用python pyglet创建一个简单的项目,涉及到在屏幕上绘制大量实体和图块,通常一次绘制约77K的图块,为此,我使用了两批,并将每个图块作为一个精灵,它在屏幕上的x,y位置就是它在世界上的x,y位置。

当我尝试在其中实现某种侧向滚动功能时,问题就来了,为了避免问一个XY问题,我认为我应该问这样做的最佳方法是什么。

我尝试了多种方法来提高性能:

  • 在glViewport()周围移动,但是批处理不会绘制超出原始大小的实体。
  • 在每个刻度上更新所有精灵的坐标,这非常慢
  • 将所有精灵绘制到另一个纹理,但是我在文档中没有找到任何相关内容,blit_into方法使我“无法对纹理进行着色。

相机类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)

WorldSprite类内部的update_camera方法

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

        self._update_position()

它有效,只是非常非常慢。  抱歉,这是一个大问题。

0 个答案:

没有答案