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

Yuliy 24.11.2007 21:45

Классы и события.
 
К примеру, есть два класса:

Код:

package
{
  var vT:T_2 = new T_2(); // содержит экземпляр второго класса
  public class T_1 extends MovieClip
  {
      function T_1() {}
  }
}

и класс T_2:

Код:

package
{
  public class T_2 extends MovieClip
  {
    function T_2()
    {
        Movic.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDownMovic);
    }
//--------------------------------------------
// событие происходит если нажали на мувик
//--------------------------------------------
    public function onMouseDownMovic(event:Event):void
    {
        trace("onMouseDownMovic");
    }
  }
}

Событие в нажатия T_2 - происходит. И классу T_1 нужно знать произошло ли оно, чтобы так же выполнить соответствующее действие, например передать результат на Сервер.

Как узнать когда в T_2 событие произошло?

Как вариант можно поставить булевскую переменную в T_2 и постоянно проверять в T_1 - addEventListener(Event.ENTER_FRAME, Update); произошло ли событие или нет. Но это како-то слишком прямолинейный метод, мягко говоря.

Какие ещё есть варианты?

DarkLight 24.11.2007 21:48

создавать свои события с помощью dispatchEvent и подписывать на них того, кому надо знать

Yuliy 24.11.2007 22:15

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

MrPoma 25.11.2007 00:37

Код:

package{
        import flash.display.*;
        import flash.events.Event;
       
        dynamic public class EventExample extends Sprite{
                public function EventExample():void{
                        var unit:Unit = new Unit();
                        unit.addEventListener(Unit.MOUSE_DOWN, mouse_down_handler)
                       
                        addChild(unit);
                }
               
                private function mouse_down_handler(e:Event):void{
                        trace('event example: mouse down')
                }
        }
}


Код:

package{
        import flash.display.*;
        import flash.events.*;
       
        dynamic public class Unit extends Sprite{
                public static var MOUSE_DOWN:String = 'on_mouse_down';
               
                public function Unit():void{
                        addEventListener(MouseEvent.MOUSE_DOWN, mouse_down_handler);
                }
               
                private function mouse_down_handler(e:Event):void{
                        trace('unit: mouse down')
                        dispatchEvent(new Event(MOUSE_DOWN));
                }
        }
}


Yuliy 25.11.2007 04:36

А если EventExample - не содержит экземпляра класса: Unit, можно ли тогда переловить событие?

etc 25.11.2007 12:44

MrPoma, статические константы с названиями событий пишутся не так и не в классе, который их посылает, а в наследнике Event.

MrPoma 25.11.2007 18:25

Код:

package{
        import flash.events.Event;
       
        dynamic public class UnitEvent extends Event{
                public static var MOUSE_DOWN:String = 'on_mouse_down';
               
                public function UnitEvent():void{
                       
                }
        }
}

так что ли??

etc 25.11.2007 18:31

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

Yuliy 25.11.2007 22:42

Понятно. Спасибо. Всё получилось.

Yuliy 26.11.2007 00:27

я вот тут подумал - от этого dispatchEvent(new Event(MOUSE_DOWN)); - очень мало толку!

Мы объявляем событие в одном классе, а затем это же событие в другом, когда мы можем сделать так:

Код:

// Muvic - это мувик над котрым нажимают
EventExample.unit.Muvic.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
public function onMouseDownAddNewUser(event:Event):void
{
    trace("onMouseDown");
}

То есть объявить это событие в нужном нам классе.

Плюс метода, на который указал DarkLight и списав с хелпа предоставил MrPoma в том, что он поддреживает инкапсуляцию данных.


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

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