PDA

Просмотр полной версии : передача переменной из цикла для onPress


die hetzer
23.07.2007, 18:09
hi all!
помогите советом, кто может.

на сцене 3 кнопки (button1, ..2, ..3)
нужно чтобы каждая кнопка выводила разный trace (0, 1, 2)

не работает (trace выводит на каждой кнопке "3")
loadInfo = function(a) {
trace(a)
}

for (var i=0; i<3; i++) {
_root["button"+i].onPress = function() {
loadInfo(i);
}
}


работает, но решение, чувствую, кривое
loadInfo = function(a) {
trace(a)
}

for (var i=0; i<3; i++) {
_root["button"+i].i = i;
_root["button"+i].onPress = function() {
loadInfo(this.i);
}
}


исходник

BigDan
23.07.2007, 18:13
Решение самое, что есть не кривое

screamge
23.07.2007, 18:19
for (var i=0; i<= 3; i++) {
_root["button"+i]._id = i
_root["button"+i].onPress = function (){
trace (this._id)
}
}

die hetzer
23.07.2007, 18:24
screamge, спасибо. я заменил i на _id но суть таже

etc
23.07.2007, 18:25
screamge, а чем твое решение отличается от второго кода в первом посте?

Вообще, если хочется извратиться, то можно так:

loadInfo = function(a) {
trace(a)
}

for (var i=0; i<3; i++) {
var btn = _root['button'+i];
btn.onPress = function() {
loadInfo(Number(this._name.substr(6)));
}
}

die hetzer
23.07.2007, 18:26
__etc, ага я тоже об этом думал)

screamge
23.07.2007, 18:47
Ничем, только работает и вместо "i" написанно "id" :) вот и всё)).

etc
23.07.2007, 18:53
Ничем, только работает и вместо "i" написанно "id" :) вот и всё)).
Замечательно :D
Ещё тем, что у тебя «<=», а не «<»…

screamge
23.07.2007, 18:55
вот уже три отличия нашли ))))))


screamge, спасибо. я заменил i на _id но суть таже


Ок, я на авторство кода и не претендовал :D

Cкептик
23.07.2007, 21:20
Ведь последняя кнопка тогда ничего не выдает. Зачем такое извращение? :)

BARTLEBY
23.07.2007, 23:28
гхм..
а зачем такой изврат то?
если кнопок всего три то вот этот код самый что не наесть нормальный =)

btn1.prop = 1;
btn2.prop = 2;
btn3.prop = 3;
btn1.onPress = Press;
btn2.onPress = Press;
btn3.onPress = Press;
//если их много и у каждой свой номер то...
for (var i = 0; i<20; i++) {
this.attachMovie("btn", "btn"+i, i);
btn[i].onPress = Press;
btn[i].prop = i
}
// если кнопки уже на поле и их нужно перебрать то
n = 0
for (var btn in this) {
if (this[btn] instanceof Button) {
this[btn].onPress = Press;
this[btn].prop = n
n++
}
}
function Press() {
trace(this.prop);
}

screamge
24.07.2007, 01:39
гхм..
а зачем такой изврат то?

Это вы тот что до вашего варианта предложен был извратом называете?

BARTLEBY
24.07.2007, 02:24
screamge
да

etc
24.07.2007, 07:40
А по-моему как раз наоборот, последний вариант — редкостный и неочевидный изврат.

BARTLEBY
24.07.2007, 17:09
for (var i =0; i<2; i++){
this['btn'+i].prop = i
this['btn'+i].onPress = Press;
}
function Press() {
trace(this.prop);
}

вот тоже самое в цикле.
где тут изврат и чем этот код хуже вашего???

etc
24.07.2007, 17:19
Оно уже ничем не лучше, а тоже самое.

screamge
24.07.2007, 17:20
Теперь будем искать различие и в этом примере?!))

CrazyFlasher
27.07.2007, 19:59
короче переклинило:

на сцене 35 кнопок: btn1...btn35

как описать циклом:

btn1.onPress = function(){
trace(btn1)
}

ваши способы увы не пашут =)

etc
27.07.2007, 20:02
for (i = 1;i < 36;i++) {
var btn = this['btn'+i];
btn.onPress = function() {
trace(this);
}
}
delete btn;

CrazyFlasher
27.07.2007, 20:04
блин, точно =) благодарю!