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