0

プロパティ/コンポーネント パラメータ ウィンドウからコンポーネントへのオブジェクト参照を直接渡す方法はありますか? [Inspectible] タグを使用すると、実際のオブジェクト参照ではなく文字列を入力できるようになります。

たとえば、開くステージ上のドアへの参照を保持する必要がある「knob」というカスタム コンポーネントがあります。これは、「knob.door = someDoor;」を使用してコードで簡単に実行できることを知っています。しかし、シーンには多くのオブジェクトがあるため、プロパティ ウィンドウを介して視覚的に行うことができればと思います。

4

1 に答える 1

0

私はあなたがこれを行うことができるとは思わない. 最善の方法は、文字列識別子 (クリップが深くネストされている場合はドット区切りのパス全体) を渡し、カスタム コンポーネント内にコードを実装して、そのアイテムを名前で検索することです。

水平および垂直の先行コンポーネントに対して相対的にレイアウトされるカスタム コンポーネントがあるので、次のようにします。

protected var horizontalPredecessor:String = "";

[Inspectable(name = "HorizontalPredecessor", type = String, defaultValue="")]
public function set HorizontalPredecessor($value:String):void 
{ 
    horizontalPredecessor = $value;
    drawNow();
}

override protected function draw():void
{
    if (parent)
    {
        if (horizontalPredecessor != "")
        {
            var hp:DisplayObject = parent.getChildByName(horizontalPredecessor);
            if (hp)
            {
                x = hp.y + hp.height + horizontalSpacing;
            }
        }
    }
}

... これらのコンポーネントはすべて同じ親を共有するため、簡単になります。

または、ドアが 1 つしかない場合は、それをシングルトンにして、次のように静的参照を与えることができます。

public class Door
{
     private static var _singleton:Door;

     public static function get Singleton():Door
     {
         if(!_door) _door = new Door();
         return _door;
     }

}

その後、ハンドルは参照するだけDoor.Singletonで、何も渡すことを心配する必要はありません。または、Door クラスにドアの静的配列を持ち、ハンドルにインデックス番号を付けて特定のドアにリンクすることもできます。

于 2012-08-28T18:19:55.670 に答える