我正在使用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的地图,则需要花费一分多钟时间,但一旦完成就没有问题。