Форум 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=152902)

greep 24.03.2011 16:48

Проблема с массивом.
 
У меня проблема с массивом... В руте, в первом и единственном кадре 19 кнопок (b1,b2,b3...b19) и следующий код:
Код AS1/AS2:

my_array = new Array(247, 233, 221, 208, 194, 181, 169, 155, 142, 129, 116, 104, 91, 78, 65, 52, 39, 26, 13);
for(i = 1; i<20; i++){
        this["b"+i].onRelease = function(){
                trace(my_array[_root.i+1]);
        }
}

Событие release работает нормально, но трейс выдаёт undifinded... ПОЧЕМУ?!?!

Hauts 24.03.2011 16:59

Потому, что на момент нажатия на кнопку, ваша переменная i будет иметь значение 19. А когда вы трейсите, то пытаетесь вывести my_array[20], которого не существует.

Кстати функцию onRelease можно вынести, а не дублировать.

greep 24.03.2011 18:15

2 Hauts: Да, я уже сообразил, что и в итоге 20 и такой переменной в массиве нет, но не понятно почему я не вижу в окне output все данные массива? Еще очень интересно что вы имели в виду под "вынести"? Можете пояснить? Заранее благодарен.

petyar 24.03.2011 18:39

Цитата:

Сообщение от greep (Сообщение 983529)
2 Hauts: Да, я уже сообразил, что и в итоге 20 и такой переменной в массиве нет, но не понятно почему я не вижу в окне output все данные массива?

Вы не поняли. Вы пытаетесь трейсить элемент i+1, которого не существует при нажатии на любую кнопку. А что вы собираетесь в таком случае увидеть то? Если нужна именно такая реализация, то попробуйте через имя самой кнопки, примерно так:
Код AS1/AS2:

for(i = 1; i<20; i++){
        this["b"+i].onRelease = function(){
                trace(my_array[this._name.substr(1, 2)]);
        }
}


Hauts 24.03.2011 18:45

Имя-то зачем?

Код AS1/AS2:

my_array = [247, 233, 221, 208, 194, 181, 169, 155, 142, 129, 116, 104, 91, 78, 65, 52, 39, 26, 13];
for(var i = 1; i<20; i++){
    var clip = this["b"+i];
    clip.onRelease = myClipOnRelease;
    clip.id = i;
}
function myClipOnRelease(){
    trace(this +" id="+ this.id);
}


Хотя, возможно, я вас неправильно понял.

kseniya 24.03.2011 19:13

а можно ещё вот так:
Код AS1/AS2:

my_array = new Array(247, 233, 221, 208, 194, 181, 169, 155, 142, 129, 116, 104, 91, 78, 65, 52, 39, 26, 13);
for (i = 1; i < 20; i++) {
        init(i);
}
function init(i) {
        this["b" + i].onRelease = function() {
                trace(my_array[i - 1]);
        };
}


Hauts 24.03.2011 19:30

kseniya, в вашем коде создается мнежество функций, которые будут висеть в памяти, а в моем примере — всего одна, так лучше.

greep 24.03.2011 22:22

Спасибо


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

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