PDA

Просмотр полной версии : Куда записываются классы при регистрации с помощью Object.registerClass()


Волгоградец
03.03.2009, 11:07
Привет. Недавно столкнулся с проблемкой, решил, но непонятки остались. Имеем два swf - test1.swf и test2.swf. В них есть символ с таким кодом:
test1.swf
#initclip
function Clip():Void{}
Clip.prototype = new MovieClip();
Object.registerClass("Clip", Clip);
Clip.prototype.test = function():Void{
trace("TEST_1");
}
#endinitclip
В test2.swf то же самое, меняю только trace("TEST_2").

Так вот, если теперь я гружу в main.swf эти флэшки последовательно (по onLoadInit()), то все ок. Если же я пытаюсь грузить их однопоточно - т.е. одновременно и для каждого свой лоадер, то два раза выполняется trace("TEST_1")!
Или же если я меняю строку в test2.swf
Object.registerClass("Clip", Clip);
на
Object.registerClass("Clip2", Clip);
без изменения линкажа в библиотеке, то также дважды выполняется trace("TEST_1")!
Единственное что мне приходит в голову - это то что эти классы записываются куда-то в глобальную область видимости и каким-то образом перекрывают друг друга. Но разве они не должны принадлежать таймлайну каждого из подгружаемых мувиков?
Фуф, чувствую что не понятно объяснил, извиняйте.

iNils
03.03.2009, 12:54
Все классы хранятся в _global. Соответственно класс с одним именем может быть только один.

Волгоградец
03.03.2009, 12:59
Мда. Вот и ответ на мой вопрос. Но интересно - ведь у каждой флэшки свой _global, пока она не подгружена, так? А когда подгружаем эти флэшки то что происходит? Все скидывается в один глобал? И почему не создается уникальное имя класса при подгрузке - что-то типа пакета? Как быть, если случайно окажутся одинаковые имена у совершенно разных классов подгружаемых флэшек?

CrazyFlasher
03.03.2009, 13:01
для этого есть AS3, где такие проблемы легко решаются :)

iNils
03.03.2009, 13:15
Но интересно - ведь у каждой флэшки свой _global, пока она не подгружена, так? А когда подгружаем эти флэшки то что происходит? Все скидывается в один глобал?Да.
И почему не создается уникальное имя класса при подгрузке - что-то типа пакета?За этим должен программист следить.
Как быть, если случайно окажутся одинаковые имена у совершенно разных классов подгружаемых флэшек?Вот для этого пакеты и создаются.
для этого есть AS3, где такие проблемы легко решаютсяПричем тут AS3? Пакеты можно и в AS1 и AS2 сделать.

Волгоградец
03.03.2009, 13:18
Я то знаю что AS3.0 - это круто. Но мы пока на втором сидим (...
Спасибо.