Actionscript 3 在AS3的自定义事件中重写克隆()。。。需要帮助吗
我创建了一个自定义的偶数类,它非常基本。但是,当调用一个事件,然后将该事件中继到另一个类时,我遇到了“无法将thisEvent转换为thisOtherEvent”错误 我意识到这是因为我需要覆盖自定义事件中的克隆函数,如下所示:Actionscript 3 在AS3的自定义事件中重写克隆()。。。需要帮助吗,actionscript-3,Actionscript 3,我创建了一个自定义的偶数类,它非常基本。但是,当调用一个事件,然后将该事件中继到另一个类时,我遇到了“无法将thisEvent转换为thisOtherEvent”错误 我意识到这是因为我需要覆盖自定义事件中的克隆函数,如下所示: package com { import flash.disply.*; import flash.events.Event; public class MyCustomEvents extends Event { public static cons
package com
{
import flash.disply.*;
import flash.events.Event;
public class MyCustomEvents extends Event
{
public static const SOME_EVENT:String = "some_event";
public var info:Object;
public function MyCustomEvents($type:String, $info:Object,$bubbles:Boolean = false, $cancelable:Boolean = false)
{
super($type, $bubbles, $cancelable);
this.info = $info;
}
public override function clone():Event {
return new MyCustomEvents($type, $bubbles, $cancelable);
}
}
}
但是,当我发送事件时,仍然会出现此错误。还有什么我可能遗漏的吗
以下是错误:
TypeError:Error#1034:类型强制失败:无法转换com.greensock.events::TransformEvent@d8df709转到com.customEvents.MyCustomEvents。
我试着在代码中铸造事件,如下所示:
var deleteImgEvent:MyCustomEvent = new MyCustomEvent(MyCustomEvents.IMAGE_DELETE, {imgData: getImg}, true, false); this.dispatchEvent(deleteImgEvent as MyCustomEvents);
还是不走运
更新:
好的,问题似乎出在greensock变换库中。调用自定义事件的事件处理程序时,我运行TransformManager类的函数
_manager.deleteSelection();
在该类中,它调度了一个TransformEvent。不确定原因,但它正在将删除事件作为MyCustomEvent读取 不知道是不是这样,但在自定义事件中有一个额外的参数
$info:Object
,但不能将其传递到克隆构造函数中
return new MyCustomEvents(type, info, bubbles, cancelable);
我认为您需要克隆函数来返回MyCustomEvents类型。不是事件类型。您需要添加上一张海报中所述的info参数
package com {
import flash.display.*;
import flash.events.Event;
public class MyCustomEvents extends Event {
public static const SOME_EVENT:String = "some_event";
public var info:Object;
public function MyCustomEvents($type:String, $info:Object,$bubbles:Boolean = false, $cancelable:Boolean = false) {
super($type, $bubbles, $cancelable);
this.info = $info;
}
public override function clone():MyCustomEvents {
return new MyCustomEvents(this.type, this.info, this.bubbles, this.cancelable);
}
}
}
“创建自己的自定义事件时
类,则必须重写继承的
方法的顺序
要复制您的
自定义类。如果未设置所有
您在应用程序中添加的属性
事件子类,这些属性将
在以下情况下没有正确的值:
侦听器处理重新修补的
事件。”
不,我试过了,还是有同样的错误。我读到的每一篇文章都说这是我需要做的,但仍然不起作用。不,因为您正在覆盖事件克隆()而不是自定义事件克隆。当我这样做时,我得到了一个不兼容的覆盖。错误实际在哪里?您的
clone()
覆盖基本正确(除了需要将“info”参数传递给clone()
函数中的构造函数,如下所示)。是否尝试将clone()
函数的结果分配给类型为MyCustomEvents
的变量?如果是这样,您将需要强制转换clone()
函数的结果。好的,因此我添加了$info变量,但仍然收到以下错误:TypeError:error#1034:Type强制失败:无法转换com.greensock.events::TransformEvent@d8df709转到com.customEvents.MyCustomEvent。我尝试在如下代码中强制转换事件:var deleteImgEvent:MyCustomEvent=newmycustomevent(MyCustomEvent.IMAGE_DELETE,{imgData:getImg},true,false);this.dispatchEvent(deleteImgEvent作为MyCustomEvent);仍然不走运。拼写错误:“disply”
/**
* @usage
* var myEvent:CustomEvent = new CustomEvent(CustomEvent.EVENT_TYPE_A, { integerRelatedToEvent: 5, stringRelatedToEvent: 'easy' });
* addEventListener(CustomEvent.EVENT_TYPE_A, traceCustomEvent);
* dispatch(myEvent);
* function traceCustomEvent ($e:CustomEvent):void {
* trace($e.type);
* }
*/
package {
import flash.events.Event;
public class CustomEvent extends Event {
// Types:
public static const EVENT_TYPE_A:String = 'CustomEvent.EVENT_TYPE_A';
public static const EVENT_TYPE_B:String = 'CustomEvent.EVENT_TYPE_B';
// Components:
private var _customDatum:Object;
public function get customDatum ():Object { return _customDatum; }
public function CustomEvent ($type:String, $customDatum:Object) {
super($type);
_customDatum = $customDatum;
}
public override function clone ():Event {
return new CustomEvent(type, _customDatum);
}
}
}
package com.events;
{
import flash.events.Event;
public class XMLLoaderEvent extends Event
{
public static const XML_LOADED:String = "XML_Loaded";
public var data:*;
public var properties:Object;
public function XMLLoaderEvent( type:String,_data:*,bubbles:Boolean = false,cancelable:Boolean = false):void
{
super( type, bubbles, cancelable );
data = _data;
}
// Override clone
override public function clone():Event
{
return new XMLLoaderEvent( type, data, bubbles, cancelable);
}
}
}