如何从flash as3中另一个类的事件中获取数据?

时间:2011-01-02 00:14:37

标签: flash actionscript-3 events sockets


我有一个名为socket.as的类,负责套接字连接等。它有一个事件监听器onSocketData,只要收到数据就会调用它。在我的主类Main.as中,我实例化了一个socket类的对象。

如何从套接字类中获取 数据 ?我是否必须在Main.as中创建一个应该由套接字类触发的自定义事件? 谢谢。

下面是套接字类的事件监听器:

private function onSocketData(event:ProgressEvent):void <br>
{
   //string sent over serial port.   
   var data:String = _socket.readUTFBytes( _socket.bytesAvailable );  

   var direction:int = 0;  

   buffer += data;  

 while((index = buffer.indexOf(EOL_DELIMITER)) > -1)
 {
  msg = buffer.substring(0, index-1);
  len = (buffer.indexOf(EOL_DELIMITER)) - 1;

  //remove the message from the buffer
  buffer = buffer.substring(index + 1);

  if ( msg != "off" )
  {
   button = parseInt(msg.substr(6, (len-8)));

   trace("Socket Data: " + msg + ", Button: " + button);
  }
 }
}

2 个答案:

答案 0 :(得分:1)

正如您所提到的,您可以创建一个将由Socket类触发的CustomEvent,或者您可以在Socket类中调度Event,只要数据可用并使用getter来检索变量。

我在这里回答了类似的问题:
AS3 Passing data between objects/classes

答案 1 :(得分:1)

好吧,如果您只想获取数据,可以将其存储在类中的数组中,然后使用一种方法将其删除。

相反,如果您想将事件推送到Main.as,则需要创建自定义事件。

最简单的方法是从EventDispatcher派生您的课程。

然后,当您要触发某个事件时,只需致电super.dispatchEvent(new CustomEvent(payload)),其中CustomEvent是您Event派生的一类。

一般模式如下:

创建一个自定义事件...除非现有的事件类有意义......然后只重用其他东西。

public class SocketEvent extends Event {
    public var payload:String;
    public function SocketEvent(payload:String, bubbles:Boolean=false, cancelable:Boolean=false) {
        super(Socket.EVENT_NAME, bubbles, cancelable);
        this.payload = payload;
    }
}

然后,触发事件的类看起来像这样:

public class Socket extends EventDispatcher {
    public static const EVENT_NAME:String = "EVENT_NAME";

    private function fireTheEvent(payload:String):void {
        dispatchEvent(new SocketEvent(payload));
    }
}

最后,要在Main.as中使用它,你会这样做:

private var socket:Socket = new Socket();
socket.addEventListener(Socket.EVENT_NAME, actionHandler);

请注意,这不是触发事件的唯一方法。另一种方法是根据静态EventDispatcher方法实现IEventDispatcher ......但这是一个不同的例子。