PDA

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


Flash_nooob
12.09.2008, 15:53
Чет совсем завис, поскажите если не трудно..
суть: есть 60 кнопок и 60 лампочек, нажатием на 1 кнопку надо зажечь 1 лампочку, и так собсно все 60...
for (i=0;i<61;i++)
{
r = _root['BTN'+i]
r.onPress = function()
{
что тут должно быть?.gotoAndStop(2);
}
}
как получить эту i?

etc
12.09.2008, 16:15
Поискать на форуме решение.

Flash_nooob
12.09.2008, 16:35
угу.. спс... ценный ответ, естественно искал, но не нашел.
к слову просьба начиналась с "поскажите если не трудно..".
сомнительно что решение данной штуки много больше фразы "поискать решение на форуме". В общем еще раз - если не трудно подскажите =)

Волгоградец
12.09.2008, 17:02
Понимаю __etc - 22 тысячи сообщений и из них наверное 1000 по теме "как обратиться к клипу"...
Автору: только вчера эта тема обсуждалась
http://www.flasher.ru/forum/showthread.php?t=115822

Flash_nooob
12.09.2008, 17:22
видел эту тему.. пример загроможден в итоге ничего не понятно, специльно простой пример привел тут чтоб принцип понять. ладно, значит буду продолжать сидеть и постигать методом тыка =(

Волгоградец
12.09.2008, 17:53
for (var i:Number = 0; i < 5; i++){
var but:MovieClip = this.attachMovie("but", "but"+i, this.getNextHighestDepth(), {_x: 50 + (i * 50), _y: 50});
var lamp:MovieClip = this.attachMovie("lamp", "lamp"+i, this.getNextHighestDepth(), {_x: 50 + (i * 50), _y: 100});
lamp.stop();
but.onPress = function():Void{
var n:Number = Number(String(this).substring(11,12));
this._parent["lamp"+n].gotoAndStop(this._parent["lamp"+n]._currentframe%this._parent["lamp"+n]._totalframes + 1);
}
}
Ну или:
for (var i:Number = 0; i < 5; i++){
var but:MovieClip = this.attachMovie("but", "but"+i, this.getNextHighestDepth(), {_x: 50 + (i * 50), _y: 50, _id:i});
var lamp:MovieClip = this.attachMovie("lamp", "lamp"+i, this.getNextHighestDepth(), {_x: 50 + (i * 50), _y: 100});
lamp.stop();
but.onPress = function():Void{
this._parent["lamp"+this._id].gotoAndStop(2);
}
}

Flash_nooob
12.09.2008, 18:20
а, т.е. от полученного имени отрезаем буквы.. спасибо, очень любопытный пример))

Wolsh
12.09.2008, 18:23
В Вашем варианте просто
for (i=0;i<60;i++)
{
r = _root['BTN'+i]
r.id = i;
r.onPress = function()
{
_root['lamp'+this.id].gotoAndStop(2);
}
}

MrPoma
12.09.2008, 18:25
есть 60 кнопок и 60 лампочек
for (i=0;i<61;i++)Опредилитесь уж, 60 илии 61 :)

Flash_nooob
12.09.2008, 18:43
В Вашем варианте просто
for (i=0;i<60;i++)
{
r = _root['BTN'+i]
r.id = i;
r.onPress = function()
{
_root['lamp'+this.id].gotoAndStop(2);
}
}
собсно этот метод я и пытался использовать - получить конкретную i при нажатии соответсвующей кнопки, к сожалению ничего не получилось. Ура=)) в принципе метод Волгоградца вполне рабочий, однако нумирацию в его методе придется делать вида 01, 02... если нужны i до 99 что не совсем устраивает. Тем не менее мысль обрезать имя до цифры давно мну терзала в другом проекте, а в хелпе на подобное не натыкался)) так что очень ценный пост =)
Опредилитесь уж, 60 илии 61
да это собсно не важно) там индикаторов свыше 500 и флэшка будет управляться не кнопками а внешними командами.. естественно вешать отлов события для каждого идикатора нету ни малейшего)) просто нужно было понять принцип получения ентого i =)

В любом случае всем огромное спасибо за участие.

skald
12.09.2008, 18:43
там просто равно поставить надо <=60

Волгоградец
12.09.2008, 18:48
Первый метод - это шутка (такая вот программистская шутка). Так делать не надо. Во втором варианте я сделал то же, что предложил Wolsh - это то, как надо делать.

NoCD
13.09.2008, 03:44
оператор for выполнится один раз. И я не думаю, что ты успеешь за это время нажать на какую нибудь кнопку, прежде, чем оператор for закончит свою жизнь. И в конце цикла for всегда будет максимальное значение условия, то есть i=60

в for лучше создавать либо формировать запрос.
А обрабатывать такие запросы в обработчике событий, например onEnterFrame, а можно и в функции


Вот пример на функциях:

var number:Number=0
var number2:Number=0
for(i=0;i<=10;i++)
{for(j=0;j<=10;j++)
{number++
name="button"+number
attachMovie("button",name,_root.getNextHighestDepth())
_root[name]._x=30*i+30
_root[name]._y=30*j+30
buttons(_root[name],number)
}}

for(i2=0;i2<=10;i2++)
{for(j2=0;j2<=10;j2++)
{number2++
name2="lamp"+number2
attachMovie("lamp",name2,_root.getNextHighestDepth())
_root[name2]._x=30*i2+400
_root[name2]._y=30*j2+30
_root[name2].gotoAndStop(1)
}}

function buttons(ind,step_ind)
{ind.onPress=function()
{name3="lamp"+step_ind
_root[name3].gotoAndStop(2)
}}

где:
button - имя MovieClip (будущие кнопки)
lamp - имя MovieClip (будущие лампочки)
Мувиклип lamp содержит в себе два клипа на кадрах
1. Изображение выключенной лампы (этом кадре прописать stop())
2.Изображение включенная лампа

собственно вот так.


for (i=0;i<60;i++)

что бы получить конечную i=60,а не i=61, нужно поставить в условиях равно, то есть дожно получиться вот так: <=

MrPoma
13.09.2008, 18:01
что бы получить конечную i=60,а не i=61, нужно поставить в условиях равно, то есть дожно получиться вот так: <=Конечная i = 60, а итераций будет 61, так что ставить нужно <, а не <=.
var a:Array = new Array();
for(var i:int; i <= 60; i ++){
a.push(i);
}
trace(a.length)

NoCD
14.09.2008, 00:44
Цитата:
Сообщение от NoCD
что бы получить конечную i=60,а не i=61, нужно поставить в условиях равно, то есть дожно получиться вот так: <=

Конечная i = 60, а итераций будет 61, так что ставить нужно <, а не <=.


здесь я приводил пример, что бы получить нужное значение на выхлопе, то есть мне надо 60 получить, то я пишу <=

Wolsh
14.09.2008, 01:16
"Пока i<=60" здесь абсолютно то же самое, что и "пока i<61"
Тоесть 61 итерация. В большинстве случаев это может иметь серьезные последствия.