谁能帮助我做出以下的感觉?

我创建几个平方精灵然后删除第一个 并显示COORDS。 其结果是:

  (x=0, y=0, w=208, h=40) 0 208
  (x=42, y=0, w=166, h=40) 0 166

的x坐标仍为0,虽然宽度发生了变化, 的getBounds显示正确的值。 我希望X来改变。 因为X,globalToLocal和localToGlobal工作的错误的值不正确的。

如果你点击某处第二左侧(仍然可见)矩形 您可以:

2 28 (x=2, y=28)

这是良好的什么。括号中的值应在阶段COORDS并且它们不是

代码:

    public function test():void {
        var s:Sprite;
        var i:int;

        var arr:Array = new Array();
        for (i = 0; i < 5; ++i)
        {
            s = new Sprite();
            s.graphics.beginFill(0x999);
            s.graphics.drawRect(0, 0, 40, 40);
            s.graphics.endFill();
            s.x = i * 42;
            arr.push(s);
            addChild(s);
        }
        trace(this.getBounds(stage), x, width);
        removeChild(arr[0]); arr[0] = null;
        trace(this.getBounds(stage), x, width);
        addEventListener(MouseEvent.CLICK, click);
    }

    private function click(e:MouseEvent):void {
        trace(e.localX, e.localY, localToGlobal(new Point(e.localX, e.localY)));
    }
有帮助吗?

解决方案

你困惑在两个不同的点,但我认为他们从如何闪存涉及的坐标系统不完整的视图中的每个干。回想一下,所有的显示对象随身携带自己的坐标系。在你的第一个问题,一个对象的“X”和“Y”属性没有动态计算,以反映对象的左上角,他们只是表示该对象的原点的位置,相对于它的父级的坐标系。所以,只是因为对象的内容改变对象的“X”值不会改变 - 当你移动它改变物体本身

与舞台坐标的问题是,从范围localToGlobal方法坐标转换中,它被称为 - 你是从矩形的父母打电话,但你在坐标通过从内部本地系统长方形。凝视,继针对位和它应该意义:

function click(e:MouseEvent):void {
    // bad - uses rectangle coords in scope of "this"
    //trace(e.localX, e.localY, localToGlobal(new Point(e.localX, e.localY)));
    // works - call localToGlobal from the scope of the rectangle
    trace( e.target.localToGlobal(new Point(e.localX, e.localY)));
    // alternately, call it from any scope with coordinates taken from that scope:
    trace( localToGlobal( new Point( mouseX, mouseY )));
    trace( e.target.localToGlobal( new Point( e.target.mouseX, e.target.mouseY )));
}

<强>更新 是什么使这个混淆的部分是事件冒泡在AS3中是如何工作的。阅读的第几段这个优秀的文章得到的总体思路,然后明白,在这个例子中,事件最初由一个矩形发出的(因为这是得到了点击的图形),但只赶上他们,因为他们通过泡在那里你设置你的听众范围。所以e.target是矩形,e.currentTarget是你的听众范围。然后拼图的最后一块是了解e.localXe.localY始终是事件的原始目标的坐标系统相同。 (这是因为它们是该事件的性质,并且它是没有意义为他们不断变化作为冒泡显示列表中的事件。)

最后一点,如果你想知道如何初学者通常这个东西应付,得到的答复是,人们通常直接连接监听到具有被点击的图形内容的显示对象。在这种情况下,e.target和e.currentTarget将永远是相同的,并且大多数初学者不需要了解所有的这一点。

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