Это цель, которую я пытаюсь выполнить, но не повезло. У меня есть простой swf с именем «btn.swf». У него есть кнопка, и когда она нажимается, она отправляет событие в родительское «Основное приложение»;Потеряно с отправкой события на CustomEvent Class
Затем я написал класс 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');
}
}
}
Благодарю вас.
Вы сказали, что BtnMain расширяет класс CustomEvent, что неверно двумя способами - это не сработает, если это правда, и ваш код показывает, что это неверно. BtnMain расширяет Sprite. – Amarghosh
попробуйте следующее: http://stackoverflow.com/questions/1515869/ –
Hey Amarghosh, Большое вам спасибо за вашу ссылку. Я это попробую. Спасибо. – Combustion007