0

我正在为动作脚本 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!");
   }
}   

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

谢谢!

4

1 回答 1

1

经过大量阅读..我要求的可能是不可能的。

实际上,有变通办法。您是正确的,因为由于安全限制,您尝试完成此操作的方式实际上是不可能的。但是,您可以通过 LocalConnection 类构建我喜欢称之为编组器适配器的东西。您将需要在 AS2 中有一个使用 localConnection 与 flex 4 端通信的方法。您将不得不使用简单的类型并更通用地传递 Red5Event 的属性,但是您应该能够使用自定义的“marshaller-adapter”来完成您需要的事情。

祝你好运,杰里米

于 2010-07-13T19:12:31.230 回答