有没有办法直接从属性/组件参数窗口传递对象引用到组件?使用[Inspectible]标签只允许我输入字符串而不是实际的对象引用。
例如,我有一个名为“knob”的自定义组件,它应该保持对它打开的舞台上的门的引用。我知道这可以通过代码“knob.door = someDoor”轻松完成。但由于场景中有很多物体,如果我能通过属性窗口直观地看到它,我会更喜欢。
答案 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数组,并给你的句柄一个索引号将它链接到特定的门。