Flash 在CustomEvent类上调度事件时丢失
这是我一直试图实现的目标,但运气不佳。我有一个简单的swf,名为btn.swf。它有一个按钮,当它被点击时,它会向它的父“主应用程序”发送一个事件 然后,我编写了一个CustomEvent类,“btn.swf”扩展到。swf创建CustomEvent的实例并分派事件 为了将swf内容加载到“主应用程序”中,我编写了一个CustomLoader,它扩展了Sprite类。CustomLoader将内容加载到“主应用程序”中 我无法在“主应用程序”中捕获已调度事件。我花了一天的时间在这上面,现在几乎用尽了我所能想到的一切。我将非常感谢您的帮助 让我回顾一下我的班级结构: BtnClass扩展了CustomEvent类。Btn类分派一个事件 然后将BtnClass发布为btn.swf CustomLoader类被CustomMain类用来加载btn.swf并捕获btn.swf发送的事件 已发送事件正在某个位置的翻译中丢失。也许我对整件事的看法是错误的 以下是课程: 自定义事件类 班主任 自定义加载器类 CustomMain类Flash 在CustomEvent类上调度事件时丢失,flash,actionscript-3,events,Flash,Actionscript 3,Events,这是我一直试图实现的目标,但运气不佳。我有一个简单的swf,名为btn.swf。它有一个按钮,当它被点击时,它会向它的父“主应用程序”发送一个事件 然后,我编写了一个CustomEvent类,“btn.swf”扩展到。swf创建CustomEvent的实例并分派事件 为了将swf内容加载到“主应用程序”中,我编写了一个CustomLoader,它扩展了Sprite类。CustomLoader将内容加载到“主应用程序”中 我无法在“主应用程序”中捕获已调度事件。我花了一天的时间在这上面,现在几乎用
谢谢。看起来您没有在BtnMain.as中将事件设置为气泡,因此CustomLoader将不会收到它。尝试在btnHandler中更改此行以将气泡设置为true:
evt = new CustomEvent(CustomEvent.BUBBLE_UP, obj, true, false);
你就快到了,你只需要听正在发送的对象。 因此,在主类中,参考BtnMain,并向其添加EventListener
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()
{
var btnMain:BtnMain = new BtnMain();
addChild(btnMain);
/* This is the line you need */
btnMain.addEventListener(CustomEvent.BUBBLE_UP, vHandler);
}
function vHandler(e:Event):void
{
trace('TARZAN');
}
}
}
您说过BtnMain扩展了CustomEvent类——这在两个方面都是错误的——如果它是真的,它将不起作用,并且您的代码显示它不是真的。BtnMain扩展了Sprite。试试这个:嘿,Amarghosh,非常感谢你的链接。我会试试看。谢谢
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);
}
}
}
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');
}
}
}
evt = new CustomEvent(CustomEvent.BUBBLE_UP, obj, true, false);
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()
{
var btnMain:BtnMain = new BtnMain();
addChild(btnMain);
/* This is the line you need */
btnMain.addEventListener(CustomEvent.BUBBLE_UP, vHandler);
}
function vHandler(e:Event):void
{
trace('TARZAN');
}
}
}