2

下面是要使用 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]

这是我的应用程序中对速度至关重要的部分,因为我打算渲染大量图块。有没有更快的方法以指定的顺序遍历图块?可能消除嵌套循环有帮助吗?

非常感谢!

4

1 回答 1

0

我会先订购数据结构。如果您订购向量,那么迭代会更快。

一般来说,使用有序数据结构对这类事情有好处。

如果您出于某种原因操作结构,则需要执行“有序插入”或删除,这会比较慢。使用有序数据结构的权衡在于插入和删除,并且由于板不应该发生太大变化,因此看起来您只能使用有序数据结构。

于 2013-02-10T04:14:57.123 回答