【问题标题】:EventDispatch error in action script 3动作脚本 3 中的 EventDispatcher 错误
【发布时间】:2017-03-19 14:16:02
【问题描述】:

我不确定我的代码是否有问题,或者我是否必须以不同的方式处理错误。我有一个 Gear 实例,另一个是 bLine。一旦齿轮上线,我试图让两者都移动。所以我在实例中的编码是:

var ev2:Event = new Event("transfer");

dispatchEvent(ev2);


stop();

在 bLine 我有: `

import flash.events.Event;

this.addEventListener(Event.ENTER_FRAME,Move);

function Move(e:Event):void {
    this.x=this.x+3;

};

然后,在主时间线中:

 import flash.events.Event;
gear.addEventListener("transfer",transferGear);

function transferGear(e:MouseEvent) {
bLine.gotoAndPlay(2);

 };

这是我得到的输出: “TypeError:错误 #1034:类型强制失败:无法将 flash.events::Event@16bbd6bb7821 转换为 flash.events.MouseEvent。 在 flash.events::EventDispatcher/dispatchEventFunction() 在 flash.events::EventDispatcher/dispatchEvent()

在 Rube2_fla::mc_gear_4/frame24()"

那么我做错了什么以及如何解决它?

【问题讨论】:

  • 尝试(e:Event) 甚至(e:Event = null) 而不是(e:MouseEvent)。您的 gear.addEventListener 没有定义鼠标事件,因此稍后无法告知函数 transferGear 期望输入类型为 MouseEvent
  • 你太棒了,非常感谢。我什至没有注意到!
  • PS:使用(e:Event = null) 的意义在于,即使在不涉及某些事件的时候,您也可以使用相同的功能。为此,只需随时执行 transferGear(); 以使 bLine 转到第 2 帧。

标签: actionscript-3 flash


【解决方案1】:

您可以更改函数参数:

function transferGear(e:Event) {...}

或您正在调度的事件类。

new MouseEvent("transfer");

但在这种情况下,您会创建更多不需要的附加字段(例如本地 X)

大多数情况下,您会使用自己的扩展 Event 类并使用定义一些自定义静态类型来像这样工作:

gear.addEventListener(MyOwesomeEvent.TRANSFER,transferGear);

您可能还想看看this question

建议

如果您想做更多高级的事情而不是简单地播放一些动画或单击按钮,那么我建议安装 some IDE 并将您的代码与您的 .fla 文件分开。

例如,当您点击ctrt + shift + 1 时,Flash 开发会自动生成事件侦听器代码,因此很难出错。它看起来像这样(未编辑,系统内存不足...:/)。

此外,按照惯例,我们以小写字母开头函数名称,以便您可以将其与类区分开来。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-09
    • 2011-09-13
    • 2012-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多