PDA

Просмотр полной версии : Сделать клип кликабельным при использовании duplicateMovieClip


Punk T-34
05.12.2008, 16:14
Привет.
У меня есть XML, который парсится с помощью XPath4AS2 и на основе данных дублируются клипы для менюшки.
Код приобретает такой вид:
my_xml.onLoad = function(success:Boolean):Void {
if (success) {
var Categories:Array = XPath.selectNodesAsString(my_xml, "products/category/@name");
var Items:Array = XPath.selectNodesAsString(my_xml, "products/category/item");
var FrstItems:Array = XPath.selectNodesAsString(my_xml, "products/category/item[1]");
var Pics:Array = XPath.selectNodesAsString(my_xml, "products/category/item/@img");
var Links:Array = XPath.selectNodesAsString(books, "products/category/item/@link");
var totalCat = Categories.length;
var totalItems = Items.length;
for (i=0; i<totalItems; i++) {
container.icon.duplicateMovieClip("icon"+i,container.getNextHighestDepth());
position = iconTotalWidth*i;
loader = new MovieClipLoader();
loader.loadClip(Pics[i],container["icon"+i]);
container["icon"+i]._x = position;
}
} else {
result_ta.text = "Error connecting to server.";
}
};
my_xml.load("products.xml");и так дальше.

Вопрос: как дублирующимся клипам с именами ["icon"+i] присвоить соответствующие ссылки из массива Links:Array?

Пытался внутри цикла "for" прописать вот такое:
container["icon"+i].onRelease = function() {
getURL(Links[i], "_self");
};
но это не работает :(
Заранее спасибо.

artem_fs
05.12.2008, 16:25
var temp_mc = container.icon.duplicateMovieClip("icon"+i,container.getNextHighestDepth());
temp_mc.tempUrl = Links[i];
temp_mc.onRelease = function() {
getURL(this.tempUrl, "_self");
};
вроде так работать должно)

chingachgoog
05.12.2008, 16:29
в цикле:
container["icon"+i].id=i
в обработчике:
getURL(Links[this.id], "_self");

Punk T-34
05.12.2008, 16:36
нет, к сожалению, ни один из вариантов не работает. Кнопки даже не становятся активными (курсор не меняется на пальчик). :(

iNils
05.12.2008, 17:01
Не удивительно.
Вы пытаетесь навесить onRelease в клип в который грузите картинки. Естественно, после старт загрузки, содержимое клипа, в том числе и onRelease удаляются.
Назначать надо либо после загрузки, либо грузить в клип-контейнер внутри клипа с событием.

Punk T-34
05.12.2008, 17:25
что-то не работает.
Хотя, я не уверен, что правильно использую onLoadComplete:
//---------------------------- загрузка картинки
loadListener.onLoadComplete = function():Void {
trace("loaded");
container["icon"+i].id = i;
trace(container["icon"+i].id);
container["icon"+i].onRelease = function() {
getURL(Links[i], "_self");
};
};
var loader = new MovieClipLoader();
loader.addListener(loadListener);
loader.loadClip(Pics[i],container["icon"+i]);
//---------------------------- конец загрузки картинкимогли бы вы подсказать правильный синтаксис?

chingachgoog
05.12.2008, 17:40
onLoadComplete дает параметром функции ссылку на загрузившийся клип. На эту ссылку и надо вешать обработчик (как я написал, с this.id)

Punk T-34
05.12.2008, 17:43
Спасибо! Я нашёл способ — обходной путь:
в родительском клипе container создал ещё один дублирующийся клип ("clicker"+i), которому назначил ссылки и координаты, соответствующие клипам с картинками ("icon"+i). Теперь они действуют независимо.
Ещё раз спасибо за помощь!

P.S. Для меня это гораздо проще, потому что я всё равно ничего не понял про onLoadComplete. У меня синтаксис хромает — я начинающий.
P.P.S. Я заметил, что в CS4 при нажатии F1 вызывается онлайновая справка флэша. А что в новой версии нет локальной справки, как в CS3?