1

谁能解释显示对象的“名称”属性与getChildByName(“XXX”)函数找到的值之间的区别?它们 90% 的时间都是一样的,直到它们不一样,事情就崩溃了。

例如,在下面的代码中,我仅通过直接检查孩子的 name 属性来按实例名称查找对象;getChildByName()失败。

var gfx:MovieClip = new a_Character(); //(a library object exported for Actionscript)

var do1:DisplayObject = null;
var do2:DisplayObject = null;

for( var i:int = 0 ; i < gfx.amSword.numChildren ; i++ )
{
    var child:DisplayObject = gfx.amSword.getChildAt(i);
    if( child.name == "amWeaponExchange" )  //An instance name set in the IDE
    {
        do2 = child;
    }
}

trace("do2:", do2 );

var do1:DisplayObject = gfx.amSword.getChildByName("amWeaponExchange");

生成以下输出:

do2: [object MovieClip]
ReferenceError: Error #1069: Property amWeaponExchange not found on builtin.as$0.MethodClosure and there is no default value.

Flash在想什么?

4

5 回答 5

4

It seems you fixed it yourself!

With:

var do1:DisplayObject = gfx.amSword.getChildByName["amWeaponExchange"];

You get the error:

ReferenceError: Error #1069: Property amWeaponExchange not found on builtin.as$0.MethodClosure and there is no default value.

Because the compiler is looking for the property "amWeaponExchange" on the actual getChildByName method.

When you change it to:

var do1:DisplayObject = gfx.amSword.getChildByName("amWeaponExchange");

As you did in your edit, it successfully finds the child and compiles.

于 2008-09-23T16:10:29.433 回答
0

我还没有真正理解你在做什么。但我发现一件事是在第一帧访问 MovieClip 的孩子有点不可靠。例如,您不能 gotoAndStop() 然后访问该框架上的任何孩子,您必须等待一个框架才能使用它们。

于 2008-09-22T07:22:50.660 回答
0

在一个地方你循环通过 gfx.amSword 和另一个 e.gfx.amSword - 你错过了 e. ?

此外,这不是问题的原因,但类名应该以大写字母开头,并且不包含下划线。“a_Character”应该只是“Character”。

于 2008-09-22T11:45:49.000 回答
0

哎呀,你对 e 的看法是对的,Iain,但这不是问题所在,我从代码中删除了 e 以专注于问题,但没有抓住那个问题。

我想我应该发布一个更清晰的失败示例。有趣的类名只是我个人对 Flash IDE 使用“export for Actionscript”自动生成的类的命名约定,但它使问题变得混乱。

于 2008-09-22T14:47:06.647 回答
-1

我误解了我的第一个答案。

这可能与 Flash IDE 发布设置有关:ActionScript 3.0 设置对话框中的“自动声明舞台实例”。??

于 2008-09-22T14:56:17.983 回答