我有父精灵宽度的问题。我创建了两个精灵:父母和孩子
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的情况下让孩子调整父级的宽度?
答案 0 :(得分:1)
Sprite的宽度不一定是从其原点(0,0)计算出来的。它是根据其中元素的边界计算的,从内容的最左侧点开始计算。由于子元素的最左边的点是20,因此从那里计算宽度。将图形添加到(0,0)时,宽度将从新的最左侧点(0,0)计算。
有几种方法可以解决这个问题:
创建自己的宽度计算方法,该方法根据子项的偏移量和宽度返回宽度:
function myWidth():Number {
return child.x + child.width;
}
执行您已经完成的操作,并将不可见元素添加到父级的原点。