Открытие SWF-файла из другого SWF-файла со значениями, отличными от значений по умолчанию

Надеюсь, это не будет воспринято как повторение одного и того же вопроса дважды ...

Итак, я работаю над веб-сайтом Flash (в AS2), который имеет внешний индекс swf, который загружает вспомогательные файлы swf с использованием loadMovie("subfoo1.swf", placeToShowSwf). Они, в свою очередь, загружают XML-файл, который сообщает ему, какой контент загружать. Все работает отлично, но мы хотели бы добавить в индексный swf кнопку, которая открывает вспомогательный SWF-файл с одним или двумя разными значениями для одной или двух переменных.

К сожалению, просто добавив кнопку с надписью

loadMovie("foo1.swf", placeToShowSwf);
placeToShowSwf.openProject(x);

не работает, я полагаю, потому что openProject(x) вызывается для файла, который не полностью загружен. Я знаю, что с кодом проблем нет, потому что я сделал в другом месте кнопку, которая вызывает только placeToShowSwf.openProject(x), и никаких проблем нет.

Я вижу два решения, и я не знаю, как это сделать.

  1. Измените желаемое значение при создании SWF-файла, как конструктор для класса. Но есть ли какая-то функция-конструктор для файлов SWF? Было бы здорово просто сказать loadMovie(new foo1.swf(x), placeToShowSwf) или что-то подобное.
  2. Подождите, пока загрузится swf (и, возможно, xml), а затем вызовите placeToShowSwf.openProject(x).

У кого-нибудь есть указания по поводу любого из этих решений или, возможно, какого-либо другого способа, который мой мозг, похожий на горошину, не мог понять?


person mgbennet    schedule 06.11.2008    source источник


Ответы (4)


Номер 2 - это то, что вам следует делать. К сожалению, вы все еще застряли в области ActionScript 1, а ActionScript 3 уже пару лет отсутствует. Так что я не знаю точного синтаксиса (сам начал с flash на ActionScript 2), но # 2 (ожидание завершения загрузки SWF и указание ему, что делать) - это то, что я бы сделал.

Если вы не против немного изучить AS2 (как правило, вы можете смешивать AS1 и AS2 без особых проблем), то вам следует взглянуть на MovieClipLoader. Он предоставляет обратные вызовы, чтобы сообщить вам, когда завершилась загрузка вспомогательного SWF.

person davr    schedule 06.11.2008

Три простых способа приблизиться к этому:

(1) - изменить направление команды. То есть в родительском SWF у вас есть:

projectType = "x";
loadMovie("foo1.swf", placeToShowSwf);

И дочерний (загруженный) SWF имеет следующее:

openProject( _parent.projectType );

Вы уловили идею. Это не сработает, если дочерний SWF загружен с другого сервера, если вы не решите проблемы междоменного сценария.

(2) - дождаться загрузки МК. К сожалению, в AS2 нет встроенных событий загрузки, которые вы могли бы использовать, поэтому распространенным методом является использование onEnterFrame следующим образом:

someMovieClip.onEnterFrame = function() {
    if ( path_to.placeToShowSwf.openProject ) {
        path_to.placeToShowSwf.openProject(x);
        this.onEnterFrame = null;
    }
}

Это будет, если вы хотите вызвать метод, как только он станет доступен; если вы хотите дождаться полной загрузки дочернего SWF, вы должны проверить методы getBytesLoaded() и getBytesTotal() дочернего SWF.

(3) Используйте такой компонент, как MovieClipLoader, для загрузки - просто следуйте документы. Внешне это похоже на (2), но детали спрятаны внутри класса MovieClipLoader.

person fenomas    schedule 10.11.2008

Ответ fenomas довольно приличный, но есть и менее «хакерский» способ, если вы используете AS2, загружайте свои swf-файлы с помощью класса MovieClipLoader. В нем есть события, которые вы можете прослушивать, и вас заинтересует событие onLoadInit. Хотя люди могут интуитивно догадаться, что он запускается при инициализации процесса загрузки и что следует использовать onLoadComplete, это не так.

onLoadComplete запускается, когда загрузка всех байтов завершена. onLoadInit запускается, когда загрузка всех байтов завершена и классы в загруженном swf инициализируются (так что вы можете получить доступ к методам и свойствам загруженного swf)

Взгляните на образец кода в MovieClipLoader> onLoadInit в документации as2.0

http://livedocs.adobe.com/flash/8/main/wwhelp/wwhimpl/js/html/wwhelp.htm?href=Part4_ASLR2.html

Удачи

person George Profenza    schedule 11.04.2009

Вы сделали правильный выбор, за исключением того, что вам нужно дождаться обратного вызова onLoadInit, прежде чем пытаться получить доступ к суб-MovieClip.

person Theo.T    schedule 11.04.2009