Как создать глобальное событие OnClick во Flash AS2?

У меня есть приложение Flash AS2, состоящее из множества файлов SWF. Мне нужно создать событие OnClick в SWF-файле контейнера, которое будет работать для каждого вызываемого SWF-файла. Я стараюсь избегать добавления кода в каждый файл SWF (более 100).

В настоящее время я могу получить доступ к щелчку в контейнере для первого SWF, но когда вызывается второй SWF, кажется, что контейнер перезаписывается.

this._lockroot = true;

this.onMouseUp = function(){
    //if not on login
    getURL("javascript:clickTest();");
};

//load swf
loadMovie("test.swf","_level2");

Как сделать так, чтобы щелчок в контейнере срабатывал, даже если SWF внутри контейнера вызывает другой SWF?

Это казалось таким простым, но было кошмаром. Это вообще возможно?


person Todd Moses    schedule 25.02.2010    source источник
comment
Это код в загружаемых клипах или код в контейнере? Просто для пояснения, у вас есть один контейнер, который загружает любой из ›100 других клипов, которые, в свою очередь, загружают другие клипы? Или ›100 клипов загружают друг друга последовательно (после того, как первый был загружен вашим контейнером)?   -  person datageist    schedule 25.02.2010
comment
В оригинале контейнера не было. Я просто добавил его, чтобы сохранить приведенный выше код. SWF-файлы, содержащиеся в контейнере, имеют ссылки, по которым загружаются другие SWF-файлы в зависимости от того, что делает пользователь.   -  person Todd Moses    schedule 25.02.2010
comment
Я думаю, что как только содержащийся SWF вызывает другой SWF, контейнер уходит. Я не знаю, как сохранить контейнер при обращении к другим SWF-файлам.   -  person Todd Moses    schedule 25.02.2010


Ответы (2)


Изменить (re: комментарии, махинации onClipEvent не сработали)

Как насчет того, чтобы попробовать что-то вроде этого:

this.createEmptyMovieClip("holder", this.getNextHighestDepth());
loadMovie("test.swf","holder");

вместо:

//load swf
loadMovie("test.swf","_level2");

Или, если _level2 необходим для структуры приложения, что-то вроде этого:

_level2.createEmptyMovieClip("holder", _level2.getNextHighestDepth());
_level2.holder.loadMovie("test.swf");

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

person datageist    schedule 25.02.2010
comment
Проблема не в том, что код не работает с событием щелчка. Проблема заключается в том, что событие щелчка сохраняется после того, как новый swf вызывается встроенным swf. - person Todd Moses; 25.02.2010
comment
какой код загруженные SWF-файлы используют для загрузки других SWF-файлов? - person datageist; 25.02.2010
comment
они тоже используют loadMovie. - person Todd Moses; 26.02.2010

Вы могли бы назвать movieClip, например. clickHaver на верхнем слое (любой ценой) - если второй фильм (и каждый следующий) загружает в себя следующий фильм:

- container
  - loads movie.swf
    - loads movie2.swf

тогда ваша единственная забота - сохранить clickHaver наверху после загрузки первого фильма, поскольку каждый следующий загружает сам по себе другой .swf файл.

person Adam Kiss    schedule 25.02.2010