为什么obj.getBounds()。height的高度比obj.height高?

时间:2010-03-03 13:49:01

标签: flash actionscript-3 displayobject

我是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

此代码遍历添加到其显示列表的所有对象,并显示其SpriteButtonfor (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

2 个答案:

答案 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属性以返回与其父类的实现将返回的值不同的值。