Повесить программно ссылку на мувик @ DeForum.ru
DeДверь  
Логин:  
Пароль:  
  Автологин  
   
Разместить рекламу
Письмо админу
Правила | FAQ | *Поиск | Наша команда | Регистрация | Вход
 
 
 Страница 1 из 1 [ Сообщений: 20 ] 
*   Список форумов / Технологии изображения / Flash » ответить » создать топик « | »
Автор Сообщение
8cinq Муж.
постоянный участник
7
Сообщения: 2524
Зарегистрирован: 24.07.06
Заголовок сообщения: Повесить программно ссылку на мувик
Сообщение Добавлено: 16 Июнь 2008, 12:48:54 
Прошу помочь решить задачу.

Программно создается массив мувиков, нужно чтобы при нажатии каждого из мувиков происходил переход по ссылке. Ссылки берутся из ХМЛ.
Т.е. у меня есть mov_object[x], а мне надо чтобы при нажатии на него происходил переход по ссылке из переменной.

Подскажите, как это сделать? Как повесить ссылку на мувик?

_________________
*
@st@l@vist@
участник
70
Сообщения: 1606
Зарегистрирован: 20.03.03
Откуда: St.Petersburg
Сообщение Добавлено: 16 Июнь 2008, 13:03:13 
Например вот так:
Код:
   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 Муж.
постоянный участник
7
Сообщения: 2524
Зарегистрирован: 24.07.06
Сообщение Добавлено: 16 Июнь 2008, 13:57:31 
@st@l@vist@, спасибо! А что за переменная myData у объектов? Как её описать?

_________________
*


Последний раз редактировалось 8cinq 16 Июнь 2008, 14:07:27, всего редактировалось 1 раз.
@st@l@vist@
участник
70
Сообщения: 1606
Зарегистрирован: 20.03.03
Откуда: St.Petersburg
Сообщение Добавлено: 16 Июнь 2008, 14:06:17 
8cinq, не понял вопрос …
8cinq Муж.
постоянный участник
7
Сообщения: 2524
Зарегистрирован: 24.07.06
Сообщение Добавлено: 16 Июнь 2008, 14:09:11 
@st@l@vist@, ну ты присваиваешь свойству myData у объектов ссылку. Но такого свойства нет, чтобы там хранить инфу. Я так понял надо как-то присоединить это свойство к массиву объектов, чтобы оно играло роль переменной.

_________________
*
@st@l@vist@
участник
70
Сообщения: 1606
Зарегистрирован: 20.03.03
Откуда: St.Petersburg
Сообщение Добавлено: 16 Июнь 2008, 14:18:45 
MovieClip - это динамический класс, то есть можно добавлять к экземпляру класса любые свойства и методы.

Код:
mc.abraCadabra = "cadabraAbra";
mc.sayHello = function(){ trace(this + " : Hello"); }
8cinq Муж.
постоянный участник
7
Сообщения: 2524
Зарегистрирован: 24.07.06
Сообщение Добавлено: 16 Июнь 2008, 14:34:19 
Тогда видимо я что-то не так делаю.

В цикле создания объектов пишу
Код:
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@
участник
70
Сообщения: 1606
Зарегистрирован: 20.03.03
Откуда: St.Petersburg
Сообщение Добавлено: 16 Июнь 2008, 14:44:58 
Так вы делаете под 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 Муж.
постоянный участник
7
Сообщения: 2524
Зарегистрирован: 24.07.06
Сообщение Добавлено: 16 Июнь 2008, 15:18:29 
Надо было мне с самого начала конечно сказать про 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@
участник
70
Сообщения: 1606
Зарегистрирован: 20.03.03
Откуда: St.Petersburg
Сообщение Добавлено: 16 Июнь 2008, 15:27:55 
Вы указываете в библиотеке базовый класс flash.display.Sprite, для вашего символа?
8cinq Муж.
постоянный участник
7
Сообщения: 2524
Зарегистрирован: 24.07.06
Сообщение Добавлено: 16 Июнь 2008, 15:35:17 
Да нет, в настройках экспорта стоит flash.display.MovieClip

