загружая один и тот же SWF снова и снова. Есть лучший способ сделать это? - PullRequest
1 голос
/ 24 декабря 2009

У меня есть небольшая проблема ...

У нас есть приложение, которое должно загружать различное количество строк графики в зависимости от ввода пользователя. В настоящее время SWF каждой строки загружается повторно с использованием Flash.Display.Loader. SWF довольно большой (17 КБ), и загрузка примерно 10 из них занимает некоторое время. Есть ли способ загрузить этот файл только один раз и использовать его несколько раз?

Я чрезвычайно новичок во Flash / actionscript. Если потребуется какая-либо другая информация, просто дайте мне знать, и я постараюсь предоставить ее.

спасибо.

Ответы [ 2 ]

2 голосов
/ 24 декабря 2009

Вы можете использовать два подхода в дополнение к тому, что говорит фаломир:

1.- Если ваш SWF-файл является просто изображением (и вы можете использовать его в качестве растрового изображения), вы можете создать BitmapData для загруженного SWF-файла, а затем использовать его столько раз, сколько вам нужно:

var bmp:BitmapData = new BitmapData(loader.width, loader.height, true, 0);
bmp.draw(loader);
var row1:Bitmap=new Bitmap(bmp);
var row2:Bitmap=new Bitmap(bmp);

2.- Если ваш swf анимирован и / или интерактивен (а не только растровое изображение), вы можете загрузить его как двоичный URLLoader, а затем использовать Loader.loadBytes для его репликации в вашем приложении:

var urlloader:URLLoader = new URLLoader();
urlloader.dataFormat = URLLoaderDataFormat.BINARY;
urlloader.addEventListener(Event.COMPLETE, swfloaded);
urlloader.load("miswf.swf");
function swfloaded(e:Event):void {
    var bytes = urlloader.data;
    var row1:Loader = new Loader();
    row1.loadBytes(bytes);
    var row2:Loader = new Loader();
    row2.loadBytes(bytes);
}

Обратите внимание, что loadBytes является асинхронным, поэтому вам нужно подождать, пока событие loaderInfo COMPLETE сможет манипулировать его содержимым ... оно похоже на то, что вы уже делаете (с помощью Loader), но для этого потребуется только один запрос к серверу.

2 голосов
/ 24 декабря 2009

Привет, да, вы можете загрузить его один раз; вы можете хранить все свои активы в одном SWF-файле, и после загрузки используйте их по мере необходимости.

Например, допустим, вы хотите использовать две графические строки (фрагменты ролика), rowA и rowB, в SWF, который вы должны загрузить; этот SWF будет действовать как ваша библиотека ресурсов. Что вам нужно сделать, это создать клипы rowA и rowB в вашей библиотеке и настроить их на экспорт для использования в ActionScript. (В библиотеке FLA щелкните их правой кнопкой мыши, выберите «Свойства» и выберите «Экспорт для Actionscript». В поле ввода Class введите «rowA» для этого примера и «rowB» соответственно). Теперь, когда у вас есть ресурсы в вашей библиотеке (они не должны быть на сцене), опубликуйте файл swf.

Теперь давайте перейдем к SWF, где вы на самом деле будете использовать эту «библиотеку». Здесь вам просто нужно загрузить свою SWF-библиотеку (ту, которая содержит графические ресурсы), и все готово. Пример кода,

    // Our URL Request
    var req:URLRequest = new URLRequest();
    req.url = "assets.swf";

    // Let create our loader
    var loader:Loader = new Loader();
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLibLoaded);

    var context:LoaderContext = new LoaderContext();
    context.applicationDomain=ApplicationDomain.currentDomain;

    loader.load(req,context);


    function onLibLoaded(e:Event):void
    {
     createRows();
    }

    function createRows()
    {
     var myRowAClass:Class = loader.contentLoaderInfo.applicationDomain.getDefinition("rowA")  as  Class;
     var rowA:MovieClip = new myRowAClass() as MovieClip;
     this.addChild(rowA);

     var myRowBClass:Class = loader.contentLoaderInfo.applicationDomain.getDefinition("rowB")  as  Class;
     var rowB:MovieClip = new myRowBClass() as MovieClip;
     rowB.y = rowA.height;
     this.addChild(rowB);
    }

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...