flex 4: swfloader as2 game, могу ли я поймать обычное событие, отправленное с использованием mx.events.EventDispatcher? - PullRequest
0 голосов
/ 06 июля 2010

Я создаю контейнер flex 4 для flash-приложений сценария действия 2.Я использую <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 действия, что контейнер flex 4умеет ловить?

спасибо!

1 Ответ

1 голос
/ 13 июля 2010

после много чтения .. что я запрос может быть невозможным.

На самом деле, есть обходные пути. Вы правы в том, что то, как вы пытаетесь достичь этого, на самом деле невозможно из-за ограничений безопасности. Однако вы можете создать то, что мне нравится называть маршаллер-адаптером, через класс LocalConnection. Вам потребуется метод в AS2, который использует localConnection для связи со стороной flex 4. Вам придется использовать простые типы и передавать свойства вашего Red5Event более обобщенно, но вы должны быть в состоянии выполнить то, что вам нужно, с помощью пользовательского «marshaller-adapter».

Удачи, Джереми

...