Внутренние проблемы с предварительным загрузчиком и этапами AS3

Мне нужно создать один SWF-файл без внешних файлов, поэтому я пытаюсь добавить внутренний предварительный загрузчик в свой Flash-проект, в котором есть [встроенные] ресурсы. Я знаю, что [embed] вызывает проблемы с предварительными загрузчиками, потому что он помещает ресурсы в кадр 1. Я пробовал решения, рекомендованные в этих сообщениях, где вы устанавливаете класс документа на свой класс предварительного загрузчика:

Предварительный загрузчик для SWF со встроенным массивом байтов

Как создать предварительный загрузчик в AS3

Я могу заставить его работать, но ТОЛЬКО если я закомментирую какие-либо строки кода, относящиеся к этапу, в противном случае я получаю «Ошибка № 1009: Невозможно получить доступ к свойству или методу ссылки на нулевой объект». Эти строки очень важны, так что кто-нибудь знает, как исправить эти ошибки с помощью сцены?


person BladePoint    schedule 08.02.2013    source источник
comment
Пожалуйста, опубликуйте оскорбительный код.   -  person khailcs    schedule 08.02.2013
comment
Все, что связано с этапом, например: stage.addEventListener (MouseEvent.MOUSE_UP, skipItMouse);   -  person BladePoint    schedule 09.02.2013


Ответы (1)


Вы еще не опубликовали свой код или свой fla, поэтому все, что я могу сделать, это поделиться тем, что мне подходит.

Во-первых, я бы не стал использовать Embed. Вместо этого используйте swc. Я обнаружил, что Embed может быть ненадежным с точки зрения фактического размещения всего актива (по крайней мере, при публикации с помощью Flash Builder + Flash Pro, что является моим рабочим процессом).

После того, как у вас есть активы в swc, попробуйте выполнить следующие шаги:

  1. Установите для экспорта кадр 10 (или любой другой кадр, кроме 1 - мне нравится кадр 10, потому что тогда вы можете прочитать этикетку с надписью «Preloader»)
  2. Поместите ваш фактический контент в кадр 11. Вы можете структурировать его разными способами. Поскольку я программирую для интерфейсов, я даю всему, что находится в кадре 11, имя экземпляра, а затем использую сеттер, чтобы определить, что мое «первое» было размещено на сцене. Я могу избежать этого, потому что мой основной класс документа просто знает определение интерфейса, а не полную реализацию класса, поэтому класс не нужно загружать для работы основного класса документа. Вероятно, вы на самом деле не используете временную шкалу и, вероятно, не программировали интерфейсы, поэтому вы, вероятно, просто установите базовый класс символа, который находится в кадре 11, на основную логику того, что вы пытаетесь сделать.
  3. Поместите вашу графику прелоадера в кадр 1. Я не уверен, почему ваши сценические ссылки так важны. Лично я никакой логики в прелоадере не использую. Вместо этого я использую счетчик, который охватывает кадры 1–10 (плюс слово «Загрузка ...». Вращатель просто вращается, пока загружаются классы. Встраиваемый кадр действует как временная «остановка», которая просто удерживает временную шкалу до тех пор, пока классы были загружены. Как только классы будут загружены, шкала времени будет действовать так, как вы вызвали play() на нем. Так что это действительно может быть так просто. Если вам нужно что-то посложнее, дайте одному из ваших графических элементов предварительного загрузки имя экземпляра и настройте для него пару геттер / сеттер, а затем используйте сеттер для запуска вашей логики, которая обращается к этапу. На этом этапе вы почти гарантированно получите действительный этап.

Предупреждение: если вы использовали таймлайм, вы получите странные результаты, если попытаетесь перейти к кадру, который еще не загружен, поэтому обязательно проверьте, загружен ли данный кадр, если он находится рядом с конец вашей основной временной шкалы, и ваша основная временная шкала заполнена активами перед вызовом goToAndPlay() или goToAndStop().

Некоторые ссылки, которые могут помочь вам в дальнейшем:

person Amy Blankenship    schedule 08.02.2013
comment
Спасибо за совет! Я попробую. - person BladePoint; 09.02.2013