Вы не можете встроить ByteArray
в ваш основной класс документа, потому что классы, на которые ссылаются из класса документа, будут автоматически включены в кадр 1.
Лучший способ предварительно загрузить ресурсы - это иметь отдельный класс Preloader и основной класс. Вы хотите, чтобы ваш класс Preloader экспортировался в кадре 1, а ваш основной класс и ресурсы - в кадре 2.
К сожалению, это сложнее, чем должно быть, но вот как вы можете это сделать: Установите класс документа на Preloader
. Этот класс содержит ваш loaderInfo
код. Однако, когда вы закончите загрузку, не создайте экземпляр Main напрямую , т.е. не выполните var main:Main = new Main()
. Это автоматически заставит Main скомпилироваться в кадр 1 независимо от того, что вы делаете. Вместо этого создайте его косвенно, например:
nextFrame(); // you sometimes need to do this for the player to register classes exported on frame 2
var mainClass:Class = flash.utils.getDefinitionByName("Main") as Class;
var main:Sprite = new mainClass();
addChild(main);
Это остановит компилятор от автоматического перетаскивания Main в кадр 1.
Далее, если вы используете IDE Flash CS3 +, перейдите в File-> Publish Settings-> Flash-> ActionScript 3.0 и измените настройку «Экспорт классов в кадре» на кадр 2. Затем на кадре 2 вашего фильм, поместите пустой мувиклип. Внутри этого мувиклипа поместите ссылку на свой основной класс, добавив следующий код: var dummy:Main;
. Причина, по которой вы должны это сделать, заключается в том, что компилятор все еще будет знать, что вы используете Main, поэтому он фактически скомпилирует его в фильм, иначе он не скомпилирует его вообще. Вы также не хотите помещать это на основную временную шкалу, потому что любые ссылки на код на основной временной шкале автоматически переносятся на первый кадр.
В IDE полезный трюк для проверки того, что вещи экспортированы в нужное место, - это проверить «Создать отчет о размере» в «Свойства публикации» -> «Flash». Вы можете просмотреть отчет и легко заметить, был ли мусор экспортирован в кадр 1.
Если вы используете Flash Builder, FlashDevelop или FDT, процесс в основном такой же: создайте отдельные классы Preloader и Main и создайте экземпляр Main косвенно из Preloader. Но чтобы дать сигнал компилятору компилировать Main на фрейме после Preloader, поместите этот метатег выше public class Main
в Main.as
:
[Frame(factoryClass="Preloader")]
FlashDevelop также может анализировать SWF-файлы, щелкнув по значку «+» на вкладке «Проект». Он покажет вам, какие активы были экспортированы в какие кадры. В идеале вам нужен только минимум Preloader в кадре 1.