2010-01-26 2 views
4

Я вижу странное поведение по отношению к взаимодействию между моим предварительным загрузчиком и основными классами приложений (все AS3/Flash CS4). Грубо говоря, вот поток событий:Безопасность Flash/AS3 - передача ссылки movieclip для дочерней swf?

  1. preloader.swf нагрузки две вещи: main.swf, который является основным приложением, и средства для пользовательского объекта, состоящего из текста и изображений, которые собраны в объект с помощью предварительного загрузчика из разных URL-адресов.

  2. Когда груз заканчивается, Preloader добавляет main.swf в качестве ребенка. Затем предварительный загрузчик вызывает
    init(myCustomObject)
    на main.swf, где myCustomObject является ссылкой на объект, собранный предварительным загрузчиком на этапе 1, а
    public function init(customObject:CustomObject):void)
    - это подпись метода в Main.as. (Preload.as передает основному объекту типа *, чтобы иметь возможность ссылаться на произвольные функции, не опасаясь ошибок времени компиляции.)

  3. Main.as фактически является контейнером для самого приложения, поэтому он создает экземпляры a
    new Application(customObject);
    , передавая ссылку на customObject, собранную предварительным загрузчиком, и добавляет это как дочерний элемент.

Я установил thunderbolt, поэтому я могу регистрировать сообщения по мере запуска приложения, и вот что я определил. Создание объекта приложения на шаге 3 - это то, что вызывает проблемы; по какой-то причине заявление myMainApplication = new Application(customobj); в Main.as бросает прекрасную ошибку #1009, которая обычно указывает ссылку на нулевой указатель или что-то подобное.

Странная вещь, что я добавил некоторые регистрации в Application.as, и, похоже, он получает ссылку на customObject без проблем; вызов toString() на customObject в конструкторе Application возвращает точно ожидаемые данные.

Другими словами, заявление myMainApplication = new Application(customobj); в Main.as, похоже, преуспевает и не срабатывает одновременно. Что дает?

ответ

0

Причина, по которой myMainApplication = new Application(customobj);, казалось, преуспела и не срабатывала в то же время, заключается в том, что я не совсем понял, как работают блоки try/catch в AS3. Существовало исключение нулевого указателя, которое было выбрано в подпрограмме к конструктору Application, возникающему после кода, в котором Application проверяет, получает ли он ссылку на customobj. Эта ошибка была задержана блоком try/catch, окружающим экземпляр Application в Main, так как это был ближайший охватывающий код проверки ошибок.

Надеюсь, моя ошибка спасет кого-то другого для создания подобного!

0

Убедитесь, что ваши глобальные параметры безопасности в Flash Player разрешают локальный доступ к каталогу.

Попробуйте это. Перейдите в «Настройки публикации» - «Локальная безопасность воспроизведения» - выберите «Только доступ к сети». Flash CS4 по умолчанию - «Доступ только к локальным файлам», который может не понравиться. Надеюсь, это полезно.

См: http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/flash/system/Security.html

0

Я думаю, что мы должны видеть больше кода, но для начала: «customobj» ... где вы определяя, что? Вы все равно ссылаетесь на «customObject». Это опечатка? Если этот точный статус выдает ошибку, тогда «customobj», скорее всего, будет null.

1

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

WeLoveAppDomain должен быть полезен, если это действительно проблема. Можете ли вы собрать наименьший возможный пример, чтобы продемонстрировать эту ошибку для нас, чтобы деконструкция?

+0

+1: У меня такое ощущение, что AppDomain - это то, что нужно. –

0

Вы используете FlexBuilder/FlashDevelop или флэш-IDE? Также, как вы настраиваете свой предварительный загрузчик?

Если вы создаете приложение с помощью FlexBuilder/FlashDevelop, задали ли вы начало кадра в настройках вашего компилятора?

Смежные вопросы