Открытие SWF-файла из другого SWF-файла с отличными от значений по умолчанию - PullRequest
5 голосов
/ 06 ноября 2008

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

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

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

Ответы [ 4 ]

0 голосов
/ 11 апреля 2009

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

0 голосов
/ 10 ноября 2008

Три простых способа подойти к этому:

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

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

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

openProject( _parent.projectType );

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

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

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

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

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

0 голосов
/ 11 апреля 2009

Ответ Феном довольно приличный, но есть и менее «хакерский» Кстати, если вы используете 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

Удачи

0 голосов
/ 06 ноября 2008

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

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

...