PDA

Просмотр полной версии : Определить класс мувиклипа


I@n
23.11.2002, 17:39
Как программно определить класс мувиклипа, т.е. название символа в библиотеке?

Например, мне надо зная класс одного мувиклипа из множества расположенных на сцене, заменить его на другой, соответствующий определенному классу.
P.S. По имени мувиклипа этого сделать в данном случае невозможно...

Nox Noctis
23.11.2002, 20:54
что значит "класс мувиклипа" ?

мувиклип принадлежит 'классу' отличному от класса MovieClip только если было действие Object.registerClass для линкейджа, установленного для этого клипа в библиотеке...

если речь идет именно о таких классах, то можно узнать о принадлежности объекта классу одним из вариантов:

(clip.__proto__ == Class.prototype)
(clip.constructor == Class)
(clip instanceof Class)



а название символа в библиотеке не узнать... никак.
только если вписать ручками переменную с названием символа в клип

Hirn
30.11.2002, 16:48
А это не подходит?

Object.oldRegisterClass = Object.registerClass;
Object.registeredSymbols = {};
ASSetPropFlags(Object, "registerClass", 0,7);
Object.registerClass = function(symbol, class) {
this.registeredSymbols[symbol] = class.prototype;
return this.oldRegisterClass(symbol, class);
};

Object.isSybolRegistered = function(symbol) {
return this.registeredSymbols[symbol] != undefined;
};
ASSetPropFlags(Object, "registerClass,oldRegisterClass,registeredClasses,isSybolRegistered", 7);
ASSetPropFlags(Object, "registeredClasses", 1);

Nox Noctis
30.11.2002, 17:47
это канеш круто, только похоже автор уже передумал =)
не подает признаков жизни...

и потом я что-то не вижу каким образом твой код помогает решить вопрос с определением класса (холтя мы по-прежнему не знаем что все-таки хотел узнать автор :)) )

ты записываешь в registeredSymbols какой линкейдж какому прототипу соответствует... не понятно - зачем ?..
у тебя на сцене есть клип, у которого в библиотеке есть линкейдж и для которого зарегистрирован класс...
как ты узнаешь линкейдж этого клипа чтобы подставить в registeredSymbols[symbol] и получить прототип ?


тогда уж все проще можно сделать -

клип.constructor - это ссылка на создавшую его функцию... то есть либо на функцю MovieClip, либо на функцию Какой_то_класс...
клип.__proto__ - это ссылка на Какой_то_класс.prototype ...

и не надо ничего городить дополнительно :)

но все равно не понятно зачем... =) если так уж нужно получить имя класса, то его можно вписать в прототип класса как рид-онли свойство и оно будет наследовано всеми объектами-представителями... чего тут еще придумывать-то ? :)

I@n
30.11.2002, 18:11
Спасибо за ответы. Я вообще то нашел намного более простой путь в решении своей задачи чем определение класса, но почитать то что вы пишете интересно.
Извините за неопределенность вопроса - я лучше разбираюсь в Delphi & C++, чем во флеше, а там немного другая терминология, к которой я привык...
А хотел я определить name символа, который задается в New Symbol или же Identifier в Linkage для размешенного на Stage Instance'а

Nox Noctis
30.11.2002, 18:18
name символа, который задается в New Symbol повторюсь - этого программно не узнать НИКАК :)
...то есть можно, конечно, сделать тупо - переменную в клипе, которая будет содержать это имя... но по-другому получить имя _в библиотеке_ не получится.

с линкейджем абсолютно то же самое.

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

если это не удобно - то что-нибудь другое придумывать... вариантов масса :)