2008-11-18 16 views
0

是否有可能使用动作脚本2获得在Flash动画中具有名称的所有实例的列表。就像包含所有命名文本区域或所有movieClip实例等的数组一样。我希望为了得到这个,设计人员可以添加或删除文本区域等,动作可以动态地找到这些文件并从单独的数据源获取文本。在Flash动画中获取所有命名实例

我想我想要的东西就像一个DOM树,或者甚至更好的东西就像getElementByName()如何在JavaScript中工作。并且还可以获取实例名称的字符串值,以便我可以在xml中找到它的文本值。

假设设计师添加一个名为“copyright”的新文本区域,并且我的代码应该(无需更改脚本)在XML文件中找到ID为“copyright”的数据(如果有)将该值添加到文本区域。

+0

我仍然无法找到任何东西,至少这个问题现在是谷歌搜索“获取所有实例闪存”的最高结果等。 – 2008-11-18 14:45:10

回答

2

@Stein Gauslaa Strindhaug

这是相当粗糙,但它应该做的伎俩!

private function traceAllChildren(rootContainer:DisplayObjectContainer):void { 
    for(var i=0; i < rootContainer.numChildren; i++) { 
     var item:* = rootContainer.getChildAt(i); 
     try { 
      traceAllChildren(item); 
     } catch (e:Error) { 
      trace(e.toString()); 
     } 
     trace(item.toString()); 
     // This is the block where you can affect 
     // an 'item' depending on it's type, name, etc.. 
     // eg: 
     //  if (item.toString() == '[object TextField]') { 
     //   item.text = "The text I want to insert"; 
     //  } 
     // or 
     //  if (item.name == myTextFieldNameVar) { 
     //   item.text = "The text I want to insert"; 
     //  } 
    } 
} 

然后调用它像这样:traceAllChildren(本)或traceAllChildren(myParentMovieClip)。

我希望这会有所帮助,祝你好运!

0

自从我做了任何AS2编码以来已经有一段时间了,但也许您可以使用MovieClip.getInstanceAtDepth()和this.getNextHighestDepth()的组合来找到电影中最高的深度,然后追溯每个较低的深度,直到您找到一个getInstanceAtDepth(),它对应于您希望用新数据填充的剪辑。

我也注意到在AS2文档中的这个示例代码。

下面的代码跟踪舞台上所有影片剪辑实例的深度:

for (var i in this) { 
    if (typeof (this[i]) == "movieclip") { 
    trace("movie clip '"+this[i]._name+"' is at depth "+this[i].getDepth()); 
    } 
} 

PS:我知道你可能不愿意听到这个,但是在AS3它是抄你可以只遍历通过this.children!

+0

在作者时间放置的元素被分配负深度,并且没有办法获得最小深度。所以为了确保遍历所有内容,你必须从getNextHighestDepth()到-MAXINT。 – fenomas 2008-11-19 03:26:53

+0

我已经设法将我的大部分代码转换为AS3,您是否愿意解释如何在AS3中执行此操作? – 2008-11-23 13:58:38

1

简短的回答:没有“内置”的方式来做到这一点。你可以尝试编写类似于getElementByName()的功能,但是它需要从_root开始,并通过内容抓取 - 严格来说,影片剪辑始于引用它的子节点,但它们可能会在运行时被删除,所以这可能会失败。

这就是说,这是一个常见的问题,有很多方法。您可能会发现更有用的一件事是创建一个附加到自定义类的自定义组件 - 比如说“TextPlaceholder”,并让您的设计者将它们的副本放在他们想要动态文本的位置。然后在运行时,此组件可以检查其属性或其他自定义组件参数,并根据它们创建适当大小,内容等的文本字段。这只是接近它的一种方式。