0

我有父精灵宽度的问题。我创建了两个精灵:父母和孩子

var parent:Sprite = new Sprite();
var child:Sprite = new Sprite();

addChild(parent);
parent.addChild(child);

child.x = 20;
child.y = 20;
child.graphics.beginFill(0xFF0000);
child.graphics.drawRect(0, 0, 100, 100);
trace("colorBox.graphics.beginFill(0xFF0000);");
trace("colorBox.graphics.drawRect(0, 0, 100, 100);");
trace("parent", parent.width, parent.height, parent.x, parent.y);
trace("child", child.width, child.height, child.x, child.y);

如果我在 Sprite 上添加 Sprite,则 parent.width 为 100,即使 child.x = 20。高度和 y 也是如此。

但是,如果我像这样更改代码:

var parent:Sprite = new Sprite();
var child:Sprite = new Sprite();

parent.graphics.drawRect(0, 0, 0, 0); // the difference

addChild(parent);
parent.addChild(child);

child.x = 20;
child.y = 20;
child.graphics.beginFill(0xFF0000);
child.graphics.drawRect(0, 0, 100, 100);
trace("colorBox.graphics.beginFill(0xFF0000);");
trace("colorBox.graphics.drawRect(0, 0, 100, 100);");
trace("parent", parent.width, parent.height, parent.x, parent.y);
trace("child", child.width, child.height, child.x, child.y);

父宽度变为等于 120。

为什么会这样?如何在没有“parent.graphics.drawRect”黑客的情况下让孩子调整父母的宽度?

4

1 回答 1

1

Sprite 的宽度不一定从其原点 (0, 0) 计算。它是根据其中元素的边界计算的,从内容的最左点开始。由于子元素的最左点是 20,因此宽度是从那里计算的。当您将图形添加到 (0, 0) 时,宽度从新的最左侧点 (0, 0) 开始计算。

有几种方法可以解决这个问题:

创建您自己的宽度计算方法,根据孩子的偏移量和宽度返回宽度:

function myWidth():Number {
    return child.x + child.width;
}

做你已经做过的事情,并在父母的原点添加一个不可见的元素。

参考:http ://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/DisplayObject.html#width

于 2013-05-22T14:15:23.433 回答