【问题标题】:bizarre event behaviour in flash AS3Flash AS3 中的奇怪事件行为
【发布时间】:2010-02-09 16:06:19
【问题描述】:

这是我在使用 flash 时遇到的最奇怪、最无法解释和最令人沮丧的事情,我不知道如何解决这个问题。

考虑这个函数

public function trackDownloadHandler(event:MP3DownloadEvent):void
  {
   dispatchEvent(event);
   //dispatchEvent(new MP3DownloadEvent(MP3DownloadEvent.OPEN,event.channelPadID))
  }

我已经这样做了一百万次了。到达处理程序的特定事件再次从它到达的类中调度。

但由于某些奇怪的原因,我收到一条错误消息

TypeError: Error #1034: Type Coercion failed: cannot convert flash.events::Event@a06ebe1 to com.rocudo.audioEngine.events.MP3DownloadEvent.

我没有看到要在哪里转换任何东西?

所以我尝试了下一步,也许只是发送一个全新的事件,然后看看效果如何。实现如下。

public function trackDownloadHandler(event:MP3DownloadEvent):void
  {
   //dispatchEvent(event);
   dispatchEvent(new MP3DownloadEvent(MP3DownloadEvent.OPEN,event.channelPadID))
  }

但在这种情况下,原始类型错误消息消失了,我收到一个新错误提示

Type was not found or compile time constant :Vector

这到底是怎么回事??

【问题讨论】:

    标签: flash actionscript-3 events


    【解决方案1】:

    认为问题可能在于您的自定义 MP3DownloadEvent 中没有定义克隆方法。

    Adobe Livedocs flash.events.Event clone()

    返回一个新的 Event 对象,它是 的原始实例的副本 事件对象。你通常不会打电话 克隆(); EventDispatcher 类 当你自动调用它 重新调度一个事件——也就是说,当你 从一个调用 dispatchEvent(event) 处理事件的处理程序。

    对于您的 Vector 错误,我相信 Vectors 仅在 CS4 中可用。因此,如果您使用为 CS4 编写的代码(并使用 Vecotrs),并且您正在使用 CS3 进行编译,您可能会收到这样的错误。

    【讨论】:

    • 我同意 sberry2A - 覆盖自定义事件类上的 clone 方法,并调度 e.clone()。虽然,您提到的第二种方法有效,但创建了一个新方法,并且 Vector 错误可能是由于 sberry2A 提到的。请注意,在某些时候您必须删除事件侦听器,否则您将遇到事件调度递归溢出。
    【解决方案2】:

    也许是在调用trackDownloadHandler(event:MP3DownloadEvent) 的事件调度中?如果你只是发送一个香草Event,那么你得到的错误是有道理的。

    【讨论】:

    • 感谢您的回复。我实际上是在编译器设置为 10.0.0 的 flex builder 中编码,所以我真的根本没有得到向量错误吗?我没有为我的自定义事件添加代码,但它实际上覆盖了克隆方法。此外,我肯定不仅仅是发送一个普通的事件。我只是没有意义,但我想我不得不过度看一些我会在早上再挖掘一点的东西.....虽然0-o我很困惑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 2015-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多