从特性窗口添加对零部件的对象引用



有没有一种方法可以直接从属性/组件参数窗口将对象引用传递到组件?使用[Inspectible]标记只允许我输入字符串,而不允许输入实际的对象引用。

例如,我有一个名为"旋钮"的自定义组件,它应该包含对舞台上打开的门的引用。我知道用"knob.door=someDoor;"的代码可以很容易地完成这项工作,但由于场景中有很多对象,我更希望能通过属性窗口直观地完成。

我认为你做不到。最好的办法是传入一个字符串标识符(如果剪辑嵌套很深,可能是一个完整的点分隔路径),然后在自定义组件中实现代码,以按名称查找该项。

我有一个自定义组件,它相对于水平和垂直的前置组件进行布局,所以我这样做:

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的静态数组,并给句柄一个索引号,将其链接到特定的Door。

相关内容

最新更新