Как использовать новый мувиклип в качестве класса или скопировать его без ссылки на его класс? - PullRequest
0 голосов
/ 21 июля 2011

Я делаю фоновый цикл с 2 одинаковыми BG movieClip (B1 и B2).Эти 2 являются «новыми» для одного и того же класса.

var B1:MovieClip = new BG();
var B2:MovieClip = new BG();

Но поскольку эта картинка класса BG загружается из Интернета, а картина довольно большая.Когда я обратился к его загрузке с помощью progressEvent.Картинка действительно загружается 2 раза.В любом случае я создаю B2 на основе B1 без использования новой BG () снова?Так как это определенно делает новый BG с кодом загрузчика внутри.Спасибо за вашу помощь ^^

Для кода класса BG:

var URLvar:URLRequest;
var BGLoader : Loader = new Loader( );
URLvar = new URLRequest( "somewherelink.jpg" );
BGLoader.load(URLvar);
this.addChild(BGLoader);

Есть ли способ установить, если B1 полностью загружен, я копирую его в B2?или каким-либо другим способом достижения той же цели?

import flash.display.*;
import flash.utils.*;
var obj:Class = getDefinitionByName(“bluebox”) as Class;
addChild(MovieClip(new obj()));

Я нашел это в динамически создаваемом классе, но я не знаю, как использовать T_T, вы можете мне это объяснить и могу ли я использовать его в этомситуация?Спасибо за ваше время ^^

Ответы [ 2 ]

2 голосов
/ 21 июля 2011

Для этого ответа я собираюсь предположить, что вы всегда будете хотеть иметь одно и то же изображение дважды, а не два разных.Проблема в том, что ваш класс BG полностью выполняет загрузку и присоединение.Мой предпочтительный подход состоит в том, чтобы загрузить один раз, а затем создать для экземпляров загруженного содержимого.

//first lets create a single loader
var bgLoader:Loader = new Loader();
bgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,completeHandler);
//and load the content
var urlVar:URLRequest = new URLRequest("somewherelink.jpg");
bgLoader.load(urlVar);
//notice that we don't add the loader to the stage

function completeHandler(evt:Event):void
{
    //remove the loader listener for memory conservation purposes
    evt.target.removeEventListener(Event.COMPLETE,completeHandler);
    //reference the content
    var content:DisplayObject = evt.target.content;
    //so now create a bitmapData object
    var bmd:BitmapData = new BitmapData(content.width,content.height,false); // use (content.width,content.height,true,0) if loading image with transparancy
    //and draw the loaded image into to bitmap data
    bmd.draw(content);
    //now you can create as many Bitmap objects from this data as you like
    var bg1:Bitmap = new Bitmap(bmd);
    var bg2:Bitmap = new Bitmap(bmd);
    //offset bg2 so both are visible
    bg2.x = 100;
    addChild(bg1);
    addChild(bg2);
}

Для вашего второго вопроса ... getDefinitionByName возвращает вам объект, который представляет именованный класс, а непример этого.Таким образом, в вашем примере он получает определение для класса «bluebox», который находится в корне исходного кода приложения (а не в папке).

Когда у вас есть этот объект класса, вы можете создавать его экземпляры с ключевым словом new.Насколько мне известно, большим недостатком этого является то, что вы не импортируете класс, следовательно, в вашем примере obj приведен как мувиклип.Это делает функции редакторов кода, такие как завершение кода и подсвечивание ошибок, некорректно работающими, потому что свойства и методы bluebox не предоставляются.

Обычно я использую это только для создания объектов, чьи классы будут определены в другом месте.Например, в файле XML, который загружается во время выполнения.

0 голосов
/ 21 июля 2011

Если URLRequest URL одинаков для обоих браузеров, во второй раз браузер будет отображать кэшированную версию.Запрос делается в браузер дважды, но только один раз на сервер.Вы можете использовать http sniffer, например httpfox, charles или fiddler, для проверки запросов.

...