Учитывая, как трудно найти информацию о настройке пользовательских компонентов, я решил прояснить некоторые аспекты процесса на основе того, что я испытал.
INIT EVENT:
В большинстве случаев приведенный выше пример с айайданом верен, за одним исключением.
addEventListener(Event.INIT, onInit);
должно быть:
loaderInfo.addEventListener(Event.INIT, onInit);
свойство loaderInfo объекта DisplayObject ссылается на LoaderInfo, из которого ваш компонент получает настройки параметров. событие INIT вызывается, когда оно получает свои данные (альтернативно вы можете использовать событие COMPLETE, которое должно запускаться сразу после INIT)
ПРОВЕРЕННЫЕ МЕТАДАТЫ:
когда вы устанавливаете свойства для доступа к ним с помощью тега метаданных [Inspectable], вы также можете определить значения по умолчанию, используя:
[Inspectable(defaultValue="whatevervalue")]
Судя по моему опыту, параметры имеют проблемы с чем-то, кроме String (и, возможно, Numbers), поэтому я бы предложил использовать функции set, которые принимают строковые значения и используют их для получения других значений, которые вы можете захотеть. например, если вы хотите загрузить новый экземпляр определенного именованного класса
[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:
Если вы хотите, чтобы ваш пользовательский компонент изменял размеры иначе, чем просто растягивая значения высоты и ширины, вам нужна публичная функция setSize. эта функция будет вызываться каждый раз, когда вы изменяете размер компонента во флэш-памяти.
public function setSize(w:Number, h:Number):void{
_menuWidth = w;
_menuHeight = h;
}
теперь это прекрасно работает, когда вы изменяете размер компонента во флэш-памяти, но как только вы действительно опубликуете свой 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
}
(если кто-нибудь найдет менее грязный способ сделать это, сообщите)
надеюсь, что это поможет кому-то настроить и запустить свои пользовательские компоненты.