Форум 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)
-   -   прослушка событий для массива (http://www.flasher.ru/forum/showthread.php?t=110974)

futurator 12.04.2008 23:55

прослушка событий для массива
 
Здравствуйте, уважаемые.
А как вставить прослушку для каждого элемента массива, на предмет нажатия на него?
У меня есть массив мувиков, каждый мувик аттачится на следующую глубину в цикле. В итоге все замечательно, кроме одного момента: я не могу никак пристроить прослушку на событие onPress(). Вставлял и в onEnterFrame() и просто в цикл - не работает и все тут. Явно я где-то втупил. Подскажите пожалуйста где?
Собсна, событие onPress() должно существовать для каждого элемента.
Спасибо.

MrPoma 13.04.2008 00:15

При аттаче вешайте.
Код:

mc.onPress = function(){
 trace(this)
}


futurator 13.04.2008 00:23

Пробовал - срабатывает почему-то только последний элемент массива.
Тоесть в массиве из 20-ти элементов любой onPress() для любого элемента, всеравно трассирует нажатие на 20-ый элемент.
Тут где-то на поверхности ответ, но я уже замылил глаз, как говорится.

iNils 13.04.2008 00:28

Код покажите свой.

futurator 13.04.2008 00:50

Вот кусок кода:
Код:

var element:Array = new Array();
var N:Number = 20;
for (var i:Number = 0; i<N; i++) {
    element[i] = _root.attachMovie('plate', 'plate_'+i, i, {_x:Math.random()*Stage.width, _y:Math.random()*Stage.height});
    element[i].depth = element[i].getDepth();
//  element[i].onPress = function() { trace("COOL["+element[i]+"]"); } - так тоже не срабатывает
    trace(element[i]._name);
    eval(element[i]._name).onPress = function() {
        trace("COOL["+element[i]._name+"]"); // - так выводит "COOL[undefined]"
    };
    trace('element['+element[i]+'] depth = '+element[i].depth);
}


udaaff 13.04.2008 01:19

Код:

var element:Array = new Array();
var N:Number = 20;
for (var i:Number = 0; i<N; i++) {
    element[i] = _root.attachMovie('plate', 'plate_'+i, i, {_x:Math.random()*Stage.width, _y:Math.random()*Stage.height});
    element[i].depth = element[i].getDepth();
    element[i].i = i;
//  element[i].onPress = function() { trace("COOL[" + this.i + "]"); }
- так тоже не срабатывает
    trace(element[i]._name);
    eval(element[i]._name).onPress = function() {
        trace("COOL["+element[i]._name+"]"); // - так выводит "COOL[undefined]"
    };
    trace('element['+element[i]+'] depth = '+element[i].depth);
}


Alex Lexcuk 13.04.2008 01:21

Обязательно должен быть массив?
пример нажатия на клипаки
http://kind-armadillo.pochta.ru/fla/on_press.rar
http://kind-armadillo.pochta.ru/fla/on_press.swf

udaaff 13.04.2008 01:24

Цитата:

Обязательно должен быть массив?
Если некоторые объеты должны обладать определенными методами, лучше описать это все в классе.

Котяра 13.04.2008 01:27

нет под рукой флэша проверить.. попробуй:
Код:

var element:Array = new Array();
var N:Number = 20;
for (var i:Number = 0; i<N; i++) {
    element[i] = _root.attachMovie('plate', 'plate_'+i, i, {_x:Math.random()*Stage.width, _y:Math.random()*Stage.height});
 
_root['plate_'+i].onPress = function() { trace("COOL["+this+"]"); }

}

дело в том что когда ты вызываешь событие onPress - цикл уже закончен, соответственно i=20

futurator 13.04.2008 01:33

Спасибо, народ.
Вроде заработало. Пойду прикручивать к onPress() функцию повеселей.

2Котяра:
Цитата:

дело в том что когда ты вызываешь событие onPress - цикл уже закончен, соответственно i=20
А ежели у меня этих эелементов 100? Или 1000? Как я каждый из них проверю на onPress()? (Ctrl+C -> Ctrl+V )*1000 ??? =))))))))


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

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