或者更准确地说,我希望能够将控件顶部到其中一个孩子的顶部之间的距离(并且添加上述所有孩子的高度成员会产生似是而非的结果!)但是获得绝对坐标并比较它们的过程看起来真的搞砸了。
我使用此函数计算2个标签顶部之间的高度:
private static function GetRemainingHeight(oParent:Container, oChild:Container,
yParent:Number, yChild:Number):Number {
const ptParent:Point = oParent.localToGlobal(new Point(0, yParent));
const ptChild:Point = oChild.localToGlobal(new Point(0, yChild));
const nHeightOfEverythingAbove:Number = ptChild.y - ptParent.y;
trace(ptChild.y.toString() + '[' + yChild.toString() + '] - ' +
ptParent.y.toString() + '[' + yParent.toString() + '] = ' + nHeightOfEverythingAbove.toString() + ' > ' + oParent.height.toString());
return nHeightOfEverythingAbove;
}
请注意oParent.y == yParent
和oChild.y == yChild
,但出于绑定原因,我这样做了。
我得到的结果非常令人惊讶:
822 [329] - 124 [0] = 698> 439
这是不可能的,因为oChild
的顶部不会消失在oParent
之下。我发现意外的唯一数字是ptChild.y。所有其他数字看起来都很合理。所以我假设我的错误在于减去两个不应该具有可比性的数字。
当然,如果有人计算两点之间不同localToGlobal()
的差异的方法,那也没关系。
我正在使用3.5 SDK。
答案 0 :(得分:0)
我通过查看http://rjria.blogspot.ca/2008/05/localtoglobal-vs-contenttoglobal-in.html(包括评论)找到了部分答案。它讨论我是否应该使用localToGlobal()或contentToGlobal(),但它填补了Adobe的文档留下的一些空白,即通过提供函数new Point(0, 0)
获得全局坐标。最后,我使用了这个:
public static function GetRemainingHeight(oParent:DisplayObject, oChild:DisplayObject,
yParent:Number, yChild:Number):Number {
const ptParent:Point = oParent.localToGlobal(new Point(0, 0));
const ptChild:Point = oChild.localToGlobal(new Point(0, 0));
const nHeightOfEverythingAbove:Number = ptChild.y - ptParent.y;
return nHeightOfEverythingAbove;
}
查看问题以获取对看似不必要的参数的解释,现在看起来它们可能真的无关紧要。
然而,我并不像我想象的那样经常需要这个功能,而且我对它的工作方式并不是非常高兴。我已经了解到我已经完成它的方式,不可能将所有这些参数都设置为函数Bindable
,并期望在更改{{{{{}}时调用此函数。 1}}制作。在一种情况下,我不得不在oChild
事件的处理程序中调用此函数。