Встроенный прелоадер (AS3)

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

Прочитав данный материал, освоив его, я приступил к делу.
К моему большому удивлению, проделав все описанное в статье, для своего проекта, я обнаружил, что результат неудовлетворительный — полоса загрузки появлялась буквально под конец, и стоит учесть, что у меня использовалась конструкция [Embed] (благо CS4 позволяет это), вероятно я что-то сделал неверно, но факт остался фактом – реорганизация проекта получилась крайне замороченной и неудобной.

Я некоторое время бился с этой проблемой и решил поэкспериментировать. На деле же всё оказалось очень просто.

Начну с того что класс который используется у человека с ником etc (ссылку на его блог я привел выше) отлично подойдет и для нас. Прописываем его в качестве класса документа.

И далее производим следующие махинации: в Publish Settings (вкладка Flash) мы жмем Settings и прописываем экспорт классов на второй кадр. При этом на таймлайне у нас должно быть три пустых кадра.

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

Теперь самое интересное – я думаю вы наделали уже своих спрайтов, мувиклипов и т.д. и присвоили им при необходимости классы? Если да то поздравляю, вам нужно чтобы в свойствах данных мувиклипов стояли галочки – экспортировать во второй кадр. А теперь магия чисел.

Создаем мувиклип с названием MainClass, где в качестве Base Class прописываем наш базовый класс (то есть класс основного действия вашей флэшки), и… Внимание! И тоже ставим галочку экспортировать во второй кадр.

Никаких дополнительных мувиклипов создавать не нужно.

А давайте посмотрим как же будет выглядеть у нас класс прелоадера?
А вот и он:

package com.preloader {
   import flash.display.MovieClip;
   import flash.display.Sprite;
   import flash.events.Event;
   import flash.events.ProgressEvent;
   import flash.utils.getDefinitionByName;
 
   /**
    * @author Ilya Malanin (designer@pastila.org)
    */
   public class Preloader extends MovieClip {
 
      private var progressBar : Sprite;
      private static const ENTRY_FRAME : int = 3;
 
      public function Preloader() : void {
          super();
          stop();
          progressBar = new Sprite();
          progressBar.y = stage.stageHeight / 2 - 2;
          with (progressBar.graphics) {
              beginFill(0x0, 1);
              drawRect(0, 0, stage.stageWidth, 4);
              endFill();
          }
 
          addChild(progressBar);
 
          loaderInfo.addEventListener(ProgressEvent.PROGRESS, progressHandler);
          loaderInfo.addEventListener(Event.COMPLETE, completeHandler);
      }
 
      private function completeHandler(event : Event) : void {
          play();
          addEventListener(Event.ENTER_FRAME, enterFrameHandler);
      }
 
      private function enterFrameHandler(event : Event) : void {
          if (currentFrame >= ENTRY_FRAME) {
              removeEventListener(Event.ENTER_FRAME, enterFrameHandler);
              stop();
              var main : Class = loaderInfo.applicationDomain.getDefinition("MainClass") as Class;
              addChild(new main());
          }
      }
 
      private function progressHandler(event : ProgressEvent) : void {
          progressBar.scaleX = 1 / event.bytesTotal * event.bytesLoaded;
      }
   }
}

Поздравляю, вы стали обладателем внутреннего прелоадера, который не будет взрывать вам мозг.

p.s.
Не забудьте пожалуйста, что в главном классе вашей флэшки в конструкторе необходимо использовать такую конструкцию:

  public function SupaClass() {
      super();
      addEventListener(Event.ADDED_TO_STAGE, initSupaClass);
  }
 
  private function initSupaClass(event : Event) : void {
      ...
  }

Исходники вы можете взять тут (чтобы скомпилировать и проверить работоспособность, после распаковки архива положите в папочку images любую картинку (желательно большого размера) и назовите файл logo.jpg, теперь можно компилировать).

Тэги: , , , ,

Понедельник, Октябрь 5, 2009, 21:13
Подписаться на комментарии.
Вы можете оставить комментарий, или trackback со своего сайта.



9 комментариев

  1. Спасибо за статью. Если не трудно, выложи пожалуйста архивчик с исходниками…

  2. Добавил.

  3. -Теперь самое интересное – я думаю вы наделали уже своих спрайтов, мувиклипов и т.д. и присвоили им при необходимости классы? Если да то поздравляю, вам нужно чтобы в свойствах данных мувиклипов стояли галочки – экспортировать во второй кадр. А теперь магия чисел.
    А как это сделать?? а то у меня только Export in First Frame есть?

  4. Sobcha:

    А как это сделать?? а то у меня только Export in First Frame есть?

    Из статьи:

    И далее производим следующие махинации: в Publish Settings (вкладка Flash) мы жмем Settings и прописываем экспорт классов на второй кадр.

    File -> Publish Settings -> Вкладка «Flash» -> Settings… -> Export classes in frame
    И вместо единцы пишите 2

  5. Отличный сайт и материалы очень познавательные

  6. алексей

    не могу скачать исходник
    перезалейте пожалуйста .

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

  8. Не работает ссылка на пример прелоадера. Не совсем понятны некоторые места в описании создания. Могу я попросить сбросить пример на почту? Или перезалейте его пожалуйста. Очень нужно разобраться с этим вопросом.
    Спасибо.

  9. Илья Маланьин

    Исправил ссылку на исходник.

Оставить комментарий