有没有一种方法可以直接从属性/组件参数窗口将对象引用传递到组件?使用[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。