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

alexej81 10.08.2007 19:25

передача значений в обработчике событий
 
Как можно передать значение переменной в функцию ClickHandler() при
addEventListener(MouseEvent.CLICK,ClickHandler);
или альтернативный вариант решения ?

Онтожка 10.08.2007 19:35

ClickHandler как аргумент получит событие которое его вызвало, следовательно можно сделать класс, расширяющий базовое событие, использовать его вместо MouseEvent.CLICK, добавить в него публичных переменных и получать их значения в ClickHandler

Альтернатива - можно например сделать статический класс и использовать его как хранилище статических переменных, они так-же будут доступны в ClickHandler

alexej81 10.08.2007 19:43

а можно пример класса, расширяющего базовое событие
и пример статического класса ?

Онтожка 10.08.2007 20:57

вот класс расширяющий событие MouseEvent:

Код:

package {
        import flash.events.*;
        public class CustomMouseEvent extends MouseEvent{
               
                public static var CLICKED_ONCE:String = "clickedOnce";
               
                public var anything:*;
               
                public function CustomMouseEvent(type:String,anything:*=null){
                        super(type);
                        this.anything=anything;
                }
        }
}


Вот класс для мувиклипа MenuButton в библиотеке, при нажатии на мувиклип будет трейсить текущую дату, которая берётся из CustomMouseEvent:

Код:

package {
        import flash.display.MovieClip;
        import flash.events.*;

        public class  MenuButton extends MovieClip{
                               
                public function MenuButton(){
                        addEventListener(MouseEvent.CLICK,onClick);
                        addEventListener(CustomMouseEvent.CLICKED_ONCE, ClickHandler)
                }
               
                private function onClick(evt:MouseEvent):void{
                        dispatchEvent(new CustomMouseEvent(CustomMouseEvent.CLICKED_ONCE, new Date()))
                }
               
                private function ClickHandler(evt:CustomMouseEvent):void{
                        trace(evt.anything)
                }
        }
}



Вот вариант со статической переменной в классе (сам класс статическим быть не может, я немного напутал, сам новичёк в этом можно сказать :))

Код:

package {
        public class Stat {
                public static var anything:* = 1;
        }
}

и в этом случае класс мувиклипа выглядит так:

Код:

package {
        import flash.display.MovieClip;
        import flash.events.*;

        public class  MenuButton extends MovieClip{
                               
                public function MenuButton(){
                        addEventListener(MouseEvent.CLICK, ClickHandler)
                }
               
                private function ClickHandler(evt:MouseEvent):void{
                        trace(Stat.anything)
                }
        }
}


alexej81 11.08.2007 22:04

Для первого случая : а если необходимо передать значение аргумента функции ClickHandler внутри функции MenuButton() ?

silin 12.08.2007 00:04

нет логики: передавать аргумент в addEventListener (самому себе, заметь), чтобы добавить его в событие и передать потом в ClickHandler.., не проще сразу определить нужное свойство, а в ClickHandler им воспользоваться..

alexej81 12.08.2007 00:12

а если это свойство меняется динамически, в функции MenuButton ?

silin 12.08.2007 00:21

не очень понимаю что и как ты собрался динамически менять в конструкторе..
впрочем, почему нельзя менять нужное свойство.., короче, непонятно чего добиваемся..

alexej81 12.08.2007 00:26

меняется, не в самом конструкторе, а в одном из его методов
а пример смены свойства в ClickHandler в зависимости от динамического значения внутри MenuButton ?

silin 12.08.2007 00:33

Код:

package {
        import flash.display.MovieClip;
        import flash.events.*;

        public class  MenuButton extends MovieClip{
                private var someProp:String;               
                public function MenuButton(){
                        addEventListener(MouseEvent.CLICK,onClick);
                        someProp="someVal";
                       
                }
               
                private function onClick(evt:MouseEvent):void{
                        trace( "someProp : " + someProp );
                }
        }
}



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

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