PDA

Просмотр полной версии : Как правильно обращаться к пронумерованным копиям клипа?


mixery
06.06.2008, 18:03
Привет! В общем такая проблема: есть несколько клипов, которые аттачатся из библиотеки. Нужно чтобы имена шли по порядку, name0, name1, name2 и т.д. Это сделать смог:

mClip.attachMovie("MC", "name"+i, i, {_x:mClip._xmouse, _y:mClip._ymouse})
i++;

А как узнать свойства name0, name1, name2 и т.д.? Нужны координаты x&y относительно родительского клипа (клипы name+i вложенные), что-то в стиле

trace (mClip.name+i._x);

Этот код выводит undefinedundefined. Как правильно обращаться к ним??

iNils
06.06.2008, 18:05
mClip["name"+i]._x

mixery
06.06.2008, 18:22
Спасибо!

А почему не работает?

["name" + i].onRollOver = function(){trace ("Hellow, world!")}

Жень Шень
06.06.2008, 19:43
"Аттачится" клип в mClip. Поэтому надо указывать полный путь.
Но, даже если вы "аттачите" на _root, то надо указать this или _root.
Конструкции ["name" + i].onRollOver не проходит по причине: идентификатор должен начинаться с буквы или _, а у вас с [
Скобки применяются внутри составной конструкции, причем точка ставится только после последней закрывающей скобки.
Допустимый синтаксис: mClip["menu"+i]["myclip"+i*2]._x

mixery
06.06.2008, 19:57
Но тем не менее это не работает:

_root["name" + i].onRollOver = function(){
trace("Hellow, world!");
}


Да, а как сделать чтобы вышеописанный код работал для ВСЕХ "name"+i, а не только для одного??

Ведьмак
06.06.2008, 20:03
не работает потому что вы аттачите не в _root, а в mClip... Если mClip в руте, то будет работать

_root.mClip["name" + i].onRollOver = function(){
trace("Hellow, world!");}


что значит "для ВСЕХ"? он работает для i-го клипа..

mixery
06.06.2008, 20:22
Не не, извиняюсь, уже в _root аттач происходит.
он работает для i-го клипа.
Об этом я в курсе. Именно, нужно чтобы работало для name0, name1, name2 и т.д.

Alex_beginner
06.06.2008, 20:37
В цикле надо обработчики создавать, в цикле!!!!!
Только тогда для всех клипов работать onRollOver будет.
А еще лучше, в свойcтве prototype класса MovieClip сохранить сей обработчик, тогда он будет для всех мувиклипов вызываться.

mixery
06.06.2008, 21:08
Буду рад маленькому примеру по этому поводу ;) но даже если ручками вписать

_root.name0.onRollOver = function(){
trace("Hellow, world!");}

то все равно не работает =( хотя клипы в _root присоединяются...

Alex_beginner
06.06.2008, 21:14
А name0 у Вас существует на _root?! Нет!

Вы его создали на mClip (см.выше)

так делайте: _root.mClip.name0.onRollOver = function()
{
//
}

Это будет работать в том случае если mClip создан на _root.

mixery
06.06.2008, 23:45
_root.attachMovie("MC", "name"+i, i, {_x:_root._xmouse, _y:_root._ymouse})
i++;

Вот так уже. И

_root.name0.onRollOver = function(){
trace("Hellow, world!");}

не работает (

alexcon314
07.06.2008, 00:21
Alex_beginner, исправьте свой пост и оформите код тэгами . Вам уже делали замечание по этому поводу.

tikhop
07.06.2008, 00:21
var i:Number=0
inteval=setInterval(attachMC, 500)
function attachMC(){
var new_mc=_root.attachMovie("MC", "name"+i, i, {_x:_root._xmouse, _y:_root._ymouse})
new_mc.onRelease=function(){
trace(this)
}
i++
if(i>=10)clearInterval(inteval)
}

Alex_beginner
07.06.2008, 11:10
alexcon314! Прошу прощения за неоформленный код! Исправил.
А что еще я должен исправить??

mixery! Чтобы разобраться давайте выясним основные моменты.
1. Ваш код: _root.attachMovie("MC", "name"+i, i, {_x:_root._xmouse, _y:_root._ymouse})
i++; выполняется в цикле, где счетчик цикла в начале выполнения имеет значение 0???
2. MC импортирован в библиотеку и ему присвоен индентификатор импорта - MC.?
3. Код _root.name0.onRollOver = function(){
trace("Hellow, world!");} расположен на _root.?
4. Зачем это:{_x:_root._xmouse, _y:_root._ymouse}

Пример использования onRollOver прилагается. Разберитесь почему работает.

mixery
07.06.2008, 17:37
Итак, начнем по порядку.
1. Мой код на настоящий момент:

var i:Number = 0;
img.onPress = function() {
_root.attachMovie("MC", "name" + i, i, {_x:_xmouse, _y:_ymouse});
i++;
};
_root.name0.onRollOver = function(){//Это не работает =(
trace("Hellow, world!");}

_root["dot"+i].onRollOver = function(){//Это тоже.
trace("Hellow, world!");


2. Да, импортирован, идентификатор "MC".
3. Да
4. Чтобы клип появлялся в месте клика мыши.

По поводу onRollOver, я знаю как он работает, но на присоединенном клипе с именем вида name0, name1 и т.д. не хочет работать =(

chingachgoog
07.06.2008, 17:42
А не быстрее воспользоваться поиском по форуму? Или вы считаете, что это очень оригинальный вопрос?

http://flasher.ru/forum/showthread.php?t=96204

Alex_beginner
07.06.2008, 17:48
По поводу onRollOver, я знаю как он работает, но на присоединенном клипе с именем вида name0, name1 и т.д. не хочет работать =(

Извините, но этого не может быть.

Давайте будем разбираться.

1. Попробуйте вынести код _root.attachMovie("MC", "name" + i, i, {_x:_xmouse, _y:_ymouse}); из обработчика.
2. Возможно у Вас есть клип с _alpha = 0 и большой глубиной, который закрывает собою создаваемые клипы. Правда это должен быть динамический клип, поскольку клипы, создаваемые в период конструирования расплагаются на отрицательных глубинах.
3. Предложение:давайте я напишу код с динамическим созданием клипов с подписанными обработчиками события onRollOver.

mixery
07.06.2008, 20:12
И правда, если вынести из обработчика onPress то все работает! Почему!? Но мне нужно именно чтобы при нажатии там появлялся клип... Сейчас через листенеры сделаю, может так работать будет?

Vektor
07.06.2008, 21:46
var i:Number = 0;
var mcName:MovieClip;
this.onMouseDown = function() {
if (img.hitTest(_xmouse, _ymouse)) {
mcName = this.attachMovie("MC", "name"+i, i, {_x:_xmouse, _y:_ymouse});
i++;
}
this.mcName.onRollOver = function() {//Это работает
trace("Hellow, world!");
};
};
И так можно.
var i:Number = 0;
var mcName:MovieClip;
img.onPress = function() {
mcName = attachMovie("MC", "name"+i, i, {_x:_xmouse, _y:_ymouse});
i++;
mcName.onRollOver = function() {
trace("Hellow, world!");
};
//Если, нужно удалять мувик.
mcName.onRollOut = function() {
mcName.removeMovieClip();
};
};

mixery
08.06.2008, 15:50
Спасибо большое! Очень помог!