Форум 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)
-   -   Динамическое создание функций в AS2 (http://www.flasher.ru/forum/showthread.php?t=131836)

point111 29.10.2009 13:19

Динамическое создание функций в AS2
 
Есть массив клипов, который создается динамически, хочется, чтобы процедуры реакции на нажатие каждого клипа тоже генерировались автоматически.
Т.е.:
Код AS1/AS2:

box[0].onRelease = function () {release_fn (0);};
box[1].onRelease = function () {release_fn (1);};
box[2].onRelease = function () {release_fn (2);};
box[3].onRelease = function () {release_fn (3);};
box[4].onRelease = function () {release_fn (4);};
box[5].onRelease = function () {release_fn (5);};
box[6].onRelease = function () {release_fn (6);};


замениь на что-то типа:
Код AS1/AS2:

// не рабочий код
        for (i=0; i<=totalSlides; i++){
                box[i].onRelease = function () {release_fn (i);};
                }

исходник для ковыряния:
http://dddcenter.narod.ru/15/15.zip

lexa2000lexa 29.10.2009 13:35

вот
Код AS1/AS2:

        for (i=0; i<=totalSlides; i++){
this["box"+i].id= i;       
this["box"+i].onRelease = function () {release_fn (this.id);};
                }

так

iNils 29.10.2009 13:37

не так.
1. i общее
2. множество копий одной функции

поэтому так (при условии, что box массив, иначе this["box" + i])
Код AS1/AS2:

for (var i:Number = 0; i < 7; i++) {
        box[i].i = i;
        box[i].onRelease = sample;
}
 
function sample () {
        release_fn (this.i);
};


lexa2000lexa 29.10.2009 13:40

а можно вопрос к iNils ? что вот это значит
Код AS1/AS2:

box[0]


point111 29.10.2009 14:23

iNils, спасибо!

lexa2000lexa, не прикалывайся, ну ошибся человек, надо

Код AS1/AS2:

box[i].i = i;
box[i].onRelease = sample;

главное смысл - каждому клипу дается переменная "i", и вот она будет отправляется в "release_fn", а не номер итерации

lexa2000lexa 29.10.2009 14:33

да каие приколы ,мне даже не понятна вот эта канструкция
Код AS1/AS2:

box[i].i

она ведь недолжна работать. либо она должна работать при условии существования клипа box а уже в нем клипы 1-7, но такого не может быть так как флешь не позволяет название клипов числами. Может я просто чегото не знаю , вот поэтому и спрашиваю.

point111 29.10.2009 14:48

в первой мессаге я выложил рабочий исходник пятнашек, именно из него взяты фрагменты кода, которые здесь обсуждаются.
Общий смысл такой:
1. создаем массив "box"
2. создаем клип и запихиваем его в первый элемент массива
Код AS1/AS2:

        box[a] = this.createEmptyMovieClip ("bx" + a, -16000 + a);
        this["bx" + a].createEmptyMovieClip ("xxx",0);
        box[a].xxx.loadMovie ("pic" + (1 + a) + ".jpg");

теперь совершенно безразлично, что созданный клип называется "bx" , и что в него вложен другой клип "xxx", (в который я загружаю картинки - ), теперь я обращаюсь к нему как к элементу массива

Цитата:

мне даже не понятна вот эта канструкция
Код AS3:

box[i].i = i;
box[i].onRelease = sample;

можно заменить на
Код AS3:

for (var i:Number = 0; i < 7; i++) {
        box[i].iii = i;
        box[i].onRelease = sample;
}
 
function sample () {
        release_fn (this.iii);
        trace (this.iii)
};


тебя наверно сбило с толку имя "i" после точки, и ты приравнял его к номеру итерации - но, оно может быть любым

lexa2000lexa 29.10.2009 15:31

Нет меня ни это смутило, просто я думал что box это клип а не массив , а так тогда все понятно.


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

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