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

この例では、最初のトレースでvar1との適切な値を取得しますvar2が、2番目のトレースでは0と0を取得します。繰り返しテストを行ったところ、コンストラクター関数を終了した後、varAとvarBの値は、パブリック変数として宣言されていても、コンストラクター関数を終了するとすぐに完全に忘れられることがわかりました。

アクションスクリプトについて知らないことがたくさんあることは認めますが、これは頭を悩ませます。どんな助けでも大歓迎です。親の変数を子から見ることができることはわかっていますが、それは必要なものでは機能しません。値を渡して保存する必要があります。

4

1 に答える 1

1

範囲の問題です。

の場合trace( varA, varB );、引数として渡される andをChildFunction使用しています。varAvarB

の場合trace( varA, varB );、変更されていないandをonAddToStage使用しているため、デフォルトの 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 に答える