考虑到查找有关自定义组件设置的信息有多么困难,我想我会根据我的经验来澄清该过程的某些方面。
初始化事件:
上面的 aaaidan 示例大部分是正确的,但有一个例外。
addEventListener(Event.INIT, onInit);
应该是:
loaderInfo.addEventListener(Event.INIT, onInit);
DisplayObject 的 loaderInfo 属性引用了一个 LoaderInfo,您的组件从中获取其参数设置。 INIT 事件在它获取数据后被调用(或者你可以使用 COMPLETE 事件,它应该在 INIT 之后直接触发)
可检查的元数据:
当您使用元数据 [Inspectable] 标签设置要访问的属性时,您还可以使用以下方法定义默认值:
[Inspectable(defaultValue="whatevervalue")]
根据我的经验,参数似乎无法处理除字符串(可能还有数字)以外的任何内容,因此我建议使用获取字符串值的集合函数并使用它们来获取您可能想要的其他值。例如,如果您想加载特定命名类的新实例
[Inspectable(defaultValue="flash.display.Sprite")]
public function set className(value:String):void{
var ClassReference:Class = getDefinitionByName(value) as Class;
_class = new ClassReference();
}
在此示例中,如果参数设置为“flash.display.Sprite”,则调用“new _class() 将创建一个新的 Sprite 实例。
设置大小函数:
如果您希望自定义组件以其他方式调整大小,而不是简单地拉伸高度和宽度值,您需要一个公共 setSize 函数。每次在 Flash 中调整组件大小时都会调用此函数。
public function setSize(w:Number, h:Number):void{
_menuWidth = w;
_menuHeight = h;
}
现在,当您在 Flash 中调整组件的大小时,这很有效,但是一旦您实际发布您的 swf 文件,您会注意到它切换回拉伸宽度和高度,而不是使用您的 setSize 函数(我不知道为什么,但这就是它的作用)。要解决此问题,您需要在 onInit 函数中获取宽度和高度,将它们输入 setSize,然后将 scaleX 和 scaleY 值重置为 1:
public function onInit(e:Event):void{
setSize(width,height);
scaleX = 1;
scaleY = 1;
//add other functions that need to be run once the parameters are loaded
}
(如果有人发现这样做不那么混乱的方式,请告诉)
希望这有助于某人启动并运行他们的自定义组件。