代码之家  ›  专栏  ›  技术社区  ›  typeoneerror

Flash10中的显示列表是什么?数组?链表?

  •  0
  • typeoneerror  · 技术社区  · 15 年前

    我正在开发一款舞台上有很多元素的游戏,所以我想优化我的循环。我知道 Vector 比循环数组快,但在某些情况下我也使用:

    while (i < numChildren)
        getChildAt(i)
    

    …更新精灵。

    我的问题是,当我使用getchildat时,是访问数组、向量、链表还是其他?我应该将对对象的引用存储在一个向量中,然后循环遍历它吗?

    2 回复  |  直到 15 年前
        1
  •  4
  •   back2dos    15 年前

    如果舞台上有很多元素,那么大部分时间可能都花在渲染上。
    而且,它只关系到一点,孩子的列表 DisplayObjectContainer 实现,因为函数调用的成本比 Vector S或 Array 事实上,子列表是使用C/C++集合实现的,而不是来自ActionScript Bu建Tin集合的所有开销。

    因此,是的,将所有子项存储在一个向量中将允许更快的查找,尽管删除将变得昂贵。即使是插入也会变得更昂贵(如果在进行更改和监听删除事件时重写所有子操作方法以更新向量),或者更困难。

    你应该让你的根精灵隐形运行你的游戏,看看它消耗了多少。
    根据我的经验,这种优化不会产生任何显著的加速。你应该尝试学习现有的Flash游戏优化技术。

    尔兹
    后台操作系统

        2
  •  1
  •   davr    15 年前

    据文件记载, getChildAt() 是快速哈希表查找(与 getChildByName() 这是一个(相对)较慢的链表遍历。