【问题标题】:Iterate Shape children - Flash/as3迭代形状子元素 - Flash/as3
【发布时间】:2014-05-20 16:13:30
【问题描述】:

我正在使用 Flash CC。 我使用矩形工具绘制了 7 个矩形。 然后我将 7 转换为一个影片剪辑(按 F8)。

问题: 我希望能够遍历这些形状并单独移动每个形状。 然而,这 7 个矩形似乎被封装成一个形状,我无法访问它们。? 如果我在影片剪辑上使用 .numChildren,它会返回 1。 如果我使用 .getChildAt("anything > 0") 它是一个空引用异常。

请帮忙, 我不明白这怎么这么难。

我已经寻找了很长时间才能找到解决这个问题的方法,而我这辈子都找不到。 提前致谢。

(P.s)在代码中实例化矩形是可行的,但我需要能够通过 Flash CC 来做到这一点,因为我将导入艺术家材料进行操作。

【问题讨论】:

    标签: actionscript-3 flash


    【解决方案1】:

    您最好的选择是使您制作的影片剪辑中的每个形状也成为影片剪辑。 在 Flash 中进入您制作的 MovieClip(我将其称为 containerMC 以便于理解)并按 F8 使每个形状成为 MovieClip。如果需要,您还可以为它们指定实例名称,只要确保它们是唯一的即可。

    然后您的 containerMC 将在您的情况下返回 numChildren 值 7。 您可以通过 getChildAt() 或使用您通过 containerMC.instance1 或 containerMC["instance1"] 提供的实例名称来移动/访问 containerMC 中的形状。

    【讨论】:

    • 这可能是我一直在寻找的答案,,,我不再工作了,所以我会在早上检查这个.. 我假设某种批处理过程正在进行中优化/支持屏幕上的所有图形?如果我将所有这些都转换为电影剪辑,您认为这会影响性能吗?再次感谢!
    • 不会有明显的性能差异,因为把它做成一个movieClip只会增加几百个字节(如果你把它做成Sprite,如果它没有动画但想保持交互性则更少) . Flash 在优化方面做得很差,所以最后你仍然需要测试它,但我不明白它会成为一个瓶颈。更多的是关于如何处理图形,最后您可以将它们制作为位图或使用 copyPixels() 来实现最大性能。如果你想使用 GPU 进行渲染,你可能无论如何都需要使用 Starling。
    • 再想一想,这可能行不通,因为我只能将代码中的所有形状更改为电影剪辑,就像我正在处理的项目中一样,将数以百计,甚至更多……
    • 在这种情况下,您需要一种不同的方法。在代码中制作一个 Sprite,它将是您的形状保持器/容器。然后在代码中创建任意数量的形状,并通过 addChild() 将它们添加到容器中。在创建形状后,将它们添加到数组中,以便能够引用它们以供以后使用。那么只要 Flash 没有耗尽内存,你有多少并不重要;)
    猜你喜欢
    • 2015-08-14
    • 1970-01-01
    • 2018-02-23
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    • 1970-01-01
    • 2013-08-22
    • 1970-01-01
    相关资源
    最近更新 更多