PDA

Просмотр полной версии : идентификация кнопки


goras
25.09.2008, 20:27
доброго времени суток!
проблема: из массива кнопок одна нажата, требуется определить которая и использовать ее номер в дальнейшем. Единственное, до чего додумался это что-то вроде этого:
for (a=0; a<10; a++) {
this.attachMovie("kn", "kn"+a, a);
this["kn"+a]._y = a*30;
this["kn"+a].onPress = function() {
b=String(this).substr(10)
};
}
this.attachMovie("kn", "knn", 100);
knn._x = 500;
knn.onPress = function() {
trace(b);
};
но появилась другая проблема: при подгружении фильма в другой клип, название кнопки меняется и, естественно, длина этого названия тоже...
подскажите, пожалуйста:(

Wolsh
25.09.2008, 20:44
Ну во-первых, имя не изменится. Это меня дома зовут Вадя, а после помещения в офис - Вадим Юрьевич. А кнопка как была kn1, так и останется. Только резать тогда уж надо имя, то есть this._name
а вообще это очень плохая практика!
Нормальной практикой является сохранить нужный параметр как собственное свойство кнопки (или клипа)
for (a=0; a<10; a++) {
var knop:MovieClip = this.attachMovie("kn", "kn"+a, a);
knop._y = a*30;
knop.ID = a;
knop.onPress = function() {
b=this.ID
};
}
this.attachMovie("kn", "knn", 100);
knn._x = 500;
knn.onPress = function() {
trace(b);
};

iNils
25.09.2008, 21:01
Для оформления своего кода, надо использовать теги .

var b:Number = null;
for (var a:Number = 0; a < 10; a++) {
var mc:MovieClip = this.attachMovie ("kn", "kn" + a, a);
mc._y = a * 30;
mc.b = a;
mc.onPress = function () {
b = this.b;
};
}
this.attachMovie ("kn","knn",100);
knn._x = 500;
knn.onPress = function () {
trace (b);
};

dimarik
25.09.2008, 21:01
как-то так я бы сделал
var app:Object = this;

var arrayKnopok:Array = new Array();

function whatKnopkaIsPressed(mc:MovieClip):Void {
trace('knopka ' + mc + ' was pressed and it index is: ' + mc.num);
var pressedKnopaIndex:Number = Number(mc.num);
// some your code here like
// this.arrayKnopok[pressedKnopaIndex]
}

for (var i:Number = 0; i < 10; i++) {
this.attachMovie("kn", "kn" + i, i);
this["kn"+i]._y = i * 30;
this.num = i;
this["kn" + i].onPress = function() {
app.whatKnopkaIsPressed(this);
};
}

goras
25.09.2008, 21:08
спасибо! Я как-то не пользовался свойством этим и подзабыл его...
кнопки - это клипы, я неправильно выразился.А Используйте клипы, они могут запоминать заданные свойства. Например, ID. как тут применить?

goras
25.09.2008, 21:13
Всем большое спасибо!!!

dimarik
25.09.2008, 21:14
Wolsh, у тебя лучше получается. Объясни человеку что свойство ID ты сам придумал, так же как и я придумал свойство num.

Кстати, не знаю, насколько это считается "нормальной" практикой, но я бы сделал подкласс от MovieClip и ввел бы свойство ID. Dymanic классы зло. Последнее, естессна, относится к AS2.

UPDATE
Не успел =). goras, Вы быстрее поняли.

Wolsh
25.09.2008, 21:24
Ну, dimarik, Вы всерьез полагаете что goras будет прям щас писать класс?)))) Пусть потренируется пока.
Посмотрел бы я на флэш AS2 без динамического класса МувиКлип))))))) Хотя не, не стал бы я на эту гадость смотреть.

goras
25.09.2008, 21:44
до классов я пока не дошел... но все еще впереди, а код потребовался для http://gorasoft.com.ru/kostroma

dimarik
25.09.2008, 21:53
Посмотрел бы я на флэш AS2 без динамического класса МувиКлип))))))) Хотя не, не стал бы я на эту гадость смотреть.

Нормально бы посмотрел на нединамический класс MovieClip в AS2. Кстати, всегда есть способ обратиться к свойству не через дотнотэйшн: this['property']

Mur4ik
01.10.2008, 02:56
Хоть и не совсем по теме, но раз уж здесь затронули...
В чем именно "зло" динамических классов, а то в литературе это не раз уже встречал, вот только нигде не разъясняется почему лучше их избегать?

AL.exe
01.10.2008, 03:00
Ошибок больше можно допустить, память под динамические классы выделяется тоже динамически, что не есть хорошо.