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

...这很容易,因为所有这些组件共享同一个父级。

或者,如果只有一扇门,您可以将其设为单例,并为其提供静态引用,如下所示:

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 回答