1

我创建了一个空精灵用作容器。

然后,我将几个符号作为子项添加到容器中(container.addChild(symbol))。

然后我向容器添加一个事件处理程序(container.addEventListener(MouseEvent.CLICK, containerClick))。

在事件处理程序中,我跟踪 event.localX 和 event.localY。

当我单击一个符号时,它会报告相对于符号注册点的 localX 和 localY。

我想要的是相对于容器注册点的 localX 和 localY。

那可能吗?

4

3 回答 3

1

是的,有几种方法可以做到这一点。

最幼稚的做法是简单地将点击符号的 x 和 y 位置添加到 localX 和 localY 中,以获取容器坐标空间中的点击坐标(假设点击符号是容器的子项)。但是,如果涉及到符号的缩放或旋转等任何转换,则此方法将失败。

最好的方法是使用localToGlobal()globalToLocal()在坐标空间之间进行转换:

private function onSymbolClicked(event : MouseEvent) : void {
    // get the parent of the clicked symbol. We use currentTarget instead
    // of target because we want to get the display object the listener was
    // attached to (currentTarget) and not the clicked display object (target)
    // which might not be the same as currentTarget if the clicked symbol
    // contains children and mouseChildren is set to true. We store the parent
    // in a variable using the most generic data type which is DisplayObjectContainer
    var symbolParent : DisplayObjectContainer = DisplayObjectContainer(event.currentTarget.parent);

    // get the clicked point in global coordinate space and create a Point instance
    var point : Point = new Point(event.stageX, event.stageY);

    // convert the point from global coordinates to the coordinate space
    // of the clicked symbol's parent
    point = symbolParent.globalToLocal(point);

    trace(point);
}
于 2013-10-24T09:03:19.570 回答
0

我认为事件中没有属性可以满足您的需求,但是一些数学应该可以满足您的需求。

正如您所确定的,localX/Y 是相对于事件目标的坐标,如果目标是 UIComponent,它的坐标是相对于它的父级的。所以一个接一个。

var containerX:Number;
var containerY:Number;

if(event.target !== container){
containerX = event.localX + event.target.x;
containerY = event.localY + event.target.y;
} else {
containerX = event.localX;
containerY = event.localY;
}
于 2013-10-24T08:53:37.997 回答
0
var rec:Rectangle = event.target.getBounds(event.target.parent);

var wantedX:Number = rec.x + event.localX;
var wantedY:Number = rec.y + event.localY;
于 2013-10-24T09:09:43.217 回答