【问题标题】:ActionScript MouseEvent.clone() appears broken?ActionScript MouseEvent.clone() 出现损坏?
【发布时间】:2013-03-11 07:44:19
【问题描述】:

我在尝试在 ActionScript 3 中 redispatch 鼠标事件时遇到了问题,我承认对此有点怀疑。我已将其缩小到出现的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 成员似乎被正确克隆了,这让我对这里发生的事情感到更加茫然。

【问题讨论】:

    标签: actionscript-3 events mouseevent dispatcher


    【解决方案1】:

    这是一个已知的错误。您可以在此处查看错误报告:http://bugs.adobe.com/jira/browse/FP-343

    不过,其他所有内容都应该被克隆。在修复错误之前,您始终可以手动分配 stageX 和 stageY。

    【讨论】:

    • 我对 Adob​​e 失去了更多的尊重,因为这个 bug 现在已经快一年了。感谢您的链接。
    • 是的,有一些这样的错误。它不会影响很多人,解决方法很简单,所以我想他们不会打扰。
    • 可能更像是“我们不必费心修复它,人们只会解决它”。鸡肉和鸡蛋:)
    【解决方案2】:

    我意识到这个线程已经休眠了 7 个月,但只是为了更新一下 - 它在 FP10 和 Flex4 中仍然处于活动状态。如果您重新调度事件,也会发生这种情况。即:

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

    dispatchEvent() 调用似乎相当于 clone(),所以 stageX 和 stageY 设置为 0

    【讨论】:

      【解决方案3】:

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

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-26
        • 1970-01-01
        • 1970-01-01
        • 2019-02-15
        • 1970-01-01
        • 2011-07-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多