从属性窗口添加对组件的对象引用

时间:2012-08-28 16:54:23

标签: actionscript-3 flash properties components flash-cs5

有没有办法直接从属性/组件参数窗口传递对象引用到组件?使用[Inspectible]标签只允许我输入字符串而不是实际的对象引用。

例如,我有一个名为“knob”的自定义组件,它应该保持对它打开的舞台上的门的引用。我知道这可以通过代码“knob.door = someDoor”轻松完成。但由于场景中有很多物体,如果我能通过属性窗口直观地看到它,我会更喜欢。

1 个答案:

答案 0 :(得分: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类中有一个静态的Doors数组,并给你的句柄一个索引号将它链接到特定的门。