Обновление:
Опция 1. Flash IDE, один файл SWF
Чтобы иметь встроенный предварительный загрузчик при компиляции с Flash IDE, необходимоследует переместить ваш код Document Class
во 2-й кадр вашего FLA-файла (конечно, без конструктора пакета и класса) и удалить файл Document Class
.as из свойств проекта.В первом кадре вы должны поместить такой код:
stop(); // stops the timeline at preloader frame
this.loaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress);
function onProgress(e:ProgressEvent):void {
var percent:Number = Math.round(e.bytesLoaded / e.bytesTotal * 100);
//additional code to update preloader graphics
//..
if (percent == 100) onLoaded();
}
function onLoaded() {
this.loaderInfo.removeEventListener(ProgressEvent.PROGRESS, onProgress);
nextFrame();
}
После загрузки swf он переходит к следующему кадру, и должен выполняться исходный код инициализации приложения.Это хорошо работает, если вы организовали свой проект таким образом, что большинство ресурсов (изображений и т. Д.) Находятся в библиотеке Flash IDE и не загружены в первый кадр (вы можете проверить это в свойствах каждого элемента библиотеки).
Вариант 2. Flash IDE, два файла swf
Другой вариант, как уже рекомендовано другим комментатором, - сохранить swf приложения в том виде, как он есть, и создать еще один легкий swfчто бы загрузить первый.Код файла preloader.swf в первом кадре:
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress);
loader.load(new URLRequest("path/to/application.swf"));
function onProgress(e:ProgressEvent):void
{
var percent:Number = Math.round(e.bytesLoaded / e.bytesTotal * 100);
//additional code to update preloader graphics
//..
if (percent == 100) onLoaded();
}
function onLoaded():void
{
loader.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS, onProgress);
var application:DisplayObject = loader.content;
addChild(application);
}
Иногда при таком подходе возникают дополнительные проблемы, когда вы пытаетесь получить доступ к stage
с вашего Document Class constructor
и т. Д., Но в большинстве случаев это следует делатьзадание.
Вариант 3. Различная среда разработки, моя рекомендация: FlashDevelop
Если вы пытались скомпилировать мой первоначально опубликованный код с помощью FlashDevelop, FlashBuilder или любой другой IDE, он должен работать.
Исходное сообщение:
Вот основные настройки для встроенного preloader.Ваш Document Class
должен выглядеть следующим образом:
package {
import flash.display.Sprite;
[Frame(factoryClass='Preloader')] //class name of your preloader
public class Main extends Sprite {
public function Main() {
//init
}
}
}
Класс Preloader:
package {
import flash.display.DisplayObject;
import flash.display.MovieClip;
import flash.events.ProgressEvent;
import flash.utils.getDefinitionByName;
public class Preloader extends MovieClip {
public function Preloader()
{
//add preloader graphics
//check loading progress
this.loaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress);
}
private function onProgress(e:ProgressEvent):void
{
var percent:Number = Math.round(e.bytesLoaded / e.bytesTotal * 100);
if (percent == 100)
{
this.loaderInfo.removeEventListener(ProgressEvent.PROGRESS, onProgress);
onLoaded();
}
}
private function onLoaded():void
{
nextFrame(); //go to next frame
var App:Class = getDefinitionByName("Main") as Class; //class of your app
addChild(new App() as DisplayObject);
}
}
}