Модераторы: SoWa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Команда кнопок и один обработчик 
:(
    Опции темы
BISON*
  Дата 5.12.2005, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 8.7.2003

Репутация: нет
Всего: 1



Дано
создал команду кнопок при помощи attachMovie
Вопрос
Как сделать чтобы при нажати на любую из кнопок, вызывался один обработчик, где в нем я мог бы получить имя вызвавшей кнопки?
PM MAIL WWW   Вверх
MOHCTEP
Дата 6.12.2005, 00:09 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Через ссылку, при аттаче. Ну примерно так:

// аттачим 10 кнопок
for(var i=0;i<10;i++){
var mc=this.attachMovie("linkage_name", "new_name"+i,getNextHighestDepth());
mc.onPress=oops(this)
}
function oops(mc){
trace(mc._name);
}
  Вверх
AlDev
Дата 6.12.2005, 07:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный идиотъ
***


Профиль
Группа: Участник Клуба
Сообщений: 1927
Регистрация: 17.4.2005
Где: Irk, rus

Репутация: 9
Всего: 50



вариант 1-й:

прописать в кнопке, которую аттачишь:
Код

this.onRelease = function()
{
}


вариант 2-й:
сделать наследование от MovieClip и приписать класс
Код

class myButton extends MovieClip
{
  private function onRelease():Void
  {
    //your code here
  }
}

и приписываешь as2 class для всех кнопок в библиотеке килбо извращаешься с registerClass

вариант 3-й (как написал некто MOHCTEP, только с небольшой вариацией)
функцию можно объявить таким образом:
Код

var my_f:Function = function():Void
{
  trace (this);
}
var b_1:MovieClip = this['button_instance_name'];
b_1.onRelease = my_f;

this в данном случае будет в коде функции ссылаться на b_1.

ну и ещё один вариант (из разряда маловероятного smile ), который для ActionScript 3
Код

package 
{
    import flash.display.Sprite;
    import flash.display.SimpleButton;
    import flash.display.Shape;
    import flash.events.MouseEvent;
    import flash.events.MouseEventType;
    import flash.util.trace;
    
    public class myApp extends Sprite
    {
        protected var b:myButton;
        public function myApp() 
        {
            this.b = new myButton();
            this.b.x = 60;
            this.b.y = 10;
            this.b.addEventListener(MouseEventType.CLICK,this.onButtonClick);
            this.addChild(this.b);
        }
        
        private function onButtonClick(evnt:MouseEvent):Void
        {
            trace ('onRelease called');
        }
    }
    
    private class myButton extends SimpleButton
    {
        protected var downSprite:Shape;
        protected var upSprite:Shape;
            
        public function myButton()
        {
            this.downSprite = new Shape();
            this.downSprite.graphics.lineStyle(2, 0x202020);
            this.downSprite.graphics.beginFill(0x00FF00);
            this.downSprite.graphics.drawRect(10, 10, 50, 50);
             
            this.upSprite = new Shape();
            this.upSprite.graphics.lineStyle(2, 0x202020);
            this.upSprite.graphics.beginFill(0xFFFF00);
            this.upSprite.graphics.drawRect(10, 10, 50, 50);
            
            this.upState = upSprite;
            this.overState = upSprite;
            this.downState = downSprite;
            this.useHandCursor = true;
            this.hitTestState = this;
        }
    }
}

PM MAIL WWW ICQ YIM MSN   Вверх
BISON*
  Дата 7.12.2005, 08:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 8.7.2003

Репутация: нет
Всего: 1



MOHCTEP и Alex Batsuev
Благодарю за советы, они очень помогли!!!!!! smile
Alex Batsuev
я воспользовался 3 вариантом, он очень хорошо подходит для моей реализации!!!! Все получилось!!!
PM MAIL WWW   Вверх
BISON*
Дата 12.12.2005, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 8.7.2003

Репутация: нет
Всего: 1



Возникла такая проблема,что внутри обработчика onLoad, присваивая функцию для события клика по кнопке, это событие не отрабатывается, но кнопки рисуются, а вот кнопки добавленные с символа bt1, все ОК... рисуются и обрабатывают событие замечетельно!!!!
Вообщем парадокс да и только! уперся в эту проблему, теперь думаю ее разрешить!!
DataGeo -это классы в которых все ОК!!

Код

var i=0;
var a,b,c,d,strn,num,n;
var data:Array=new Array();
var data1:Array=new Array();
var q:LoadVars=new LoadVars();
System.useCodepage=true;
function fbtn():Void {
    strn=this._name;
    a=strn.split("n");
    num = parseInt(a[1]);
    tf.htmlText = data[num].name;
    trace("addsdsd");
}


q.onLoad=function(success:Boolean) {
    if (success) {
        n=parseInt(q.count)-1;
        for (i=0;i<=n;i++) {
            attachMovie("bt","bn"+i,getNextHighestDepth());
            a=q["k1"+i].split(",");
            setProperty("bn"+i, _x, i*30);
            setProperty("bn"+i, _y, 100);
            this["bn"+i].onRelease=fbtn;
            b=q["k2"+i].split(",");
            c=q["tf1"+i].split(",");
            d=q["tf2"+i].split(",");
            data[i]=new DataGeo1(q["cid"+i],q["content"+i],q["name"+i],a[0],a[1],b[0],b[1],c[0],c[1],c[2],c[3],d[0],d[1]);
            trace(data[i].cid+"/"+data[i].name);
        }
    } else {
        trace("Error loading/parsing LoadVars.");
    }
}
q.load("http://.....", q, "GET");
//---
for(i=0;i<=10;i++){
    attachMovie("bt1","btn"+i,getNextHighestDepth());
    setProperty("btn"+i,_x,i*30);
    setProperty("btn"+i,_y,30);
    data1[i]=new DataGeo("nameCity"+i,i);
    this["btn"+i].onRelease=fbtn;
}


Буду рад любым предположениям, почему это не работает!!
PM MAIL WWW   Вверх
BISON*
Дата 14.12.2005, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 8.7.2003

Репутация: нет
Всего: 1



Мне удалось разрешить эту проблему, сделав что после прохода цикла я вызываю функцию, которая всем приатаченым кнопкам присваивает обработчик события!!!!!
но все таки непонятно, почему внутри того цикла не присваивалась функция обработки? (это так и осталось тайной smile )
PM MAIL WWW   Вверх
AlDev
Дата 14.12.2005, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный идиотъ
***


Профиль
Группа: Участник Клуба
Сообщений: 1927
Регистрация: 17.4.2005
Где: Irk, rus

Репутация: 9
Всего: 50



Цитата
.onLoad=function(success:Boolean) {
    if (success) {
        n=parseInt(q.count)-1;
        for (i=0;i<=n;i++) {
            attachMovie(


удивительно, что это вообще работало.
q - объект класса loadVars. ты перегружаешь метод этого класса, следовательно ссылка на this будет ссылкой на q. А потом ты используешь методы MovieClip. не указывая ни пути, ни чего-либо ещё. Как это вообще могло работать?
и вообще много замечаний по коду. например зачем объявлять переменные в movieClip-е если они используются только в методе?

Код

System.useCodepage=true;

var q:LoadVars=new LoadVars();
var ths:MovieClip = this;

function fbtn():Void 
{
    trace ('onRelease called for '+this);
}
q.onLoad=function(success:Boolean) :Void
{
    if (success) 
    {
        var n:Number = parseInt(this.count)-1;
        var i:Number;
        var tmp_mc:MovieClip;
        for (i=0;i<=n;i++) 
        {
            tmp_mc = ths.attachMovie("bt","bn"+i,ths.getNextHighestDepth());
            tmp_mc._x = i*30;
            tmp_mc._y = 100;
            tmp_mc.onRelease = fbtn;
        }
    } else 
    {
        trace("Error loading/parsing LoadVars.");
    }
}
q.load("http://.....", q, "GET");

PM MAIL WWW ICQ YIM MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Flash"
AlDev
SoWa
  • Если вы хотите предложить кому-либо работу, то пишите или в личку, или оставляйте сообщения в специально предназначеном для этого форуме "Объявления о найме специалистов"
  • Один вопрос - одна тема. Не надо переходов от одного вопроса к другому.
  • Если вы хотите показать какой-нибудь ваш мульт, причём показать, а не предоставить исходник, то вам сюда
  • Вопросы про программирование на ActionScript 1,2 (Flash 8 и более ранние версии) пишите в форуме ActionScript 1,2
  • Вопросы по разработке интернет-приложений на Flex и вопросы по MXML пишите в раздел Flex
  • Смотрим в будущее. ActionScript 3 обсуждается в форуме ActionScript 3
  • Новости из мира Flash.
  • New! [code=ascript][/code] - подсветка ActionScript + wikipedia help

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, AlDev, SoWa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Flash | Следующая тема »


 




[ Время генерации скрипта: 0.0591 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.