Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flash 为什么obj.getBounds()height给出的高度比obj.height大?_Flash_Actionscript 3_Displayobject - Fatal编程技术网

Flash 为什么obj.getBounds()height给出的高度比obj.height大?

Flash 为什么obj.getBounds()height给出的高度比obj.height大?,flash,actionscript-3,displayobject,Flash,Actionscript 3,Displayobject,我不熟悉Flash和ActionScript,但管理得相当好。有一件事一直在妨碍我,那就是DisplayObject(Container)s的width和height属性。我终于开始了解它们,并了解到精灵的宽度和高度完全取决于它们的内容,例如 但我不明白以下几点:我有一个Sprite,我添加了一堆按钮。所有按钮的高度均为30,y为0。因此,我希望包含Sprite的高度为30。令人惊讶的是,高度是100 DisplayObject的height属性的Adobe文档说明: 指示显示对象的高度(以像素

我不熟悉Flash和ActionScript,但管理得相当好。有一件事一直在妨碍我,那就是
DisplayObject(Container)
s的
width
height
属性。我终于开始了解它们,并了解到
精灵的宽度和高度完全取决于它们的内容,例如

但我不明白以下几点:我有一个
Sprite
,我添加了一堆
按钮。所有按钮的高度均为30,y为0。因此,我希望包含
Sprite
高度为30。令人惊讶的是,
高度是100

DisplayObject
height
属性的Adobe文档说明:

指示显示对象的高度(以像素为单位)。高度是基于显示对象内容的边界计算的

显然,对象的“边界”很重要。因此,我继续在包含
按钮的
Sprite
中编写了这个小测试:

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);
这表明按钮的边界实际上大于其高度(以及它们在视觉上看起来的高度)。然而,我不知道为什么会这样。因此,我的问题是:

  • 为什么我的钮扣有界 比他们的身高还大
  • 我怎么能 设置按钮的边界,以便 我的
    Sprite
    没有比我想象的大 希望它是基于 对象的位置和大小 包含
顺便说一下,按钮的创建如下所示:

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

您似乎在跟踪容器对象的比例,但您应该对getChildAt(i)。scaleY属性(即按钮的比例)更感兴趣,该属性可能为30/100(0.3)

如果按钮本身没有缩放(这不太可能),则可能是按钮类重写了缩放和高度属性,返回的值与其父类实现返回的值不同。

来自Adobe:

返回一个矩形,该矩形定义显示对象相对于targetCoordinateSpace对象坐标系的区域。考虑下面的代码,它显示了返回的矩形如何根据您传递给方法的TestRealStaseStEp参数变化:

 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()方法返回的矩形包含形状上的任何笔划,而getRect()方法返回的矩形不包含。有关示例,请参见getRect()方法的说明


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

此外,如果您希望获得高度,为什么不:

getChildAt(i).getBounds(this).height
使用:


我试着用简单的movieclips复制这个,但是不能,所以我猜Button类会覆盖'height'的get属性,并返回'visible height',但是边界会返回高度,包括隐藏对象(那些带有.visible=false的对象)是的,这是胡说八道,“Button”类不知怎么搞砸了。问题是你可能有一个文本字段在里面。除非手动设置,否则文本字段的高度为100。愚蠢的土坯。
getChildAt(i).getBounds(this).height
getChildAt(i).height