Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript (http://www.flasher.ru/forum/forumdisplay.php?f=5)
-   -   Определить класс мувиклипа (http://www.flasher.ru/forum/showthread.php?t=39974)

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
повторюсь - этого программно не узнать НИКАК :)
...то есть можно, конечно, сделать тупо - переменную в клипе, которая будет содержать это имя... но по-другому получить имя _в библиотеке_ не получится.

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

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

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


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

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