有人可以解释显示对象的“name”属性与 getChildByName(“XXX”)函数找到的值之间的区别吗?它们在90%的情况下是相同的,直到它们不存在,并且事情就会崩溃。
例如,在下面的代码中,我只通过直接检查子名称属性,通过实例名称找到一个对象; 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正在思考什么想法?
答案 0 :(得分:4)
好像你自己解决了!
使用:
var do1:DisplayObject = gfx.amSword.getChildByName["amWeaponExchange"];
您收到错误:
ReferenceError: Error #1069: Property amWeaponExchange not found on builtin.as$0.MethodClosure and there is no default value.
因为编译器正在实际的getChildByName 方法上寻找属性“amWeaponExchange”。
将其更改为:
var do1:DisplayObject = gfx.amSword.getChildByName("amWeaponExchange");
正如您在编辑中所做的那样,它成功找到了孩子并进行了编译。
答案 1 :(得分:0)
我还没有真正理解你在做什么。但我发现有一件事是在第一帧中访问MovieClip的孩子有点不可靠。例如,你不能gotoAndStop()然后访问那个框架上的孩子,你必须等待一个框架才能使用它们。
答案 2 :(得分:0)
在一个地方你循环通过gfx.amSword和另一个egfx.amSword - 你错过了e。 ?
此外,这不是问题的原因,但是类名应该以大写字母开头而不包括下划线。 “a_Character”应该只是“Character”。
答案 3 :(得分:0)
我想我应该发布一个更清楚的失败例子。有趣的类名称只是我对Flash IDE自动生成的类的个人命名约定,其中包含“export for Actionscript”,但它使问题混乱。
答案 4 :(得分:-1)
我误解了第一个答案。
这可能与“Flash IDE发布”设置有关:“ActionScript 3.0设置”对话框中的“自动声明阶段实例”。