3

我是 Flash 和 ActionScript 的新手,但管理得很好。不断阻碍我的一件事是 s 的widthheight属性DisplayObject(Container)。我终于开始了解它们,并了解到 a 的宽度和高度Sprite仅由它们的内容决定。

我不明白以下内容:我有一个Sprite我添加了一堆Buttons 的。这些按钮都有一个height30 和一个y0。因此,我希望height包含Sprite的 是 30。令人惊讶的是,height是 100。

heighta 属性的Adob​​e 文档DisplayObject

表示显示对象的高度,以像素为单位。高度是根据显示对象内容的边界计算的。

显然,对象的“界限”很重要。所以我继续写了这个Sprite包含Buttons 的小测试:

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,heightgetBounds().height值。令人惊讶的是,输出是:

Y: 0 H: 30
BOUNDS H: 100
... (5x) 
SCALEY: 1 TOTAL HEIGHT: 100

这表明按钮的边界实际上大于它们的高度(以及它们在视觉上看起来的高度)。我不知道为什么会这样。所以我的问题是:

  • 为什么我的按钮的边界大于它们的高度?
  • 如何设置按钮的边界,以便我的按钮Sprite不会比我预期的要大,它基于它包含的对象的位置和大小?

顺便说一下,按钮的创建方式如下:

var control:Button = new Button();
control.setSize(90, 30);
addChild(control);
4

2 回答 2

1

来自 Adob​​e:

返回一个矩形,该矩形定义了显示对象相对于 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() 方法的说明。


据我了解,按钮的 getbounds 默认设置为 100。尝试将高度增加到 100 以上,但 getbounds 仍然会返回 100。我的猜测是,这是为每个控件设置的某种默认值。

另外,如果您想获得高度,为什么不代替:

getChildAt(i).getBounds(this).height

利用 :

getChildAt(i).height
于 2010-12-13T08:12:57.193 回答
0

您似乎正在跟踪容器对象的比例,但您应该对 getChildAt(i) 更感兴趣。scaleY属性(即 Button 的缩放比例),大概是 30/100 (0.3)。

如果 Button 本身没有缩放(这不太可能),那么可能是 Button 类覆盖 scale 和 height 属性以返回与其父类实现返回的值不同的值。

于 2010-05-19T18:17:13.797 回答