Как да заредите и разтоварите файл SWF едновременно

Аз съм начинаещ в as3, имам един бутон като име tombol, който функционира за Зареждане на външен swf и отиване на конкретен кадър чрез щракване върху бутони, това работи добре.

import flash.events.MouseEvent;

tombol.addEventListener(MouseEvent.CLICK, tekan2);

function tekan2 (e:MouseEvent):void {

function loadSWF(swfURL){
    var myLoader:Loader = new Loader();
    var mySWF:URLRequest = new URLRequest(swfURL);
    myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler);
    myLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgressHandler);
    myLoader.load(mySWF);

}

function onCompleteHandler(loadEvent:Event){    
    addChild(loadEvent.currentTarget.content);
    loadEvent.currentTarget.content.gotoAndStop(swfFrame);
}

function onProgressHandler(myProgress:ProgressEvent){
    var percent:Number = Math.round(myProgress.bytesLoaded/myProgress.bytesTotal*100);
    trace(percent+"% loaded");
}

var swfFrame:Number=2;
loadSWF("2.swf");

}

Този файл се запазва като 1.swf и зареждащият се файл 2.swf отива на кадър 2, но файл 1.swf все още се зарежда, така че този скрипт зарежда 2 файла swfs (файл 2 .swf рамка 2 се зарежда с файл 1.swf се появява). Как да файл 1.swf може да се разтовари по същото време, когато щракна върху бутона, така че само рамката на файл 2.swf се появява на сцената.


person wikan    schedule 26.05.2015    source източник


Отговори (1)


Като цяло можете да отмените операцията по зареждане на Loader, като използвате командата close(). Преди да отмените, трябва да се уверите, че Loader действително зарежда данни, в противен случай ще бъде изведена грешка:

if (myLoader.contentLoaderInfo.bytesLoaded > 0 &&
    myLoader.contentLoaderInfo.bytesLoaded < myLoader.contentLoaderInfo.bytesTotal)
{
    myLoader.cancel();
}

РЕДАКТИРАНЕ: Можете да получите достъп до програмата за зареждане на 1.swf чрез root.loaderInfo. Във вашата функция loadSWF можете да добавите следния код, за да предотвратите по-нататъшното зареждане на 1.swf:

if (root.loaderInfo.loader && root.loaderInfo.bytesLoaded > 0 &&
    root.loaderInfo.bytesLoaded < root.loaderInfo.bytesTotal)
{
    root.loaderInfo.loader.cancel();
}

Въпреки това не съм напълно сигурен дали наистина можете да отмените процеса на зареждане на 1.swf (никога не съм опитвал нещо подобно). От гледна точка на архитектурата би имало смисъл да имате трети SWF файл, който е вашият основен SWF и зарежда другите ви SWF файлове (1.swf и 2.swf, ...). Във вашия основен SWF ще трябва да дефинирате Loader като променлива на класа, а не като локална променлива, както правите в момента. Всеки път, когато зареждате SWF, проверете дали не е в ход друга операция по зареждане и я отменете в такъв случай. В идеалния случай бихте поставили бутона tombol в главния SWF файл.

person Jan    schedule 26.05.2015
comment
Благодаря за отговора, Ян, но къде трябва да поставя командата close() в моя скрипт, можеш ли да ми покажеш? и какво имате предвид: › Преди да отмените, трябва да се уверите, че Loader действително зарежда › данни, в противен случай ще бъде изведена грешка: И къде трябва да поставя вашия скрипт върху моя скрипт? Благодаря за обяснението преди. - person wikan; 28.05.2015
comment
Преразглеждане на въпроса ви за произхода. Предишният ми отговор може да не е достатъчен, за да помогне за разрешаването на проблема ви. Аз обаче ще го модифицирам. Моля, проверете актуализацията. - person Jan; 28.05.2015
comment
Окей, благодаря... добре е така, трябва да има трети swf. Но всъщност искам да направя бутони за навигация назад и напред с различен swf файл. Така че създавам флаш приложения, но разделени в много fla файлове. Има ли някакви предложения как да комбинирате тези файлове, като използвате навигационния клавиш и следващия връщане към дома. Да предположим, че правя пет fla файла (1.fla, 2.fla, ... 5.fla), как да ги комбинирам с бутона за връщане назад следващия дом. - person wikan; 29.05.2015