下面是使用pyglet渲染的2D等距图块地图的部分类定义。
class Map(object):
origin = 0
drytile = tile.dry
wettile = tile.wet
def __init__(self, left=8, right=8):
self.grid = np.array(([None] * left, [None] * right), dtype=object)
self._setup_grid()
def __iter__(self):
"""return tiles in the order in which they should be rendered"""
# get number of diagonals
ndiags = (np.max(self.grid.shape) * 2) -\
(1 + (np.max(self.grid.shape) - np.min(self.grid.shape)))
# get iterator to go through diagonals in back-to-front order
offsets = xrange(-(ndiags / 2), ndiags / 2 + 1)
# iterate in render order
for off in offsets:
for tile in np.flipud(self.grid).diagonal(off)[::-1]:
yield tile
这些图块需要从前到后呈现,如下图所示:
在我的班级定义中,原点指的是最顶部的图块(图块a
),因此类中定义的left
维度是[a b d g]
和{{{{{{ 1}}维度是right
的向量。
这是我的应用程序的速度关键部分,因为我打算渲染大量的tile。是否有更快的方式以指定的顺序迭代切片?可能会消除嵌套循环的帮助吗?
非常感谢!
答案 0 :(得分:0)
我会首先订购数据结构。如果你订购了矢量,那么迭代会更快。
一般来说,使用有序数据结构对于这类事情是有益的。
如果您出于某种原因操纵结构,则需要执行“有序插入”或删除,这样会更慢。使用有序数据结构的权衡取决于插入和移除,并且由于板不应该改变很多,所以看起来你只能使用有序的数据结构。