0

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

我想我想要的是 DOM 树之类的东西,甚至更好的是 getElementByName() 在 JavaScript 中的工作方式。并获取实例名称的字符串值,以便我可以在 xml 中找到它的文本值。

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

4

3 回答 3

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(this) 或 traceAllChildren(myParentMovieClip)。

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

于 2008-11-23T19:06:05.903 回答
1

简短的回答:没有“内置”方法可以做到这一点。您可以尝试查找类似于 getElementByName() 的功能,但它需要从_root内容开始并爬取 - 严格来说,影片剪辑开始时引用其子项,但它们可以在运行时删除,因此这可能会失败.

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

于 2008-11-19T03:23:33.747 回答
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!

于 2008-11-18T17:56:45.500 回答