Показать сообщение отдельно
Старый 21.12.2007, 15:42
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 9  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Передается не клип, а ссылка на него. Т.е. все сложные объекты (не строки\числа\константы) не дублируются при операциях с ними.
Пример:
Код:
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());
		}
}
Создаем "библиотеку" статических методов создающих клипы "на заказ" %)
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 21.12.2007 в 15:51.