2009-11-03 2 views
0

Я пытаюсь настроить предварительный загрузчик, чтобы показать ход загрузки основного swf, в который встроены все его активы. Я нашел метод класса фабрики как described on bit-101, но никакой прогресс загрузки никогда не появляется. Swf загружается отлично, но bytesLoaded всегда равен bytesTotal, и поэтому предварительный загрузчик никогда не вызывается.Основные проблемы с предварительным загрузчиком SWF

Это класс фабрики я использую

package src 
{ 
import flash.display.DisplayObject; 
import flash.display.MovieClip; 
import flash.display.StageScaleMode; 
import flash.display.StageAlign; 
import flash.events.Event; 
import flash.utils.getDefinitionByName; 

/** 
    * ... 
    * @author DefaultUser (Tools -> Custom Arguments...) 
    */ 
public class Factory extends MovieClip 
{ 
    private var preloader:Preloader; 

    public function Factory() 
    { 
    stop(); 
    stage.scaleMode = StageScaleMode.NO_SCALE; 
    stage.align = StageAlign.TOP_LEFT; 
    addEventListener(Event.ENTER_FRAME, enterFrame); 
    } 

    public function enterFrame(e:Event):void 
    { 
    trace(root.loaderInfo.bytesLoaded, root.loaderInfo.bytesTotal); 

    if (framesLoaded == totalFrames) { 
    removeEventListener(Event.ENTER_FRAME, enterFrame); 
    nextFrame(); 
    init(); 
    } 
    else { 
    var percent:Number = root.loaderInfo.bytesLoaded/root.loaderInfo.bytesTotal; 
    trace(percent); 
    } 
    } 

    private function init():void 
    { 
    var mainClass:Class = Class(getDefinitionByName("Main")); 
    if (mainClass) { 
    var mainApp:Object = new mainClass(); 
    addChild(mainApp as DisplayObject); 
    mainApp.init(); 
    } 
    } 

} 

} 

трассировку, вызываемую на событиях enterFrame показывает, что bytesLoaded и BYTESTOTAL равны.

И это основной класс, который называется при загрузке swf.

package 
{ 
import flash.display.Sprite; 

[Frame(factoryClass="src.Factory")] 

public class Main extends Sprite 
{ 
    [Embed(source="images/FinalImg01.jpg")] 
    private var Image1:Class; 
    [Embed(source="images/FinalImg02.jpg")] 
    private var Image2:Class; 
    [Embed(source="images/FinalImg03.jpg")] 
    private var Image3:Class; 

    public function init():void 
    { 
    trace("loaded"); 
    } 
} 

} 

Это правильно сначала вызывает класс Factory, а затем инициализирует Main и вызывает init(). Но, как я уже упоминал выше, предварительная загрузка никогда не отображается, поскольку кажется, что она сразу загружает все.

Это проблема с тем, как я внедряю изображения или потому, что я тестирую локально?

Кто-нибудь еще сталкивается с этими проблемами?

Благодаря Rich

+0

Ya, кажется, что вы проверяете его на месте, поэтому он становится загружен в одном кадре. Попробуйте использовать некоторые другие тяжелые изображения (желательно не в вашей системе, может быть из Интернета). – bhups

ответ

0

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

Так что да, это потому, что вы тестируете локально. Загрузите SWF на свой веб-сервер, и вы увидите фактический уровень загрузки. Искусственное раздувание вашего файла в целях тестирования также не повредит, если у вас быстрое соединение.

0

Какую версию Flash вы используете? Я знаю, что предварительная загрузка работает по-разному в CS2, чем в CS3. У меня была аналогичная проблема, связанная с тем, что предварительный загрузчик работал в CS3 некоторое время назад.

http://www.senocular.com/flash/tutorials/faq/

Резюмируя с AS3 всю библиотеку в SWF-файл будет загружен, прежде чем любое другое действие. Чтобы исправить это, вы можете сообщить, что каждый элемент библиотеки не загружается в кадр 1, а затем настройте предварительный загрузчик в первом кадре.

Другим решением может быть отдельный SWF-файл для предварительной загрузки. Как только ваш загрузчик SWF загружается, он может использовать объект Loader для загрузки вашего более крупного swf-файла. Затем объект Loader предоставляет способы получения того, сколько данных было загружено через события.

Третьим решением является загрузка SWF-файла на сайт, например MochiAds, и предоставление им возможности предварительной загрузки. Если вы делаете игру, это было бы самым простым решением.

0

Я не использую Flash, поэтому неотображение по решению первого кадра, упомянутое выше, не является вариантом, потому что у меня нет прямого доступа к библиотеке или временной шкале. Метод фабрики - это способ достичь этого в чистом ActionScript, необходимо, если вы работаете за пределами Flash IDE.

После нескольких исследований я обнаружил, что проблема возникла в результате реализации с помощью FlashDevelop. На самом деле есть встроенный шаблон в последнем выпуске FlashDevelop, который достигает такого же результата, без лишнего импорта большого количества компонентов Flex.

проверить это сообщение, если вам нужно больше информации

http://www.flashdevelop.org/community/viewtopic.php?f=13&t=3365

Смежные вопросы