我最近更改了显示对象的构造函数,以验证它们是否在舞台上。但是,这完全打破了我将值传递给子函数的能力。例如(为清晰起见,删除了大量代码):
父:
public var var1:uint;
public var var2:uint;
public var childFunction:ChildFunction;
public function createChild():void
{
childFunction = new ChildFunction( var1, var2 );
addChild( childFunction );
}
子:
public var varA:uint;
public var varB:uint;
public function ChildFunction( varA:uint, varB:uint )
{
trace( varA, varB );
if ( stage )
{
onAddtoStage();
}
else
{
addEventListener( Event.ADDED_TO_STAGE, onAddtoStage );
}
}
public function onAddtoStage( e:Event = null ):void
{
trace( varA, varB );
}
在这个例子中,我会在第一个跟踪中得到var1
和var2
的正确值,但在第二个跟踪中得到0和0。重复测试表明,在离开构造函数之后,只要构造函数被保留,varA和varB的值就会被完全忘记,即使它们被声明为公共变量。
我承认我对动作脚本有很多不了解,但这让我摸不着头脑。任何帮助深表感谢。我知道我可以只看孩子父母的变量,但这不适用于我需要的东西;我需要将值下移并存储它们。
答案 0 :(得分:1)
这是范围问题。
当您trace( varA, varB );
ChildFunction
时,它正在使用作为参数传入的varA
和varB
。
当您trace( varA, varB );
onAddToStage
时,它使用的public var varA:uint;
和public var varB:uint;
从未更改过,因此应该默认为0。
我假设您打算在其构造函数中设置ChildFunction
的公共数据:
public function ChildFunction( varA:uint, varB:uint )
{
trace( varA, varB );
this.varA = varA;
this.varB = varB;
if ( stage )
{
...