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

sasha88886 01.07.2013 21:46

как передать значение в функцию прослушивателя
 
Здравствуйте
Подскажите пожалуйста как передать значение в функцию прослушивателя. Тоесть я назначаю прослушиватель
Код AS3:

timer[i].addEventListener(TimerEvent.TIMER,func_timer);
timer[i].start();

потом функция прослушивателя

Код AS3:

function func_timer(event:TimerEvent){
}

как мне в функцию передать еще одно значение например вот так
Код AS3:

function func_timer(event:TimerEvent,my_value){
}

Просто как в AS2 не работает
Код AS3:

timer[i].addEventListener(TimerEvent.TIMER,func_timer,22);
timer[i].start();


chamele0n 01.07.2013 22:04

Код AS3:

package {
        import flash.utils.Timer;
 
    public class ttimer extends Timer  {
 
                private var tval:Number = 0;
 
        public function ttimer(delay:Number, count:int = 0, val:Number = 0) : void {
                        super(delay, count);
                        tval = val;
        }
 
                public function get value() : Number {
                        return tval;
                }
    }
}


Код AS3:

var tt:ttimer = new ttimer(1000, 0, 22);
tt.addEventListener(TimerEvent.TIMER, func_timer);
 
function func_timer(e:TimerEvent) : void {
        var timer:ttimer = e.target as ttimer;
        trace(timer.value);                          // 22
}


Babylon 01.07.2013 23:21

1.Классы принято писать с Большой буквы
2. Принято наследоваться от Event и передавать объект (Ttimer)в качестве параметра расширенного класса

caseyryan 01.07.2013 23:42

Цитата:

Подскажите пожалуйста как передать значение в функцию прослушивателя. Тоесть я назначаю прослушиватель
Никак. В данном случае.
Чтобы иметь возможность передать туда что-то свое, нужно будет:
Во первых расширить класс Timer и использовать вместо родного таймера свой. И во-вторых в этом классе по тику посылать собственное событие, как написал Babylon

Но скорее всего, здесь можно обойтись без это. Зачем вам нужно передавать туда какой-то параметр, и какой именно?

Babylon 01.07.2013 23:56

Не надо извращать мою мысль :). Я предлагал расширить Event, но не предлагал посылать собственных событий.TimerEvent вполне себе событие.

Добавлено через 1 минуту
И передать значение в функцию конечно можно, но это хак.

Добавлено через 4 минуты
Как то так. Класс (type : String, timer:Ttimer, bubbles : Boolean = false, cancelable : Boolean = false)

Koopa 02.07.2013 02:02

А у вас тут весело.Не нравиться скриптовый язык-перепишем. Удачи вам ребят! Особенно в переписывании.
P.S.По теме: Функция прослушивателя принимает только переменные и методы события.

Babylon 02.07.2013 02:35

Непонятна ваша веселая ирония. Наследование вполне стандартный прием в таких случаях.

sasha88886 02.07.2013 10:37

Дело в том что я хотел проработать массив таких вот таймеров в которых прослущиватель один и соответственно функция тоже одна. Но задача в том как я узнаю какой по номеру таймер сработал и потому хотел бы передать это значение в функцию. Если я правильно понял класс который предложил chamele0n и Babylon то мне при каждой итерполиции нужно будет переустанавливать таймер. А это немного неудобно.
Я, действительно думал, что для такого решения есть чо то по проще по типу as2, В принципе я решил обойти эту необходимость и реализовать все по другому. А за способ спасибо пригодится на следующий раз

KumoKairo 02.07.2013 11:40

Если отслеживать нужно только номер, то 100% сработает вариант с расширением класса Timer
Код AS3:

package
{
        import flash.utils.Timer;
 
        public class MyLittleTimer extends Timer
        {
                public var number:Number; //паблик для простоты, я в курсе что лучше использовать private с set и get и т.д. и т.п.
 
                public function MyLittleTimer(delay:Number, repeatCount:int=0)
                {
                        super(delay, repeatCount);       
                }
 
        }
}

И потом используйте вместо стандартного, не забыв указать номер таймера после создания:
Код AS3:

myLittleTimer1:MyLittleTimer = new MyLittleTimer(1000, 1);
myLittleTimer1.number = 1;
myLittleTimer1.addEventListener(TimerEvent.TIMER,func_timer);
 
myLittleTimer2:MyLittleTimer = new MyLittleTimer(1320, 1);
myLittleTimer2.number = 2;
myLittleTimer2.addEventListener(TimerEvent.TIMER,func_timer);

А потом, в слушателе
Код AS3:

private function func_timer(e:TimerEvent):void
{
    trace(e.target.number);
}

Можно сделать свой таймер с доп параметром в конструкторе

belv 02.07.2013 13:28

А почему нельзя сделать так?
Код AS3:

var myTiimer:Timer = new Timer(1000,1);
myTiimer.addEventListener(TimerEvent.TIMER,func_timer);
private function func_timer(e:TimerEvent):void
{
    anyFunction(e.target.name);
}
private function anyFunction(name:String)
{
// тут список условий в зависимости какой таймер сработал
}



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

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