PDA

Просмотр полной версии : Добавление Мувиклипа доработанного на основе класса


Random SunFire
29.05.2009, 17:19
Вобщем мне нужен перерисовывающийся кодом мувиклип. Я создаю класс типа
class Link extends MovieClip {} с набор нужных мне свойств и методов.

Вопрос, как его создать во временной шкале?
Мувиклипы нельзя создавать new MovieClip();
Только тремя методами их будущего родителя:
You do not use a constructor method to create a movie clip. You can choose from among three methods to create movie clip instances:
The attachMovie() method allows you to create a movie clip instance based on a movie clip symbol that exists in the library.
The createEmptyMovieClip() method allows you to create an empty movie clip instance as a child based on another movie clip.
The duplicateMovieClip() method allows you to create a movie clip instance based on another movie clip.

Можно создать в библиотеке мувик и прописать ему класс, но как то мне это решение не нравится. Это будет же пустой клип...
Вобщем хелп, я весь в недоумениях

alekslitvinenk
29.05.2009, 17:30
Код AS1/AS2:

var my_var:Link = Link(attachMovie(...) );



вроде так
если вы хотите создавать класс на основе пустого мувика, то ищите класс McFactory...

silin
29.05.2009, 17:36
можно обойтись и без библиотеки
var link = this.createEmptyMovieClip("link", 0);//создаем пустой мувик
link.__proto__ = Link.prototype;//ставим в цепочку наследования
Function(Link).apply(link);//вызываем конструктор

довольно долго пользовался (и сейчас пользуюсь, если нужен AS2) такой приспособой (http://silin.fatal.ru/#AS2/manager) для создания мувиков "своих" классов без библиотеки, никаких граблей не наблюдал

Random SunFire
29.05.2009, 17:41
Опа! Это как работает то... В конструкторе класса нужно что то прописывать?
И это... attachMovie это же из библиотеки, а из библиотеки не спортивно что ли.
проще уж - родитель.attachMovie("Link",.....
Мне ;t нужно что то вроде:
родитель.createEmptyMovieClip() - только вызывался не базовый MovieClip, расширенный мой Link
Типа тогда так: var my_var:Link = Link(createEmptyMovieClip(...) );

Добавлено через 5 минут
silin да это кажется то что нужно.
Вот по третей строчке можно разжевать?
Если у меня конструктор с куче параметров типа
New Link("a","b","v")

alekslitvinenk
29.05.2009, 17:56
var my_var:Link = Link(createEmptyMovieClip(...) );
Так работать не будет
А вобще тема уже поднималась неоднократно.
http://flasher.ru/forum/showthread.php?t=104422

silin
29.05.2009, 18:00
аргументы конструктора
Function(Link).apply(link, ["a", "b"]);
или
Function(Link).call(link, "a", "b");
или (если с моей утилитой и все сразу
var my_var:Link = InstanceManager.createMC(this, Link, "a", "b");

Random SunFire
29.05.2009, 18:00
или Link.apply(link,["a","b","v"]);// правильно ли я понимаю?

silin
29.05.2009, 18:07
правильно, если компилятор с тобой согласен
mtasc Link.apply не пропускает, поэтому я и пишу Function(Link)

Random SunFire
29.05.2009, 18:09
Вобще при таком раскладе не проще ли нарисовать метод и вызывать его? Или это будет идеологически не верно?

silin
29.05.2009, 18:14
>>не проще ли
дело хозяйское :)

Random SunFire
29.05.2009, 18:30
:) Спасибо за консультацию.