0

我最近更改了显示对象的构造函数以验证它们是否在舞台上。但是,这完全破坏了我将值传递给子函数的能力。例如(为清楚起见,删除了很多代码):

家长:

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 );
}

在这个例子中,我会在第一个跟踪中得到正确的值var1var2,但在第二个跟踪中得到 0 和 0。反复测试表明,离开构造函数后,一旦离开构造函数,varA和varB的值就被完全忘记了,即使它们被声明为公共变量。

我承认我对动作脚本有很多不了解,但这让我摸不着头脑。任何帮助深表感谢。我知道我可以从孩子那里查看父母中的变量,但这对我的需要不起作用;我需要将值传递下来并存储它们。

4

1 回答 1

1

这是范围的问题。

当您trace( varA, varB );进入时ChildFunction,它使用作为参数传入 的varAand 。varB

当您trace( varA, varB );进入 时onAddToStage,它使用的是从未更改过的 and,因此应该是它们的默认值 0 public var varA:uint;public var varB:uint;

我假设您打算做的是ChildFunction在其构造函数中设置 的公共数据:

public function ChildFunction( varA:uint, varB:uint )
{
    trace( varA, varB );
    this.varA = varA;
    this.varB = varB;

    if ( stage )
    {
        ...
于 2013-01-04T19:29:39.873 回答