Actionscript:父级的大小取决于孩子的宽度和坐标

时间:2013-05-22 14:07:39

标签: actionscript-3 actionscript

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

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”hack的情况下让孩子调整父级的宽度?

1 个答案:

答案 0 :(得分: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