|
Страница 1 из 1 [ Сообщений: 20 ] |
Автор |
Сообщение |
8cinq
постоянный участник
|
|
Прошу помочь решить задачу.
Программно создается массив мувиков, нужно чтобы при нажатии каждого из мувиков происходил переход по ссылке. Ссылки берутся из ХМЛ.
Т.е. у меня есть mov_object[x], а мне надо чтобы при нажатии на него происходил переход по ссылке из переменной.
Подскажите, как это сделать? Как повесить ссылку на мувик?
|
|
|
|
|
@st@l@vist@
участник
|
|
Например вот так:
Код: var data = ["link_1", "link_2", "link_3"]; var mc; for(var i = 0; i < data.length; i++) { mc = createEmptyMovieClip("mc_" + i, i);
mc.beginFill(0); mc.lineTo(0, 40); mc.lineTo(40, 40); mc.lineTo(40, 0); mc.endFill(); mc._x = i * 50; mc.myData = data[i]; mc.onRelease = onClick; } function onClick() { trace("getURL(\"" + this.myData + "\");"); }
|
|
|
|
|
8cinq
постоянный участник
|
|
@st@l@vist@, спасибо! А что за переменная myData у объектов? Как её описать?
Последний раз редактировалось 8cinq 16 Июнь 2008, 14:07:27, всего редактировалось 1 раз.
|
|
|
|
|
@st@l@vist@
участник
|
|
|
|
|
|
8cinq
постоянный участник
|
|
@st@l@vist@, ну ты присваиваешь свойству myData у объектов ссылку. Но такого свойства нет, чтобы там хранить инфу. Я так понял надо как-то присоединить это свойство к массиву объектов, чтобы оно играло роль переменной.
|
|
|
|
|
@st@l@vist@
участник
|
|
MovieClip - это динамический класс, то есть можно добавлять к экземпляру класса любые свойства и методы.
Код: mc.abraCadabra = "cadabraAbra"; mc.sayHello = function(){ trace(this + " : Hello"); }
|
|
|
|
|
8cinq
постоянный участник
|
|
Тогда видимо я что-то не так делаю.
В цикле создания объектов пишу
Код: my_object[i].pica.myData = xmlDB[i-1].@url; my_object[i].pica.onRelease = onClick;
Я создаю объекты по символу из библиотеки, внутри создаваемого мувика есть ещё внутренний мувик pica, при нажатии на который и должен происходить переход по ссылке. И на участке Код: function onClick() { trace("getURL(\"" + this.myData + "\");"); }
Выдает ошибку Access of possibly undefined property myData throught a reference...
|
|
|
|
|
@st@l@vist@
участник
|
|
Так вы делаете под AS3?
Естественно там все иначе, хотя общий принцип такой же.
Пример жутковатый, но как видите все работает:
Код: var s:Symbol = new Symbol(); s.pica.myData = "aaa"; s.pica.addEventListener(MouseEvent.CLICK, hello); addChild(s); function hello(e) { trace(e.target.myData); }
|
|
|
|
|
8cinq
постоянный участник
|
|
Надо было мне с самого начала конечно сказать про AS3, моя ошибка. Извиняюсь.
Вроде пример и простой, но не получается разобраться. Програмист из меня не блестящий...
Опять выходит ошибка Property myData not found on flash.display.Sprite and there is no default value
Код: for(var i:uint=100; i > 0; i--) { prev_clone[i] = new Symbol17(); test_base.addChild( prev_clone[i] ); prev_clone[i].myData = baseXML[i-1].@url; prev_clone[i].pica.addEventListener(MouseEvent.CLICK, myClick); }
function myClick(e) { trace("getURL(\"" + e.target.parent.myData + "\");"); }
|
|
|
|
|
@st@l@vist@
участник
|
|
Вы указываете в библиотеке базовый класс flash.display.Sprite, для вашего символа?
|
|
|
|
|
8cinq
постоянный участник
|
|
Да нет, в настройках экспорта стоит flash.display.MovieClip
А массив у меня так описывается var prev_clone:Array = [];
|
|
|
|
|
@st@l@vist@
участник
|
|
Так, а откуда же тогда появляется ошибка?
Property myData not found on flash.display.Sprite and there is no default value
|
|
|
|
|
8cinq
постоянный участник
|
|
@st@l@vist@, да я вот сам озадачился) А может быть это из-за этого что у внутренних мувиков нет настроек на экспорт в AS?
|
|
|
|
|
@st@l@vist@
участник
|
|
|
|
|
|
8cinq
постоянный участник
|
|
@st@l@vist@, работает. Я похоже понял с чем связана ошибка. e.target.parent.myData приводит не к тому объекту, у которого есть свойство myData...
Попробовал присвоить урл не родителю, а самой pica: prev_clone[i].pica.myData = baseXML[i-1].@url;
И изменил в клике мыши на trace(e.target.myData).
После этого выдает: Property myData not found on flash.display.Loader. Т.е. путь приводит вообще непонятно куда, там явно не мувик.
Видимо мне уже не разобраться, слишком много слоев и нового для меня кода. Спасибо что столько времени на меня потратили, поставил бы +3, но уже стоит.
|
|
|
|
|
@st@l@vist@
участник
|
|
Вы можете положить куда-то FLA файл, где будет только ваш символ - я посмотрю, а так мне трудно сказать откуда взялся Loader …
|
|
|
|
|
8cinq
постоянный участник
|
|
@st@l@vist@, Там столько кода, что боюсь не так просто в понятном виде все это показать. И код весь написан в классе. Спасибо ещё раз, завтра на трезвую голову попробую все иерархию понять.
|
|
|
|
|
@st@l@vist@
участник
|
|
А вы случайно, символ "pica" не создаёте программно?
var pica:Loader = new Loader();
pica.load(new URLRequest("image.jpg"));
На подобии этого?
|
|
|
|
|
8cinq
постоянный участник
|
|
@st@l@vist@, нет, pica это мувик прямо в символе бибилиотеки. Но проблема решена!
У меня перед строчкой prev_clone[i].pica.myData = baseXML[i-1].@url; есть такой код:
Код: var myBaseLdr1:UILoader = new UILoader(); myBaseLdr1.autoLoad = false; myBaseLdr1.scaleContent = false; scr_path = baseXML[i-1].@scr; myBaseLdr1.source = scr_path; myBaseLdr1.load(); myBaseLdr1.move(0, 0); prev_clone[i].pica.addChild(myBaseLdr1);
Т.е. я в pica загружаю картинку по адресу из xml.
А сейчас я написал в событии клика trace(e.target.parent.parent.parent.myData) и все заработал. Спасибо огромное! Наконец побороли.
|
|
|
|
|
@st@l@vist@
участник
|
|
Кстати, посмотрите внимательно на event-объект, который вы получаете в обработчике MouseEvent.CLICK.
Дело в том, что event.target не всегда одно и тоже что event.currentTarget. Вообще стоит использовать event.currentTarget.
А то уж больно страшная цепочка получилась у вас
И не очень понятна необходимость использования UILoader'а в данном случае.
|
|
|
|
|
|
Страница 1 из 1 [ Сообщений: 20 ] |
Уровень доступа: Вы не можете начинать темы. Вы не можете отвечать на сообщения. Вы не можете редактировать свои сообщения. Вы не можете удалять свои сообщения. Вы не можете добавлять вложения.
|
|