我在尝试时遇到了问题 重新调度 ActionScript 3 中的鼠标事件,我承认对此有点怀疑。我已将范围缩小到 MouseEvent.clone() 方法看起来,嗯,完全被破坏了。以下事件处理程序:

    private function handleMouseMove( evt : MouseEvent ) : void
    {
        trace("mousemove", evt.stageX, evt.stageY);
        var newEvt : MouseEvent = evt.clone() as MouseEvent;
        trace("mousemoveclone", newEvt.stageX, newEvt.stageY);
    } 

产生以下输出,无穷无尽:

mousemove 167 206 
mousemoveclone 0 0

这与我将 MouseEvent 重新分派到的代码所接收到的内容相匹配,因此我假设克隆函数已损坏。

这与链接文档指示的应该发生的情况直接矛盾,除非我错过了一些东西。我完全不知道我做了什么(或没有做什么)可能会导致这种行为。AS3 的人真的忘记阅读他们自己的文档了吗? Event.clone()?

我可以通过针对我的特定用例使用函数对象来解决这个问题,但我不想这样做。有任何想法吗?

编辑: localX 和 localY 成员似乎已被正确克隆,这让我对这里发生的情况更加茫然。

有帮助吗?

解决方案

那是一个已知的错误。你可以在这里看到的错误报告: http://bugs.adobe.com/jira/浏览/ FP-343

其他的一切应该得到但克隆。可以始终只是手动分配stageX和不自然的,直到错误被固定。

其他提示

我知道这个线程7个月处于休眠状态,但只是为了更新这个有点 - 这是仍然活跃在FP10和FLEX4。如果您重新调度事件也发生。即:

private function mouseListener( e:MouseEvent ):void
{
    dispatchEvent( e );
}

这dispatchEvent()调用似乎是一个克隆()的等效,所以stageX和不自然的被设定为0

这是一个相当老的问题,但这是我在谷歌搜索解决方案时出现的问题,而且这里的内容还不够全面。

这个问题没有被“修复”的原因是它正在按预期工作。stageX 和 stageY 值是在您调用 getter 时计算的,使用事件的目标进行 localToGlobal 转换。这是必要的,这样即使目标对象在事件发送后发生了位置、缩放或旋转变化,数字也能保持正确。

如果您确实需要使用正确的 stageX 和 stageY 值重新调度 MouseEvent,您的两个选择是:

  1. 创建一个覆盖 stageX 和 stageY getter 的 MouseEvent 自定义子类。您可以存储原始目标并自行执行 localToGlobal 计算,也可以使用克隆原始事件时的值来存储 stageX 和 stageY 的静态值。

  2. 扩展 Sprite 并将调度程序添加到舞台,以便库存 MouseEvent 能够正常工作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top