Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Сделать клип кликабельным при использовании duplicateMovieClip (http://www.flasher.ru/forum/showthread.php?t=118855)

Punk T-34 05.12.2008 16:14

Сделать клип кликабельным при использовании duplicateMovieClip
 
Привет.
У меня есть XML, который парсится с помощью XPath4AS2 и на основе данных дублируются клипы для менюшки.
Код приобретает такой вид:
Код AS1/AS2:

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" прописать вот такое:
Код AS1/AS2:

container["icon"+i].onRelease = function() {
        getURL(Links[i], "_self");
};

но это не работает :(
Заранее спасибо.

artem_fs 05.12.2008 16:25

Код AS1/AS2:

var temp_mc = container.icon.duplicateMovieClip("icon"+i,container.getNextHighestDepth());

Код AS1/AS2:

temp_mc.tempUrl = Links[i];

Код AS1/AS2:

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:
Код AS1/AS2:

//---------------------------- загрузка картинки
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?


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

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