Хобрук: Ваш путь к мастерству в программировании

Невозможно получить доступ к библиотеке Flash Component (SWC) в режиме предварительного просмотра в реальном времени

Я создаю набор компонентов Flash с возможностью замены оболочки компонента на другую в библиотеке.

В настоящее время я могу получить доступ к библиотеке после запуска приложения, но не во время предварительного просмотра в реальном времени, и я хотел бы знать, может ли компонент получить доступ к библиотеке во время работы в режиме предварительного просмотра (режим, в котором вы можете перетаскивать компонент вокруг сцены и измените его свойства в окне Component Parameters)

Here is a simplified code that just looks to see if there is a symbol of the name specified and than instantiates it and adds it as a child.

package 
{
    import fl.core.UIComponent;
    import flash.display.MovieClip;
    import flash.system.ApplicationDomain;

    /**
     * ...
     * @author Roy Lazarovich
     */
    public class CompTest extends UIComponent 
    {
        private var customfile  :String;

        public function CompTest()
        {

        }

        override protected function configUI():void
        {

        }

        override protected function draw():void
        {
            super.draw();
        }

        private function setCustomFile():void
        {
            if (ApplicationDomain.currentDomain.hasDefinition(customfile))
            {
                var c:Class = Class(ApplicationDomain.currentDomain.getDefinition(customfile));
                var mc:MovieClip = new c();
                addChild(mc);
            }
        }

        [Inspectable(name = "_Custom File", defaultValue = "")]
        public function set _customfile(value:String):void
        {
            customfile = value;
            setCustomFile();

            drawNow();
        }

    }

}

Спасибо!


  • Вы включили библиотеки в свой путь? 06.08.2012
  • Вы имеете в виду включение клиентской библиотеки в пути к компоненту? Я не уверен, что это полностью осуществимо - у нас есть пара сотен клиентских библиотек, которые используют наши компоненты. Или вы имеете в виду включение клиентского пути в client .fla ?? 07.08.2012

Ответы:


1

Я не совсем уверен, что вы уже пытались исправить в этой ситуации. Но, надеюсь, это поможет.

Щелкните правой кнопкой мыши MovieClip в вашей библиотеке, выберите Linkage и дайте ему имя класса, т.е. Моя вещь.

В вашем коде

newMyThing = new MyThing();
this.addChild(newMyThing);
trace("tada!");

Надеюсь, что это поможет или приблизит вас к решению.

