Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как передать функции-слушателю, какой либо параметр? (http://www.flasher.ru/forum/showthread.php?t=144491)

alexes 13.09.2010 19:57

Как передать функции-слушателю, какой либо параметр?
 
Вот собственно и вопрос. Как передать функции-слушателю, какой либо параметр?

i.o. 13.09.2010 20:20

воспользуйтесь поиском по разделу

etc 13.09.2010 20:56

alexes, вместе с событием.

Tr1te 13.09.2010 23:09

Как вариант, своего слушателя написать:

Класс слушателя:
Код AS3:

package {
 
        import flash.events.*;
 
        public class EventWithParam extends Event {
 
                private var SavedEventParam;
 
                public function EventWithParam(EWP_EventType:String,EWP_EventParam) {
                        super(EWP_EventType,true,false);
                        SavedEventParam=EWP_EventParam;
                }
 
                public function get EventParam() {
                        return SavedEventParam;
                }
        }
}

Пример отправки и приема:
Код AS3:

package {
        import flash.display.*;
        import flash.events.*;
 
        public class Main extends Sprite {
                //---------------------------------------------------------------------------
 
                //---------------------------------------------------------------------------
                public function Main():void {
                        addEventListener("Event",func);
 
                        var id:int=54;
                        dispatchEvent(new EventWithParam("Event",id));
                        //Если надо передать несколько параметров я передаю массив или объект.
                        var A:Array=[id,id+4,id+44];
                        dispatchEvent(new EventWithParam("Event",A));
 
                }
                //---------------------------------------------------------------------------
 
                //---------------------------------------------------------------------------
                //Эта функция получает параметр.
                private function func(e:EventWithParam) {
                        trace("Event param = ",e.EventParam);
                }
                //---------------------------------------------------------------------------
 
                //---------------------------------------------------------------------------
        }
}


etc 13.09.2010 23:14

Tr1te, за подобный код, вообще говоря, руки отрывают по пояс.

Psycho Tiger 13.09.2010 23:31

Цитата:

Сообщение от etc (Сообщение 935662)
Tr1te, за подобный код, вообще говоря, руки отрывают по пояс.

Я кстати всё чаще вижу темы с вопросом - как передать массив в слушатель и всякие реализации. Это похоже на моду )

Или тебя смущает отсутствия остальных параметров в событии, переопределенного клона, отсутствие констант под событий, отсутствие типизации, несоответствие конвенции и странно названный аксессор в событии? =D

etc 13.09.2010 23:34

Цитата:

Сообщение от Psycho Tiger (Сообщение 935665)
Я кстати всё чаще вижу темы с вопросом - как передать массив в слушатель и всякие реализации. Это похоже на моду )

Дело даже не в самом подходе, больше в реализации оного. И то и другое — убого.

Tr1te 14.09.2010 00:14

Покажите лучше вариант. Я с удовольствие поучусь. А если нет альтернатив, то буду писать так.

mikhailk 14.09.2010 00:16

alexes,
я так понимаю, что этот топик является де-факто продолжением соседнего топика "Не срабатывает цикл.".

Если хотите сделать правильно, сделайте, как я предложил (постинг с тремя пунктами в нижней части первой страницы). Все данные кладем внутрь объекта-бутылки, получаем потом событием.

Если хотите сделать неправильно, но быстро, то можете передать индекс выбранной бутылки через имя объекта-бутылки. Т.е., при создании бутылки присвоить ей индекс в имени, а в слушателе его прочитать.

Код:

  bottleObj.name = i;      // присвоили имя-индекс
  bottleObj.addEventListener(MouseEvent.MOUSE_DOWN,bottleSelected);

  private function bottleSelected(e:Event) : void
  {
    var iBottle:int = int(e.target.name);    // прочитали индекс бутылки
    trace(iBottle);
  }

Но я лично так делать НЕ РЕКОМЕНДУЮ.

Добавлено через 1 минуту
Tr1te,

Код AS3:

package 
{
    import flash.events.Event;
 
    public class AppEvent extends Event
    {
 
        public function AppEvent(type:String, body:Object, bubbles:Boolean = false, cancelable:Boolean = false)
        {
            _body = body;
            super(type, bubbles, cancelable);
        }
 
        override public function clone():Event
        {
            return new AppEvent(type, body, bubbles, cancelable);
        }
 
        protected var _body:Object;
 
        public function get body():Object { return _body; }
    }
 
}


Tr1te 14.09.2010 00:27

mikhailk, поясните пожалуйста.
Чем отличается?
Параметры bubbles, cancelable задаются через конструктор, безусловно правильней - учту.
Клон функция, ну это уже бонус. Можно дописывать, что угодно. Полагаю, что это не влияет на отрывание рук.
А что еще может влиять на отрывание рук?


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

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