将XML节点转换为MovieClip

时间:2010-01-19 22:24:51

标签: xml actionscript-3 flash-cs4 movieclip

我有一个xml文档,我想在我的.fla中显示MovieClip:

<linkedMovieClip>TestClip</linkedMovieClip>

在我的.fla中,我创建了一个名为TestClip的符号,并选择了Linkage&gt;导出为Actionscript并将其命名为TestClip。

我的Document类中的代码跟踪xml:

var t:*= getDefinitionByName(String(slideItem.linkedMovieClip)) as Class;
var linked:MovieClip = new t();
trace("linked is..."+ linked); // outputs [Object TestClip];

然而,当我编译时,我收到错误#1065。

ReferenceError: Error #1065: Variable  is not defined.
    at global/flash.utils::getDefinitionByName()

我搜索了很多网站,建议包括以下导入:

import flash.utils.getDefinitionByName;
import TestClip;

我包含了以下虚拟变量:

public var _dummyClip:TestClip;

但是,我仍然收到错误消息。当我检查调试器时,它来自这一行:

var t:*= getDefinitionByName(String(slideItem.linkedMovieClip)) as Class;

有人可以提供建议吗?

2 个答案:

答案 0 :(得分:1)

您的代码看起来不错。尝试在程序中创建TestClip的实例,以确保将其编译到SWF中。追踪完全限定名称并确保它确实是TestClip

var _dummyClip:TestClip = new TestClip();
trace(flash.getQualifiedClassName(_dummyClip));//what does it trace?

答案 1 :(得分:1)

上面的答案,我现在看到了我的问题。

我的XML看起来像:

<items>
<item><linkedMovieClip>TestClip</linkedMovieClip></item>
<item><linkedMovieClip>TestClip</linkedMovieClip></item>
<item><linkedMovieClip>TestClip</linkedMovieClip></item>
<item></item>
<item><linkedMovieClip>TestClip</linkedMovieClip></item>
<item></item>
</items>

即。有些项目有节点,有些则没有。

当我使用for each (var item:XML in itemList)循环迭代我的XML节点()时,不包含节点的节点会失败并返回引用错误(因为没有名为“linkedMovieClip”的节点。

如果我使用if语句来检查节点是否存在,那么它可以工作:

 if (xmlListname.linkedMovieClip != undefined) {

         trace(String(xmlListname.linkedMovieClip));
  var c:* = getDefinitionByName(String(xmlListname.linkedMovieClip)) as Class;
         var mc:MovieClip = new c();
  trace(mc);
 }