10.08.2012
  • MyThing неизвестен во время публикации, он устанавливается как свойство компонента. В лучшем случае вы бы использовали getDefinitionByName, но это не поможет. При публикации .fla с помощью компонента он работает нормально. Проблема заключается в том, что Live Preview компонента не может создать экземпляр библиотеки .fla в Live Preview на сцене в среде IDE. 11.08.2012

  • 2

    У меня это работает в LivePreview, если я применяю его в configUI, а не рисую:

    public class EditableBitmap extends UIComponent 
    {
        protected var placeholder:String = "None";
        protected var bitmap:Bitmap;
        protected var scale:Number = 1;
    
        [Inspectable(name = "Placeholder", type = String, defaultValue="None")]
        public function set Placeholder($value:String):void 
        { 
            placeholder = $value;
            configUI();
        }
        public function get Placeholder():String { return placeholder; }
    
        public function EditableBitmap() 
        {
            //Console.Debug("NEW EditableBitmap");
            super();
        }
    
        override protected function configUI():void 
        {
            //Console.Debug("EditableBitmap configUI: " + width);
            if (!isNaN(width))
            {
                wDim = width;
                hDim = height;
                graphics.clear();
                graphics.beginFill(0x000000, 0.1);
                graphics.drawRect(0, 0, wDim, hDim);
            }
            if (placeholder != "None" && placeholder != "")
            {
                var asset:Class = getDefinitionByName(placeholder) as Class;
                var data:BitmapData = new asset() as BitmapData;
                bitmap = new Bitmap(data);
            }
            super.configUI();
        }
    
        override protected function draw():void 
        {
            if (bitmap)
            {
                addChild(bitmap);
                bitmap.x = off_x * scale;
                bitmap.y = off_y * scale;
                bitmap.scaleX = bitmap.scaleY = scale;
            } 
        }
    }
    

    ПРИМЕЧАНИЕ. Когда я работаю над FLA, где я редактирую компонент, растровое изображение отображается только из библиотеки несогласованно. Иногда это работает, иногда нет. Но когда я экспортирую SWC, а затем импортирую компонент в другой фильм, он работает каждый раз, как в LivePreview, так и во время выполнения.

    ОБНОВЛЕНИЕ Похоже, это не работает в CS6, если символ уже не встроен в компонент .SWC Я хотел посмотреть, смогу ли я обмануть его, вставив одно изображение в SWC и затем заменив его на другой файл с таким же именем в конечном файле. Это не сработало, но показало, как это можно сделать:

    введите описание изображения здесь

    Итак, это немного утомительно, но вы можете обойти это следующим образом:

    1) Создание фиктивного актива для каждого свойства в компоненте SWC. 2) Переопределение этого с помощью настраиваемого класса в файле, в котором вы развертываете компонент

    ... все это может быть больше проблем, чем оно того стоит, но должно обеспечить решение проблемы.

    26.08.2012
  • Как только я смогу это проверить, я сообщу о своих выводах. Спасибо, что разместили это. Возможно, мой тестовый код (он похож, но немного отличается от вашего) просто не работает, когда дело касается шрифтов. 06.09.2012
  • Сообщите мне, что вы найдете - более подробные сведения могут сузить круг вопросов до другого решения. LivePreview может быть немного нестабильным, но, по моему опыту, обычно только тогда, когда вы создаете компонент, а не после его публикации в swc. 06.09.2012
  • Я пытаюсь повторить то, что вы здесь сделали. Мои компоненты не наследуются от стандартного UIComponent или UIObject, так как они должны запускаться на консоли, а они для этого немного тяжелы. Конечно, мне нужны шрифты, а это не работает. Я пытаюсь отследить, что отличается / чего не хватает. В моих версиях UIComponent и UIObject нет функции configUI. Ваш основан на стандартном UIComponent? AS2 или AS3? 17.09.2012
  • Неважно, я смотрел не на те. Я смотрел на mx.core, а не на fl.core. Отчитаюсь. 17.09.2012
  • Я попытался продублировать ваш пример, используя тот же код, что и ваш. Я добавил png в свою целевую библиотеку и экспортировал его для AS с действительным идентификатором, я добавил компонент SWC, экземпляр компонента на сцене, и установил Placeholder для идентификатора png. Однако ничего не появляется. Я использую CS6, не знаю, имеет ли это значение. Надеюсь, это не так, потому что я не думаю, что у нас есть доступ к каким-либо другим версиям. 17.09.2012
  • В CS6 это работает, только если символ заполнителя встроен в SWC, то есть компонент, похоже, обращается к своей собственной библиотеке в LivePreview, а не к библиотеке родительского документа. У меня не установлены более старые версии для выполнения проверки, но я думаю, что это изменилось с CS5 (или, по крайней мере, CS4, когда я написал этот код компонента). 17.09.2012
  • Вот дерьмо. У нас нет реального пути назад, поскольку Adobe (и большинство других компаний) не продаст нам старую версию, а у нас уже есть все эти лицензии CS6. ›_‹ Думаю, мне нужно как-то попробовать RSL, загруженный как SWC, так и методом родительского документа. Это будет ад с тропинками. 17.09.2012
  • Странно то, что родительский домен компонента при предварительном просмотре в реальном времени не является доменом целевого документа, поэтому это не работает: var context:ApplicationDomain = ApplicationDomain.currentDomain; if (ApplicationDomain.currentDomain.parentDomain != null) context = ApplicationDomain.currentDomain.parentDomain; var asset:Class = context.getDefinition(placeholder) as Class; 17.09.2012
  • Вы также можете сделать это, встроив пользовательский swf-файл предварительного просмотра в реальном времени, который загружает растровое изображение из текущего домена. У меня нет времени это проверять. Вы, наверное, уже видели эти старые, но исчерпывающие документы по компонентной модели: adobe.com/devnet/flash/articles/creating_as3_components.html Удачи - и напишите здесь, если найдете решение для этой проблемы. 17.09.2012
  • Новые материалы

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

    Как построить любой стол
    Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..

    React Hooks: основы деструктуризации массива
    Kent C. Dodds написал классный пост о том, как грядущая функция React под названием Hooks работает на капоте. Предстоящий хук React useState основан на деструктурировании массива, давайте..

    Пакеты R, используемые в Tesla
    Добро пожаловать обратно! R — очень популярный язык программирования, используемый множеством компаний, включая Tesla! Итак, давайте взглянем на некоторые пакеты R, которые использует Tesla...

    Сокращение и слияние токенов для эффективных моделей VL: обзор
    Часто в задачах, связанных с компьютерным зрением и НЛП, вычислительно затратная и требующая большого объема памяти обработка становится препятствием для более быстрого логического вывода модели, а..