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

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

Для оформления своего кода, надо использовать теги [code][/code].

Код:

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

Цитата:

Сообщение от Wolsh (Сообщение 766425)
Посмотрел бы я на флэш AS2 без динамического класса МувиКлип))))))) Хотя не, не стал бы я на эту гадость смотреть.

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

Mur4ik 01.10.2008 02:56

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

AL.exe 01.10.2008 03:00

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


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

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