Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Конфликт _lockroot-а с экземпляром пользовательского класса (http://www.flasher.ru/forum/showthread.php?t=109720)

Жень Шень 19.03.2008 16:59

Конфликт _lockroot-а с экземпляром пользовательского класса
 
Привет!
Прошу помощи в разрешении следующей проблемы:
Имею main.swf, которая загружается в оболочку написанную на Делфи. Клип main.swf на _root имеет контейнер page_mc (мувиклип) и набор управляющих символов (кнопок) Имеется класс ConnectorClass.as.
В первом кадре main.swf инициализируется объект
Код:

connector = new ConnectorClass();
который и обеспечивает обмен данными и командами между оболочкой и main.swf своими методами.
При загрузке в page_mc внешнего swf-клипа который не имеет в коде обращений к _root , все прекрасно работает. В противном случае подгруженный клип мертв в части работы его кода. Если же при загрузке клипа дать команду
Код:

this.page_mc._lockroot = true
то клип работает «на ура», а обращение к connector-у не отрабатывается. Попытка сделать объект connector глобальным не увенчалась успехом:
Так вообще не работает
Код:

_global.connector = new ConnectorClass();
А так не помогает:
Код:

_global.connector = null;
connector = new ConnectorClass();

Подозреваю, что во втором случае connector попросту переопределяется.
Вопрос: как сделать connector (его методы) видимым даже при применении lockroot?
Устранять обращения к _root в готовых клипах нет возможности, так как их порядка 1000 шт.
Спасибо.

iNils 19.03.2008 19:08

Я предлагаю создать тестовый класс A, поставить его за место ConnectorClass и посмотреть на его поведение в дебаггере.

Я не знаю, что там за код, но в моей практике был случай связанный с использованием _lockroot, который меня озадачил часа на 3. У меня была управляющая флешка, в которой работал конвейером, он запускал методы экземпляров различных классов через apply. Флешка могла загружать и выгражать 5 модулей. Но один из модулей был написал с использованием _root и пришлось воспользоваться _lockroot. Вот тут и возникла проблема, при включенном _lockroot, apply забивал на то, что unloadMovie вызывается как метод мувиклипа, и использовал глобальную функцию и в результате выгружая абсолютно все.

Жень Шень 20.03.2008 18:26

Спасибо, iNils, за совет.
Выкрутился я очень просто:
  • 1. При загрузке в "page_mc" любого клипа для проигрывания, я сразу после метода коннектора объявляю "this.page_mc._lockroot = true".
  • 2. На "main" есть кнопуля возврата в главное меню. Я сначала возвращаю главный рут "this.page_mc._lockroot = false", и только потом вызываю метод коннектора.

Но, один маленький "червячек" грызет разум: - как присвоить таки "_global" объекту класса? Что-то не получилось протестировать его на "глобальность".

iNils 20.03.2008 18:52

Тут в ветке AS3 идет бурная баталия на тему синглтона.
У себя в проектах, я не парюсь на эту тему, так как знаю, что это, это и вот это, у меня всегда в единственном экземпляре. Поэтому у данных классов, есть статичное свойство, которое возращает мне этот самый единственный экземпляр. Если я правильно понял, то у тебя тот самый случай, поэтому вместо того, чтобы лезть на прямую в глобал, не попробывать ли обратится за ссылкой на экземпляр к классу?

Кстати, а нельзя урезать проект до версии, чтобы осталась одна работающая ошибка:D? Интересно поискать причину.


Часовой пояс GMT +4, время: 17:09.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.