Actionscript 3 在AS3的自定义事件中重写克隆()。。。需要帮助吗

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

我创建了一个自定义的偶数类,它非常基本。但是,当调用一个事件,然后将该事件中继到另一个类时,我遇到了“无法将thisEvent转换为thisOtherEvent”错误

我意识到这是因为我需要覆盖自定义事件中的克隆函数,如下所示:

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);
    }
}
}