我是Flash和ActionScript的新手,但管理得非常好。我不断阻碍的一件事是width
的{{1}}和height
属性。我终于开始了解他们并了解到DisplayObject(Container)
的宽度和高度仅由其内容决定。
我不明白以下内容:我有一个Sprite
,我添加了一堆Sprite
。这些按钮的Button
均为30,height
为0.因此,我希望包含y
的{{1}}为30。令人惊讶的是, height
是100。
Sprite
的{{1}}属性的Adobe文档声明:
指示显示对象的高度(以像素为单位)。高度是根据显示对象内容的边界计算的。
显然,物体的“界限”很重要。所以我继续在包含height
s的height
中编写了这个小测试:
DisplayObject
此代码遍历添加到其显示列表的所有对象,并显示其Sprite
,Button
和for (var i:int = 0; i < numChildren; ++i)
{
trace("Y: " + getChildAt(i).y + " H: " + getChildAt(i).height);
trace("BOUNDS H: " + getChildAt(i).getBounds(this).height);
}
trace("SCALEY: " + scaleY + " TOTAL HEIGHT: " + height);
值。令人惊讶的是,输出是:
y
这表明按钮的边界实际上大于它们的高度(以及它们看起来的高度,视觉上)。我不知道为什么会这样。所以我的问题是:
height
并不比我大。{
期待它基于
它的位置和大小
包含?顺便说一下,按钮创建如下:
getBounds().height
答案 0 :(得分:1)
来自Adobe:
返回一个矩形,用于定义显示对象相对于targetCoordinateSpace对象坐标系的区域。请考虑以下代码,该代码显示返回的矩形如何根据您传递给方法的targetCoordinateSpace参数而变化:
var container:Sprite = new Sprite();
container.x = 100;
container.y = 100;
this.addChild(container);
var contents:Shape = new Shape();
contents.graphics.drawCircle(0,0,100);
container.addChild(contents);
trace(contents.getBounds(container));
// (x=-100, y=-100, w=200, h=200)
trace(contents.getBounds(this));
// (x=0, y=0, w=200, h=200)
注意:使用localToGlobal()和globalToLocal()方法将显示对象的本地坐标转换为显示坐标,或将坐标显示为本地坐标。
getBounds()方法类似于getRect()方法;但是,getBounds()方法返回的Rectangle包括形状上的任何笔划,而getRect()方法返回的Rectangle则不包含。有关示例,请参阅getRect()方法的说明。
根据我的理解,按钮的界限默认设置为100。尝试将高度增加到超过100&amp;仍然是getbounds将返回100.我的猜测是,特别是为每个控件设置某种默认值。
另外,如果你想获得高度,为什么不能代替:
getChildAt(i).getBounds(this).height
使用:
getChildAt(i).height
答案 1 :(得分:0)
您似乎正在跟踪容器对象的比例,但您应该对getChildAt(i)。 scaleY 属性(即Button的缩放)更感兴趣,这可能是30 / 100(0.3)。
如果Button本身没有缩放(这是不可能的),那么可能是Button类覆盖scale和height属性以返回与其父类的实现将返回的值不同的值。