ActionScript MouseEvent.clone() 似乎已损坏?
-
05-09-2019 - |
题
我在尝试时遇到了问题 重新调度 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,您的两个选择是:
创建一个覆盖 stageX 和 stageY getter 的 MouseEvent 自定义子类。您可以存储原始目标并自行执行 localToGlobal 计算,也可以使用克隆原始事件时的值来存储 stageX 和 stageY 的静态值。
扩展 Sprite 并将调度程序添加到舞台,以便库存 MouseEvent 能够正常工作。