Прелоадер для SWF с встроенным байтовым массивом - PullRequest
0 голосов
/ 28 марта 2011

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

Ответы [ 2 ]

5 голосов
/ 28 марта 2011

Вы не можете встроить 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.

0 голосов
/ 13 июля 2015

Я тестировал метод Майка в CS4.Очевидно, фиктивный видеоклип, который ссылается на Main, не обязательно должен быть во 2-м кадре или где-нибудь на временной шкале.Пока фиктивный видеоклип настроен на экспорт во 2-м кадре, Main будет экспортироваться во 2-м кадре, поскольку на него ссылается код фиктивного клипа.

...