PDA

Просмотр полной версии : OnRelease в цикле


atran
30.10.2007, 10:56
Здравствуйте. Столкнулся с интересной проблемой - не задается действие onRelease в цикле. Все происходят в мувике lv. Динамически создается мувиклип, в нем динамической текстовое поле, заносятся значения в несколько массивов (ранее созданных), присваивается действие при нажатии на мувиеклип. Но вот проблема в том что при исполнее действия trace - всегда (на всех мувиках) выдается число 12 (то есть общее кол-во элементов массива + 1 - то есть как бы последнее число а),а по задумывалось что бы при нажатии выдавался a - элемента. Как решить эту проблему?

Элемент кода

...
for (var a:Number = 1; a<=Number(lvlname.length); a++) {
lv.createEmptyMovieClip("but"+a, lv.getNextHighestDepth());
lv["but"+a].createTextField("qwe"+a, a, 0, 0, 400, 140)
lv["but"+a]._x = 50;
lv["but"+a]._y = th;
lv["but"+a].onRelease = function() { trace(a); }
if (a == lvlname.length) {
lv["but"+a]["qwe"+a].text = a+". Итого - "+total;
} else {
if (!lvlpoint[a]) {
lvlpoint[a] = 0;
}
total += Number(lvlpoint[a]);
lv["but"+a]["qwe"+a].text = a+". "+lvlname[a]+" - "+lvlpoint[a];
if (lvlpoint[a] == 0) lv["but"+a]["qwe"+a].setTextFormat(rstat);
else lv["but"+a]["qwe"+a].setTextFormat(stat);

}
th += 20;
}
}
...



rstat и stat это разные текстовые стили.

CorC
30.10.2007, 11:02
Правильно что задается length+1, ведь "a" такой и станет.
Нажатие же произойдет после цикла...
Есть выход в цикле заводить переменную в клипе = а и потом при релизе от неё плясать...

atran
30.10.2007, 11:08
то есть действие нажатия вытащить из цикла и задавать переменную забитую в цикле ... но тут возникает проблема - если кол-во элементов массива возрастет придеться переписывать код,а точнее добавлять действия "при нажатии" на каждый клип - так как динамически опять придеться вызывать через a

То есть

lv["but"+a].numv = a;
lv["but"+a].onRelease = function() { trace(lv.but1.numv); }

будет работать, а



lv["but"+a].numv = a;
lv["but"+a].onRelease = function() { trace(lv["but"+a].numv); }

нет

udaaff
30.10.2007, 11:18
lv["but"+a].numv = a;
lv["but"+a].onRelease = function() {
trace(this.numv);
};

atran
30.10.2007, 11:20
Большое спасибо за помощь! Совсем забыл про this.

Infectedcell
30.10.2007, 12:46
а так? =)

var mc:MovieClip = lv["but"+a]
mc.onRelease = function() {
trace(this);
};

Mr. Fixit
30.10.2007, 12:54
и че?
обычная замена.. тоже самое, что:

var mc:MovieClip = a;
a.onPress = ...

BARTLEBY
05.11.2007, 04:54
я бы сделал всё проще

for(var i=0; i<len;i++){
var t:MovieClip = lv.createEmptyMovieClip("but"+a,lv.getNextHighestDepth());
t.createTextField("qwe"+a, a, 0, 0, 400, 140)
t.onPress = Press;
t.num = i
}
function Press(){
trace(this.num)
}