下面是要使用 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
这些图块需要从后到前渲染,如下图所示:
在我的类定义中,原点是指最上面的瓦片(tile a
),因此left
类中定义的维度是向量沿[a b d g]
, right
维度是向量沿[a c f j]
。
这是我的应用程序中对速度至关重要的部分,因为我打算渲染大量图块。有没有更快的方法以指定的顺序遍历图块?可能消除嵌套循环有帮助吗?
非常感谢!