Это цель, которую я пытался достичь, но безуспешно. У меня есть простой SWF с именем "btn.swf". У него есть кнопка, и при нажатии она отправляет событие своему родительскому «Основному приложению»;
Затем я написал класс CustomEvent, который распространяется на btn.swf. Btn.swf создает экземпляр CustomEvent и отправляет событие.
Чтобы загрузить SWF-контент в «Основное приложение», я написал CustomLoader, который расширяет класс Sprite. CustomLoader загружает контент в «Главное приложение».
Я не могу отследить отправленное событие в «Основном приложении». Я потратил на это день и теперь почти исчерпал все, что мог придумать. Я был бы очень признателен за любую помощь с этим, пожалуйста.
Позвольте мне напомнить мой класс Структура:
BtnClass расширяет класс CustomEvent. Btn Class отправляет событие
BtnClass затем публикуется как btn.swf.
Класс CustomLoader используется классом CustomMain для загрузки btn.swf и перехвата отправленного события с помощью btn.swf.
Отправленное событие где-то теряется в переводе. Возможно, я подхожу ко всему неправильно, возможно.
Вот классы:
CustomEvent
класс
package com.apps.comps.btn
{
import flash.events.*;
public class CustomEvent extends Event
{
public var data:*;
public static const BUBBLE_UP:String = 'BubbleUp';
public function CustomEvent(type:String, customData:Object, bubbles:Boolean=false, cancelable:Boolean=false)
{
super(type, bubbles, cancelable);
this.data = customData;
}
override public function clone():Event
{
return new CustomEvent(type, data, bubbles, cancelable);
}
override public function toString():String
{
return formatToString('CustomEvent', 'type', 'data', 'bubbles', 'cancelable');
}
}
}
BtnMain
класс
package com.apps.comps.btn
{
import flash.display.*;
import flash.events.*;
import flash.net.*;
import flash.errors.*;
import fl.controls.*;
public class BtnMain extends Sprite
{
public var evt:CustomEvent;
public var obj:Object = {name:'JOHN', game:'RUNNING'};
public var data:*;
public function BtnMain()
{
trace("BTN MAIN INIT");
createBtn();
}
public function createBtn():void
{
var btn:Button = new Button();
btn.label = 'CLICK ME';
btn.x = btn.y = 200;
btn.addEventListener(MouseEvent.CLICK, btnHandler);
addChild(btn);
}
public function btnHandler(e:MouseEvent):void
{
evt = new CustomEvent(CustomEvent.BUBBLE_UP, obj, false, false);
this.dispatchEvent(evt);
trace('...');
}
}
}
CustomLoader
класс
package com.apps.comps
{
import flash.display.*;
import flash.net.*;
import flash.events.*;
import com.apps.comps.*;
public class CustomLoader extends Sprite
{
// URLLoader already has a data property, so I used extraData
private var _path:String;
public var _ldr:Loader;
public var eData:*;
public function CustomLoader($path:String)
{
this._path = $path;
loadContent(this._path);
}
private function loadContent(e:String):void
{
this._ldr = new Loader();
this._ldr.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progressHandler);
this._ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler);
this._ldr.load(new URLRequest(e));
}
private function progressHandler(e:ProgressEvent):void
{
var percent:uint = Math.round((e.bytesLoaded / e.bytesTotal) * 100);
trace(percent);
}
private function onCompleteHandler(e:Event)
{
e.target.dispatchEvent('BubbleUp');
this._ldr.contentLoaderInfo.addEventListener(CustomEvent.BUBBLE_UP, vHandler);
}
public function vHandler(e:CustomEvent):void
{
trace(e);
}
override public function dispatchEvent(event: Event) : Boolean
{
var customEvent: CustomEvent = new CustomEvent(event.type, extraData, event.bubbles, event.cancelable);
return super.dispatchEvent(customEvent);
}
}
}
CustomMain
класс
package com.apps.comps
{
import flash.display.*;
import flash.events.*;
import flash.net.*;
import flash.errors.*;
import com.apps.comps.*;
public class CustomMain extends Sprite
{
var custLdr:CustomEvent;
var obj:Object = {name:'SUPERMAN', game:'FLYING'};
public function CustomMain()
{
//custLdr = new CustomLoader('movies/btn.swf');
//addChild(custLdr);
this.dispatchEvent(CustomEvent(obj));
this.addEventListener(CustomEvent.BUBBLE_UP, vHandler);
}
function vHandler(e:Event):void
{
trace('TARZAN');
}
}
}
Спасибо.