考虑到找到有关自定义组件设置的信息是多么困难,我想我会根据我的经验来澄清该过程的某些方面。
初始化事件:
上面的例子在大多数情况下都是正确的,但有一个例外。
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
}
(如果有人找到了一种不那么混乱的方法,请告诉我们)
希望这可以帮助人们启动并运行他们的自定义组件。