flex 4:swfloader as2游戏,我可以捕获使用mx.events.EventDispatcher发送的客户吗?

时间:2010-07-06 16:10:39

标签: actionscript-2 flex4 dispatchevent

我正在构建一个用于动作脚本2 flash应用程序的flex 4容器。 我使用<mx:SWFLoader>组件来加载游戏。

我知道我可以从动作脚本3应用程序中捕获事件甚至自定义事件。

动作脚本3(不是2)的工作示例:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
           xmlns:s="library://ns.adobe.com/flex/spark" 
           xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" 
           minHeight="600" creationComplete="init()">
<fx:Script>
    <![CDATA[
        import mx.controls.Alert;

        import Red5Event;


        private function handleRed5Event(e:Red5Event):void {
            Alert.show("yay");
        }

        private function init():void {

               this.fileSwf.content.addEventListener(Red5Event.CONTROL_TYPE
                                                     ,handleRed5Event);
        }

    ]]>
</fx:Script>
    <mx:SWFLoader id="fileSwf" source="file.swf" />
</s:Application>

然后在flash应用程序中我扩展事件类,添加适当的控件类型并将bubbles设置为true,因此每当我调度一个事件时,它都可能被flex应用程序捕获。

我明白使用as2我可以使用以下示例调度自定义事件:

import mx.events.EventDispatcher;

class Sender {

   // these three lines are needed to use EventDispatcher
   public var addEventListener:Function;
   public var removeEventListener:Function;
   public var dispatchEvent:Function;   


   public function Sender() {
      // this line must be in the constructor of the class
      EventDispatcher.initialize(this);

      // dispatch an event once per second

   }

   public function sendEvent():Void {
      dispatchEvent({type:"xpoControl"});       
      trace("event sent!");
   }
}   

我可以以某种方式在动作脚本2 flash应用程序中发送一个事件,flex 4容器能够捕获吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

  经过大量的阅读......我是什么   请求可能无法使用。

实际上,有解决方法。你是正确的,因为安全限制,你试图完成这个的方式实际上是不可能的。但是,您可以通过LocalConnection类构建我喜欢称为marshaller-adapter的内容。您需要在AS2中使用一个方法,该方法使用localConnection与flex 4端进行通信。您将不得不使用简单类型并更通用地传递Red5Event的属性,但您应该能够使用自定义'marshaller-adapter'完成所需的操作。

祝你好运, 杰里米