AS3中子级精灵的坐标

时间:2013-02-27 16:02:10

标签: actionscript-3 coordinates sprite

我有一个更大的项目,但我可以将我的问题缩小到这个例子:

public function Main() 
    {
        var myContainer:Sprite = new Sprite;
        myContainer.graphics.beginFill(0xFFFFFF);
        myContainer.graphics.lineStyle(1);
        myContainer.graphics.drawRect(10, 10, 300, 300);
        myContainer.graphics.endFill();
        addChild(myContainer);
        trace('Container coords: ' + myContainer.x + ' ' + myContainer.y);
        trace('Instance coords: ' + getChildAt(numChildren - 1).x + ' ' + getChildAt(numChildren - 1).y);
        var spr:Sprite = new Sprite;
        spr.graphics.beginFill(0xFF0000);
        spr.graphics.lineStyle(1);
        spr.graphics.drawCircle(30, 30, 10);
        spr.graphics.endFill();
        myContainer.addChild(spr);
        trace('Child coords: ' + spr.x + ' ' + spr.y);
        trace('Child instance coords: ' + myContainer.getChildAt(myContainer.numChildren - 1).x + ' ' + myContainer.getChildAt(myContainer.numChildren - 1).y);
    }

输出是这样的:

Container coords: 0 0
Instance coords: 0 0
Child coords: 0 0
Child instance coords: 0 0

有人可以解释如何在精灵中获取子精灵的实际坐标(本地或全局,我知道你可以在两者之间转换)?

2 个答案:

答案 0 :(得分:0)

您的myContainer未设置x,y。只设置了图形绘制坐标(10,10)。 spr反之亦然。

请参阅以下代码。这段代码有些不同,但视觉输出相同。父级的坐标设置为10。绘制坐标集(0,0)。所以myContainer x,y是10,我想,你有点误会。 getChildAt(numChildren-1)myContainer。所以这个协调也一样。 myContainer没有任何孩子。 graphics不是儿童概念。此外,子坐标与父级相对。

var myContainer:Sprite = new Sprite;
myContainer.x = 10;
myContainer.y = 10;
myContainer.graphics.beginFill(0xFFFFFF);
myContainer.graphics.lineStyle(1);
myContainer.graphics.drawRect(0, 0, 300, 300);
myContainer.graphics.endFill();
addChild(myContainer);

//myContainer.x = 10, myContainer.y=10
//getChildAt(numChildren - 1).x = 10, getChildAt(numChildren - 1).y = 10

您的代码如下:

enter image description here

我的代码如下:

enter image description here

答案 1 :(得分:0)

试试这个!

var point:Point = new Point(spr.x, spr.y);
point = localToGlobal(point);
trace('Child coords: ' + point);