Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   передача переменной из цикла для onPress (http://www.flasher.ru/forum/showthread.php?t=98864)

die hetzer 23.07.2007 18:09

передача переменной из цикла для onPress
 
Вложений: 1
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

Цитата:

Сообщение от screamge
Ничем, только работает и вместо "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
гхм..
а зачем такой изврат то?

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

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

блин, точно =) благодарю!


Часовой пояс GMT +4, время: 20:44.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.