【发布时间】:2012-09-22 20:27:27
【问题描述】:
给定舞台坐标 (x,y),我想让我的 Flash 应用程序的行为就像用户在位置 (x,y) 上单击一样。也就是说,像
function simulateClick(x:Number, y:Number):void{
var e:MouseEvent = new MouseEvent(MouseEvent.CLICK, true, false, x, y)
stage.dispatchEvent(e);
}
我发现很多页面都在谈论这种事情,它们都提供了与上述类似的解决方案。但是,这并不等同于用户点击 (x,y)。有两个问题:
首先是e.stageX和e.stageY都是0,我不能直接设置。文档说它们是在设置 e.localX 和 e.localY 时计算的,但是当我在 dispatchEvent 之前设置 e.localX 时不会发生这种情况,也不会在事件侦听器中发生这种情况。
我可以用这样的方式重写我所有的事件监听器:
var p:Point = e.target.localToGlobal(new Point(e.localX, e.localY));
这是唯一的选择吗?
第二个问题是我的事件侦听器是使用舞台的孩子注册的,而不是舞台本身。所以我需要找出调用 dispatchEvent 的目标。显然,Flash 能够确定目标应该是什么,即哪个对象拥有在位置 (x,y) 处可见的最高像素,因为它在用户实际点击时这样做。有没有一种简单的方法来获取这些信息,或者我应该编写自己的递归函数来做同样的事情?我目前正在使用 DisplayObjectContainer.getObjectsUnderPoint,但不太正确。
我正在使用 FlashDevelop 编写代码,如果这有什么不同的话。
【问题讨论】:
-
getObjectsUnderPoint() 只返回第一个 InteractiveObject,然后只返回形状。这要么是文档中的遗漏,要么是一个错误。
标签: actionscript dispatchevent