如何修改现有的AS3事件,这样我可以通过数据?
-
09-09-2019 - |
题
所以我想一个办法来设置事件,这样我就可以传递数据,而无需创建倒闭\内存泄漏。这是据我已经得到:
package com.events {
import flash.events.Event;
public class CustomEvent extends Event {
public static const REMOVED_FROM_STAGE:String = "removedFromStage";
public var data:*;
public function CustomEvent(type:String, customData:*=null, bubbles:Boolean=false, cancelable:Boolean=false) {
super(type, bubbles, cancelable);
this.data = customData;
}
public override function clone():Event {
return new CustomEvent(type, data, bubbles, cancelable);
}
public override function toString():String {
return formatToString("CustomEvent", "type", "data", "bubbles", "cancelable", "eventPhase");
}
}
}
这让我以下行为:
function testme(e:Event) {
trace(e);
}
test_mc.addEventListener(CustomEvent.REMOVED_FROM_STAGE, testme);
test_mc.dispatchEvent(new CustomEvent(CustomEvent.REMOVED_FROM_STAGE, 42));
//Traces [CustomEvent type="removedFromStage" data=42 bubbles=false cancelable=false eventPhase=2]
removeChild(test_mc);
//Traces [Event type="removedFromStage" bubbles=false cancelable=false eventPhase=2]
我的目标是让我想通过获得从事件闪光灯,不只是一个,我火传递的自定义数据。例如,如果我想传递一个影片剪辑与Loader.complete可以事件一起把所生成位图的是什么?
解决方案
您扩展事件类为它提供额外的数据调度,现在如果你想Loader类派遣您的自定义事件类型,扩展了Loader类要做到这一点(或者你想做到这一点任何其他类)。在这个例子中,我会重写的URLLoader使用这一功能(因为装载机实际上调度事件从它的contentLoaderInfo,这需要两个重载类的,我只是想保持简单)
package com.net
{
import flash.net.URLLoader;
import flash.events.Event;
import com.events.CustomEvent;
public class CustomLoader extends URLLoader
{
// URLLoader already has a data property, so I used extraData
public var extraData:*;
override public function dispatchEvent(event: Event) : Boolean
{
var customEvent: CustomEvent = new CustomEvent(event.type, extraData, event.bubbles, event.cancelable);
return super.dispatchEvent(customEvent);
}
}
}
现在与您的自定义事件类中使用这个尝试在你的根这个代码
import com.net.CustomLoader;
import com.events.CustomEvent;
var loader: CustomLoader = new CustomLoader();
loader.extraData = "Extra Data";
loader.load(new URLRequest("test.xml"));
loader.addEventListener(Event.COMPLETE, loadComplete);
function loadComplete(event: CustomEvent) : void
{
trace(event.data); // Extra Data
}
BAM!您天生发送的事件,自定义数据!
其他提示
下面显示了创建自定义事件的干净的方式。通常,事件类型在所有大写字母输入公共静态引用。当分派的事件,它通过一个事件,或自定义事件,对象的事件处理方法。在这里,您可以检索您传递的值。
package com.hodgedev.events
{
import flash.events.Event;
public class CustomEvent extends Event
{
public static const VALUE_CHANGED:String = "VALUE_CHANGED";
public var value:Number;
public function CustomEvent(pValue:Number)
{
super(CustomEvent.VALUE_CHANGED);
value = pValue;
}
public override function clone():Event
{
return new CustomEvent(value);
}
}
}
当我们分派事件,我们创建事件的新实例为这样的传递。
private var _someValue:int = 12;
dispatchEvent(new CustomEvent(_somevalue));
不隶属于 StackOverflow