А массив у меня так описывается var prev_clone:Array = [];

_________________
*
@st@l@vist@
участник
70
Сообщения: 1606
Зарегистрирован: 20.03.03
Откуда: St.Petersburg
Сообщение Добавлено: 16 Июнь 2008, 15:50:46 
Так, а откуда же тогда появляется ошибка? :)
Property myData not found on flash.display.Sprite and there is no default value
8cinq Муж.
постоянный участник
7
Сообщения: 2524
Зарегистрирован: 24.07.06
Сообщение Добавлено: 16 Июнь 2008, 15:54:41 
@st@l@vist@, да я вот сам озадачился) А может быть это из-за этого что у внутренних мувиков нет настроек на экспорт в AS?

_________________
*
@st@l@vist@
участник
70
Сообщения: 1606
Зарегистрирован: 20.03.03
Откуда: St.Petersburg
Сообщение Добавлено: 16 Июнь 2008, 16:01:18 
Это у вас работает?
8cinq Муж.
постоянный участник
7
Сообщения: 2524
Зарегистрирован: 24.07.06
Сообщение Добавлено: 16 Июнь 2008, 16:24:36 
@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@
участник
70
Сообщения: 1606
Зарегистрирован: 20.03.03
Откуда: St.Petersburg
Сообщение Добавлено: 16 Июнь 2008, 16:51:08 
Вы можете положить куда-то FLA файл, где будет только ваш символ - я посмотрю, а так мне трудно сказать откуда взялся Loader …
8cinq Муж.
постоянный участник
7
Сообщения: 2524
Зарегистрирован: 24.07.06
Сообщение Добавлено: 16 Июнь 2008, 16:56:24 
@st@l@vist@, Там столько кода, что боюсь не так просто в понятном виде все это показать. И код весь написан в классе. Спасибо ещё раз, завтра на трезвую голову попробую все иерархию понять.

_________________
*
@st@l@vist@
участник
70
Сообщения: 1606
Зарегистрирован: 20.03.03
Откуда: St.Petersburg
Сообщение Добавлено: 16 Июнь 2008, 17:09:37 
А вы случайно, символ "pica" не создаёте программно?

var pica:Loader = new Loader();
pica.load(new URLRequest("image.jpg"));

На подобии этого?
8cinq Муж.
постоянный участник
7
Сообщения: 2524
Зарегистрирован: 24.07.06
Сообщение Добавлено: 16 Июнь 2008, 17:17:51 
@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@
участник
70
Сообщения: 1606
Зарегистрирован: 20.03.03
Откуда: St.Petersburg
Сообщение Добавлено: 16 Июнь 2008, 20:01:37 
Кстати, посмотрите внимательно на event-объект, который вы получаете в обработчике MouseEvent.CLICK.
Дело в том, что event.target не всегда одно и тоже что event.currentTarget. Вообще стоит использовать event.currentTarget.

А то уж больно страшная цепочка получилась у вас :)

И не очень понятна необходимость использования UILoader'а в данном случае.
*   Список форумов / Технологии изображения / Flash « | » » ответить » создать топик
 Страница 1 из 1 [ Сообщений: 20 ] 
Показать сообщения за:   Поле сортировки  
Найти:
Перейти:  
Уровень доступа: Вы не можете начинать темы. Вы не можете отвечать на сообщения. Вы не можете редактировать свои сообщения. Вы не можете удалять свои сообщения. Вы не можете добавлять вложения.
cron


ООО ДеФорум
При использовании материалов сайта ссылка на DeForum.ru — обязательна.
Проект Павла Батурина ©2001-2077; // Powered by phpBB © 2013 phpBB Group
Rambler's Top100