PDA

Просмотр полной версии : Как грамотно создать событие release n - ому количеству кнопок, созданных программно?


Hak
02.02.2007, 07:51
КАК СДЕЛАТЬ ТАКОЕ?

CorC
02.02.2007, 10:18
у меня есть такая функция InitButton
параметры меняющиеся:
имя, текст на кнопке, функция на onRelease, выравнивание, далее много др параметров
внутри там много всего чего то понаписано :)
но все работает и я на нее не жаловался еще :)

lowka
02.02.2007, 11:10
1. Написать класс кнопки + использовать в нем EventDispatcher для генерации событий. Экземплярам класса добавлять необходимые обработчики addEventListener'ом.
2. Или так:

//или любой подобный класс, а таких много.
import com.bigspaceship.utils.Delegate;

//массив кнопок.
var buttons:Array = new Array();

...
//создаем кнопки.
...

//обработчик.
function onButtonRelease(id:Number):Void {
trace(id);
}

//назначаем onRelease.
for(var i:Number=0; i<buttons.length; i++){
var button:MovieClip = buttons[i];
button.onRelease = Delegate.create(this, this.onButtonRelease, i);
}

Improved Delegate (com.bigspaceship.utils.Delegate) (http://labs.bigspaceship.com/blog/?p=9)

Hak
04.02.2007, 18:23
Lowka, честно говоря не совсем понял:-D, поясни. У меня программно создается <k> кнопок с именами btn_1, btn_2 ... btn_<k>.

Hak
12.02.2007, 15:09
у меня не получается!

Мыкыта
12.02.2007, 15:58
в луппе прописываешь

name = "btn_"+k;
this[name].onRelease = function () {
// bla bla
}
// и т. д.

Tipon
12.02.2007, 17:43
в луппе прописываешь
name = "btn_"+k;
this[name].onRelease = function () {
// bla bla
}
// и т. д.

А по подробнее про лупп, если можно?

Я так и не понял =) как быть, если надо каждой кнопке в цикле присвоить выполнение кода, отличающегося на тот же параметр k, который и определяет имя кнопоки?
Если не трудно, кто-нибуть плз напишите пример по подробнее.

CorC
12.02.2007, 18:38
http://flasher.ru/forum/showthread.php?t=91829
топик не про то
но смысл того что надо, и почему не работает я раскрыл...
поменять там код 10 секунд в цикле (лупе)

Мыкыта
12.02.2007, 19:19
Tipon
воощем так =)) есть кнопка с именем допустим item пихуем ее в контент (тоесть в мувик)
далее можно навесить на мувик контент можно просто в тайм лайне допусти на мувик вешаем код:

onClipEvent (load) {

space = this.item._height + 2 // растояние на которые сдвигаем дубликат
i = 0
while (++i<20) // делаем 20 кнопок
{
name = "item"+i; // имя дубликата кнопки
this.item.duplicateMovieClip(name, i);
this[name]._y = space*i;
this[name].onRelease = function () { // к каждой кнопке присоединяется функция onRelease
}
}
}

CorC
12.02.2007, 19:21
и если в том релизе будет i то ничего хорошего не выйдет :)

Tipon
12.02.2007, 19:46
хех.. оказалось всё решается проще, чем я мог только себе представить.
Спасиб CorC !)

Hak
19.02.2007, 00:11
Спасибоя я разобрался!! сделал так

for (i=1; i<k; i++) {
eval("btn_"+i).onRelease = function () {
//c помощью this._name получю какая кнопка нажата и дальше без проблем
}
}

etc
19.02.2007, 03:14
eval — зло устаревшее.

Hak
21.02.2007, 23:49
Значит лучший вариант это this[]?

etc
21.02.2007, 23:54
В сочетании со ссылками — да.

Hak
22.02.2007, 00:08
Вот галерея которая получилась.