如何加速许多空间排列的“瓷砖”的初始化?

时间:2017-10-29 20:44:23

标签: python performance pygame vectorization pyglet

我正在使用pyglets vertex_lists和批处理在网格中绘制多个正方形(不重要)。但是我发现使用这个双循环方法初始化所有正方形(这是Tile实例)需要很长时间。我不确定这是由于类实例化还是由于在嵌套for循环中进行而导致的开销。我不知道如何确定通过剖析这就是我在这里问的原因。

一旦所有内容都初始化,它可以完美地运行,没有性能问题(除了cocos操作不起作用,但这是另一个问题)。

我正在调查矢量化,但我不确定这是否有帮助。

class Tile(layer.Layer):
    def __init__(self, batch, x, y, r, g, b, a = 255, width = 32, height = 32):
        super().__init__()

        self.vertex_list = batch.add(4, gl.GL_QUADS, None,
                        ('v2i\static', (x, y, x+width, y, x+width, y+height, x, y+height)),
                        ('c4B', (r, g, b, a, r, g, b, a, r, g, b, a, r, g, b, a)))

class Map(layer.ScrollableLayer):
    """The representation of the boards map area. Contains all tiles."""
    def __init__(self, width, height, cell_width = 32, cell_height = 32):
        super().__init__()

        batch = graphics.Batch()

        for x in range(width):
            for y in range(height):
                col = (random.randrange(255), random.randrange(255), random.randrange(255), 255)
                cell = Cell(tile_batch, x*cell_width, y*cell_height, *col, cell_width, cell_height)

        self.batch = batch

如果我想创建一个宽度和高度为1000x1000的地图,则需要花费一分多钟时间,但一旦完成就没有问题。

0 个答案:

没有答案