Передается не клип, а ссылка на него. Т.е. все сложные объекты (не строки\числа\константы) не дублируются при операциях с ними.
Пример:
Код:
var a:Object = {_a:100};
var b:Object = a;
b._a = 50;
trace(a._a); // output 50
eval - функция не рекомендованая к употреблению. И ее использование может привести к ошибкам, которые тяжело отследить.
В твоем случае есть 2 нормальных пути реализации:
1. Залинковать класс к клипу в библиотеке, как предложил
Fernando Costa
2. Создавать экземпляр класса с помощью оператора new.
Я просто не люблю первый вариант. Но все равно попробую в двух словах объяснить. Дело в том, что MovieClip и все потомки этого класса не могут быть созданы с помощью оператора new потому что должны обязательно быть привязаными к родителю, и привязку эту никак в последствии поменять нельзя (что, слава богу, было изменено в АС3).
Т.е. чтобы создать новый клип - есть методы класса MovieClip - .attachMovie(), .createEmptyMovieClip(), .duplicateMovieClip() - все они требуют в агрументах указывать на родителя, либо родитель находится по умолчанию в определенном месте по отношению к клипу, чей метод был вызван.
Первый вариант (линкование класса к клипу в библиотеке) используется для: создания компонентов (по-другому просто не возможно). Или если дизайнер принес уже готовый UI, и нужно его только оживить (и не вдаваться в подробности где что находится, какой клип послке какого создавать и т.п. Т.е. програмер вообще не занимается графикой - она вся уже существует, нужно только добавить функционала. Если проект небольшой, графики не много, и уклон на красивости оформления, а не на функционал - это вплоне хороший способ. Так примерно и создается 90% всего, что вообще делается на флеш.
Второй вариант - предпочтительнее для проектов, где нужна сложная програмная графика.
Эволюция %)
Код:
class Buttonery extends MovieClip {
private var nameclip:Number = 0;
private var nmm:Number = "";
function Buttonery(pictype:String, px:Number, py:Number, sx:Number, sy:Number) {
nameclip = _root.getNextHighestDepth();
nmm = "Buttonery_container"+nameclip;
createEmptyMovieClip(nmm , nameclip);
var picc:MovieClip = attachMovie(pictype , "picc", getNextHighestDepth());
picc._x=px;
picc._y=py;
picc._xscale=sx;
picc._yscale=sy;
trace(this);
}
}
Этот нужно аттачить из библиотеки
Код:
class Buttonery {
private var nameclip:Number = 0;
private var nmm:Number = "";
private var buttonery_mc:MovieClip;
function Buttonery(pictype:String, px:Number, py:Number, sx:Number, sy:Number) {
nameclip = _root.getNextHighestDepth();
nmm = "Buttonery_container"+nameclip;
buttonery_mc = _root.createEmptyMovieClip(nmm , nameclip);
buttonery_mc.attachMovie(pictype , "picc", buttonery_mc.getNextHighestDepth());
buttonery_mc.picc._x=px;
buttonery_mc.picc._y=py;
buttonery_mc.picc._xscale =sx;
buttonery_mc.picc._yscale =sy;
trace (buttonery_mc);
}
}
Этот можно создать через new, но не красиво.
Код:
class Buttonery {
private static var __instanceCounter:Number = 0;
public static function createTypeClip(mc:MovieClip, pictype:String):MovieClip {
return mc.attachMovie(pictype, pictype+(++__depthCounter), mc.getNextHighestDepth());
}
}
Создаем "библиотеку" статических методов создающих клипы "на заказ" %)